본문 바로가기
New/MFC 윈도우 프로그래밍

1. 윈도우 프로그래밍의 이해 (3)

by onenewkong 2024. 11. 29.

1.4 윈도우 프로그램의 기본 형식

핸들이란?

: 자원을 식별하기 위한 정수 번호

  • 윈도우는 핸들이라는 번호를 윈도우 시스템이 관리하는 모든 자원에 부여함
  • 윈도우 프로그램은 구조체를 이용해 모든 것을 객체화함
  • 이 객체들을 조정하기 위해 핸들이 필요함

1) 새로운 데이터 형식

① MSG 구조체

: MSG 구조체는 메시지 큐에 저장되는 메시지 정보를 담고 있는 구조체임

typedet struct tagMSG {
    HWND hwnd;
    UINT message;
    WPARAM wParam;
    LPARAM lParam;
    DWORD time;
    POINT pt;
} MSG;
  • hwnd: 이 메시지를 받아서 처리할 윈도우에 대한 핸들을 나타냄
  • message: 발생한 메시지를 가지고 있으며, 내부적으로 정수형으로 정의되어 있음
  • wParam: 메시지에 대한 추가적인 정보를 담고 있으며, 이 내용은 메시지의 종류에 따라 다른 값을 가질 수 있음
  • lParam: 메시지에 대한 추가적인 정보를 담고 있으며, 이 내용은 메시지의 종류에 따라 다른 값을 가질 수 있음
  • time: 메시지가 발생한 시간을 담고 있음 (시스템 시간)
  • pt: 메시지가 발생했을 때, 화면상의 스크린 좌표를 담고 있음

② WNDCLASSEX 구조체: 윈도우 속성에 대한 정보를 포함함

typedet struct tagWNDCLASSEX {
    UINT cbSize;
    UINT style;
    WNDPROC lpfnWndProc;
    int cbClsExtra;
    int cbWndExtra;
    HANDLE hInstance;
    HICON hIcon;
    HCURSOR hCursor;
    HBRUSH hbrBackground;
    LPCTSTR lpszMenuName;
    LPCTSTR lpszClassName;
    HICON hIConSm;
} WNDCLASSEX;
  • cbSize: 구조체의 크기를 나타냄
  • style: 윈도우의 스타일을 지정함, 정숫값의 조합으로 지정됨
  • lpfnWndProc: 윈도우 프로시저에 대한 포인터를 지정함
  • cbClsExtra: 윈도우 클래스의 데이터영역을 나타냄
  • cbWndExtra: 윈도우의 데이터영역을 나타냄
  • hInstance: 프로그램 자체에 대한 즉, 인스턴스에 대한 핸들을 지정함
  • hIcon: 이 윈도우에서 사용될 아이콘에 대한 핸들을 지정함
  • hCursor: 이 윈도우에서 사용할 커서에 대한 핸들을 지정함
  • hbrBackground: 윈도우의 백그라운드 브러시에 대한 핸들을 지정함
  • lpszMenuName: 윈도우에서 메뉴의 이름을 지정하며, 리소스에서 사용됨
  • lpszClassName: 윈도우 클래스의 이름 명시함
  • hIconSm: 기본적인 작은 아이콘에 대한 핸들을 지정함

③ PAINTSTRUCT 구조체: 텍스트나 이미지를 윈도우의 클라이언트 영역에 그리고자 할 때 사용할 정보를 포함함

typedet struct tagPAINTSTRUCT {
    HDC hdc;
    BOOL fErase;
    RECT rcPaint;
    BOOL fRestore;
    BOOL flncUpdate;
    BYTE rgbReserved[16];
} PAINTSTRUCT;
  • hdc: 디스플레이 컨텍스트에 대한 핸들을 지정함
  • fErase: 윈도우의 백그라운드를 다시 그릴지 지정함
  • rcPaint: 그리고자 하는 영역을 사각형 구조체를 이용하여 지정함
  • fRestore: 시스템에 예약되어 있으며, 내부적으로 사용됨
  • fIncUpdate: 시스템에 예약되어 있으며, 내부적으로 사용됨
  • rgbReserved: 시스템에 예약되어 있으며, 내부적으로 사용됨

④ RECT 구조체: 사각형 형태의 좌표를 지정하며, 왼쪽 상단 좌표와 오른쪽 하단 좌표를 저장함

typedef struct tagRECT {
    LONG left;
    LONG top;
    LONG right;
    LONG bottom;
} RECT;
  • left: 사각형 영역의 왼쪽 x좌표 명시
  • top: 사각형 영역의 위쪽 y좌표 명시
  • right: 사각형 영역의 오른쪽 x좌표 명시
  • bottom: 사각형 영역의 아래쪽 y좌표 명시

2) 헝가리언 표기법 (Hungarian Notation)

: Microsoft의 헝가리 출생 프로그래머인 찰스 시모니 (Charles Simonyi)를 기리는 뜻으로, 변수 이름은 그 데이터 형식을 의미하는 하나 이상의 소문자로 시작함

3) 윈도우 시스템의 이해

① 윈도우는 GUI (Graphic User Interface)이다.

② 윈도우는 멀티태스킹 (Muti-Tasking)을 지원한다.

③ 윈도우는 메시지 기반 구조 (Message-Driven Architecture)이다.

④ 윈도우는 윈도우 프로시저 (Window Procedure)를 호출한다.