본문 바로가기
코스웨어/15년 스마트컨트롤러

20151113-김재홍-win32API_2일차-출력과 입력

by 알 수 없는 사용자 2015. 11. 13.
728x90
반응형

/***win32API_2일차***/

제 3장 출력

DC(Device Context)의 개념

윈도우즈는 세 가지 동적 연결 라이브러리(DLL)로 구성되어 있는데 

메모리를 관리하고 프로그램을 실행시키는 KERNEL,

유저 인터페이스와 윈도우를 관리하는 USER,

그리고 화면 처리와 그래픽을 담당하는 GDI(Graphic Device Interface)가 그것들이다.


윈도우즈 API 함수의 대부분은 이 세 가지 DLL에 의해 제공되고 있다. 

출력을 하려면 우리는 GDI 모듈에 특별히 관심을 기울여야 하는데 화면으로 출력되는 모든 글자와 그림은 GDI를 통해야 하기 때문이다.

DC(Device Context)출력에 필요한 모든 정보를 가지는 데이터 구조체이며

GDI 모듈에 의해 관리된다. 문자열의 모양을 지정하는 폰트, 선의 색상과 굵기, 채움 무늬와 색상, 그리기 모드 등등이 모두 출력에 필요한 정보들이다. 



문자열출력

소스 : 

textout_01.c



어디까지나 출력과정을 보이기 위한 예제일 뿐 정상적인 출력을 행하지는 않았으므로 문제점을 가지고 있다.

어떤 문제인가 하면 출력된 문자열이 그 자리에 있지 않는다는 점이다. 

문자열이 출력된 윈도우를 다른 윈도우로 살짝 가렸다가 다시 드러나도록 하거나 

윈도우의 크기를 변경하면 출력되어 있던 문자열이 깜쪽같이 사라져 버릴 것이다.

 왜냐하면 운영체제가 개별 윈도우의 화면을 보관 및 복구해 주지 않기 때문이다. 

도스에서는 한번에 하나의 프로그램만 실행하며 화면을 혼자서 독점하므로 한 번 출력해 놓으면 자신이 일부러 지우지 않는 한 절대로 지워지지 않는다.

하지만 멀티 태스킹 시스템인 윈도우즈에서는 여러 개의 윈도우가 겹칠 수 있으므로 한 번 출력해 놓은 문자열이 언제까지고 그대로 그 자리에 있는다는 보장이 없다. 

모니터 화면 밖으로 옮겨졌다가 다시 나타나면 가려졌던 윈도우의 새로 드러난 부분은 지워져 있게 된다. 





콘솔창에서 메시지 띄우기위해서 아래의 소스를 추가해 줍니다.

#pragma comment(lib, "user32.lib")




제 4장 입력

키보드 입력

 윈도우즈 환경에서는 주로 마우스가 많이 사용되지만 아직까지도 컴퓨터의 가장 기본적인 입력장치는 키보드이다. 키보드로부터 입력이 발생했을 경우 윈도우즈는 포커스를 가진 프로그램에게 키보드 메시지(WM_CHAR, WM_KEYDOWN)를 보내며 프로그램은 이런 메시지를 받아 키보드 입력을 처리한다.

 여기서 포커스(Focus)란 입력 초점이라는 뜻이며 키보드 입력을 받아들일 수 있는 상태라는 뜻이다. 포커스를 가진 상태란 활성화되어 있고 현재 사용자가 쓰고 있다는 뜻인데 한 번에 오직 하나의 프로그램만 활성화된다. 활성화된 윈도우는 타이틀 바의 색상이 다른 윈도우와 다르게 표시되는데 보통 파란색으로 표시된다. 아무리 여러 개의 프로그램이 동시에 실행되는 멀티 태스킹 환경이라 하더라도 활성화될 수 있는 프로그램은 오직 하나밖에 없으며 활성화된 프로그램만 포커스를 가지고 키보드 입력을 받아들일 수 있다


유니코드문제로 원래의 소스에 다음을 수정해 줍니다.



무효영역(Invalid Region)

WM_PAINT 메시지는 윈도우가 다시 그려져야 할 필요가 있을 때마다 호출되는데 다시 그려져야 할 필요가 있다는 말은 무효영역(Invalid Region)이 있다는 뜻이다. 

만역 두개의 윈도우창이 겹쳐있다고 하면

겹쳐져서 없어진 영역을 무효한 영역이라 하고,

겹쳐진 부분을 치우면 다시 그려야할 영역이 된다.

여기서 안보이던 부분만 다시 그린다.



WM_KEYDOWN

글자를 입력 받을 때   -> WM_CHAR

방향키를 입력 받을 때 -> WM_KEYDOWN





728x90