본문 바로가기

Programming Study/Win32 API

그리기 1.DC(Device Context) DC의 정의 윈도우즈에서 그리기가 복잡하고 난해한 근본적인 이유는 여러 개의 프로그램이 동시에 실행되는 멀티 태스킹 운영체제이기 때문이다. 이런 복잡함을 조금이나마 단순화하기 위한 장치가 DC이다. DC에는 그리기에 필요한 여러 가지 정보가 저장되어 있으며 프로그램은 DC의 정보를 참조하여 그리기를 하고 DC의 정보를 조작하여 그리는 방법을 변경한다. 운영체제는 프로그램들끼리 상호 영역을 침범하지 않고 최대한 효율적으로 그리기를 할 수 있도록 DC의 정보를 관리한다. DC의 구조 윈도우즈에서 모든 그리기를 조율하는 DC의 실체는 단순한 데이터 구조체이다. 그리기 관련 정보의 집합이라고 할 수 있는데 대단히 복잡할 것 같지만 알고 보면 멤버가 좀 많은 구조체일 뿐이다... 더보기
메시지 1.윈도우 프로시저 윈도우 프로시저(Window Procedure) 윈도우 프로시저는 윈도우 클래스당 하나씩(윈도우당 하나씩이 아니라) 배정되며 메시지에 대응하는 방식을 정의함으로써 윈도우의 행동양식을 결정한다. 윈도우 프로시저는 다음과 같은 원형을 가는 함수이다. LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam); 윈도우 프로시저는 재진입(ReEntrant)이 가능한 함수이다. 재진입이 가능하다는 것은 WndProc 실행 중에 또 WndProc이 호출 될 수 있다는 뜻이다. 메시지 큐 메시지는 시스템이나 사용자에 의해 발생한다. 메시지는 크게 메시지 큐로 들어가는 큐(Queued) 메시지와 큐에 들어가지 않고.. 더보기
윈도우 관리 1. 윈도우 관련 함수 생성 및 파괴 윈도우를 생성하는 함수 CreateWindow / CreateWindowEx 대화상자를 만드는 함수 CreateDialog 윈도우를 파괴하거나 최소화하는 함수 BOOL DestroyWindow(HWND hWnd); BOOL CloseWindow(HWND hWnd); - 사실상 윈도우를 직접 파괴하는 경우는 흔하지 않다. - 임시적으로 잠시 만든 윈도우라든가, 아니면 사용자의 명시적인 요구로 메인 윈도우를 파괴할때, 또는 모델리스 대화상자를 파괴할때 등에 DestroyWindow 함수를 가끔 사용한다. - CloseWindow 함수는 윈도우를 단순히 최소화하기만 하는데 ShowWindow(hWnd, SW_MINIMIZE)와 기능적으로 동일하다. 위치와 크기 윈도우의 좌.. 더보기
윈도우 1. 윈도우(Window) 윈도우의 정의 Window : A rectangular area of the screen where the application displays output and receives input from user. 프로그램이 출력 결과를 내 보내고 사용자로부터 입력을 받아들이는 화면상의 사각영역 윈도우의 가장 일반적인 세가지 특징. - 윈도우는 일단 화면상에 존재한다. - 그 모양은 반드시 직사각형이다. - 윈도우는 독립적으로 사용자와 상호작용을 할 수 있다. 2. 윈도우 클래스 모든 윈도우들은 윈도우 클래스로부터 만들어진다. 윈도우 클래스는 윈도우를 만들기위한 형틀이며 생성될 윈도우의 여러 가지 특징들을 모아놓은 구조체이다. 프로그램의 메인 윈도우를 만들기 위해서는 Registe.. 더보기
대화상자 1.대화상자 대화상자는 프로그램과 사용자간의 대화, 곧 명령 및 정보 전달을 위한 특별한 윈도우이다. 대화상자를 컨트롤의 컨테이너라고도 한다. 사용자는 대화상자를 호출한 후 컨트롤을 통해 자신의 의사를 표시하고 명령을 내리며 프로그램은 대화상자에 배치된 컨트롤을 통해 현재 상태를 사용자에게 보여준다. 대화상자는 동작 방식에 따라 크게 모달형과 모델리스형으로 나뉘어진다. 모달(Modal)형은 대화상자를 닫기 전에 다른 윈도우로 전환할 수 없으며 반드시 확인(또는 OK) 버튼이나 취소(또는 Cancel) 버튼을 눌러 대화상자를 닫아야 다른 윈도우로 전환할 수 있다. 그러나 모달형이라 하더라도 다른 프로그램으로는 전환할 수 있다. 모델리스(Modeless)형은 대화상자를 열어 놓은 채로 다른 윈도우로 전환할 .. 더보기
컨트롤 컨트롤(Control) 컨트돌이란 사용자와의 인터페이스를 이루는 도구이다. 인터페이스를 이룬다는 말은 사용자로부터 명령과 입력을 받아들이고 출력 결과를 보여준다는 뜻이므로 컨트롤은 곧 입출력 도구를 뜻한다. 컨트롤도 하나의 윈도우이다. 화면상의 일정한 영역을 차지하며 자신의 고유 메시지를 처리할 수 있는 능력을 가지고 있다. 그렇다고 독립적으로 사용되는 것은 아니며 보통 대화상자의 차일드 윈도우로 존재한다. 컨트롤은 윈도우즈가 운영체제 차원에서 제공하기 때문에 미리 등록되어 있는 윈도우 클래스를 사용하면 된다. 미리 정의된 윈도우 클래스에는 다음과 같은 종류가 있다. 컨트롤 생성 함수 CreateWindow 함수 CreateWindow(lpClassName, lpWindowName, dwStyle, x,.. 더보기
그래픽 1. DC의 정보 수정 GDI(Graphic Device Interface)는 화면, 프린터 등의 모든 출력 장치를 제어하는 윈도우즈의 핵심 모듈 중 하나이다. 윈도우즈 프로그램에서의 모든 출력은 GDI를 통해서 화면과 프린터로 나가게 되어 있다. GDI 오브젝트(GDI Object) - 그래픽 출력에 사용되는 도구를 말한다. - 사용자가 GDI의 출력을 조정할 수 있는 도구이기도 하다. GDI 오브젝트는 모두 핸들로 관리되므로 우리는 다만 GDI 오브젝트를 생성하는 함수를 부르고 이 함수가 리턴하는 핸들을 받아서 사용하기만 하면 된다. DC가 BeginPaint나 GetDC 함수에 의해 처음 만들어졌을 때 디폴트로 선택된 GDI 오브젝트는 다음과 같다. 스톡 오브젝트(Stock Object) - 윈도우.. 더보기
리소스 1. 리소스 리소스란? - 코드의 논리와 무관한 데이터들 - 메뉴, 비트맵, 액셀러레이터, 문자열, 아이콘, 커서 등등 리소스들은 별도의 편집기로 만들어져 컴파일되며 링크시에 실행파일에 결합된다. 이런 컴파일 과정은 API나 MFC에서나 동일하다. 윈도우즈 프로그래밍이 도스에서와 구별되는 큰 차이점 중 하나가 바로 리소스가 코드와 분리되어 있다는 점이다. 윈도우즈 환경에서 리소스를 만드는 과정과 코딩 과정이 분리되어 있어 생기는 장점들 - 디자이너와 프로그래머가 분담하여 작업하기 편리하다. - 컴파일 속도가 현저히 빨라진다. - 한 번 만들어 놓은 리소스를 다른 프로젝트에 쉽게 가져다 쓸 수 있어 재사용에 유리하다. - 리소스는 실행중에 교체가 가능한 모듈이므로 상황에 따라 다른 형태의 리소스를 사용할 .. 더보기
입력_윈도우 관리 메시지 키보드, 마우스, 타이머 등의 입력 처리의 중심에는 메시지가 있다. 이런 명시적인 입력 외에 윈도우에 관한 기본적인 관리도 메시지로 한다. 윈도우의 상황 변화시에 보내지는 메시지들도 응용 프로그램의 입장에서 보면 일종의 입력이라고 보아야 하며 프로그램은 이를 적절하게 처리해야 한다. 생성 및 파괴 윈도우와 관련된 메시지 중 가장 간단한 메시지는 WM_CREATE와 WM_DESTROY 두가지가 있다. WM_CREATE 메시지는 윈도우가 생성될 때 보내지므로 각종 초기화를 하기에 적합한 장소이며 반대로 윈도우가 파괴될 때 보내지는 WM_DESTROY 메시지는 종료처리를 하기에 적합하다. 두 메시지는 윈도우의 일생을 통틀어 딱 한 번씩만 전달되는 특성이 있어 일회적인 작업인 초기, 종료 처리에 사용할 수 있다.. 더보기
입력_타이머 타이머 키보드나 마우스 메시지는 프로그램 실행중에 사용자로부터 입력된다. 메시지는 이렇게 사용자의 동작으로부터 유발되는 것이 보통이지만 사용자의 동작과는 상관 없이 발생하는 메시지도 있다. 대표적으로 타이머 메시지인 WM_TIMER를 들 수 있으며 이 메시지는 한 번 지정해 놓기만 하면 일정한 시간 간격을 두고 연속적으로 계속 발생한다. 주기적으로 같은 동작을 반복해야 한다거나 여러 번 나누어 해야 할 일이 있을 때 이 메시지를 이용한다. 시계 시간이라는 것은 주기적으로 갱신되어야 하는 것이므로 타이머 메시지를 사용하기에 가장 적절한 예이다. #include LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); HINSTANCE g_hInst; LPCTSTR l.. 더보기