'Programming/Windows API'에 해당하는 글 9건

RegisterClass

윈도우 클래스를 정의한 후 RegisterClass 함수를 호출하여 윈도우 클래스를 등록한다.

ATOM RegisterClass( CONST WNDCLASS *lpWndClass );

RegisterClass 함수의 인수로 WndClass 구조체의 번지를 넘겨주면 된다.
이런 특성을 가진 윈도우를 앞으로 사용하겠다는 등록 과정이다.

WNDCLASS WndClass;

WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.bhrBackground = ( HBRUSH )GetStockObject( WHITE_BRUSH );
WndClass.hCursor = LoadCursor( NULL, IDC_ARROW );
WndClass.hIcon = LoadIcon( NULL, IDI_APPLICATION );
WndClass.hInstance = hInstance;
WndClass.lpfnWndProc = ( WNDPROC )WndProc;
WndClass.lpszClassName = lpszClass;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass( &WndClass );

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,
Window Class

WinMain 함수에서 하는 가장 중요한 일은 윈도우를 만드는 일이다.
윈도우를 만들려면 윈도우 클래스를 먼저 등록한 후 CreateWindow 함수를 호출해야 한다.
윈도우 클래스는 만들어질 윈도우의 여러가지 특성을 정의한다.
윈도우 클래스는 windows.h 에 다음과 같이 정의되어 있는 구조체이다.

typedef struct tagWNDCLASS
{
  UINT  style;
  WNDPROC  lpfnWndProc;
  int  cbClsExtra;
  int  cbWndExtra;
  HINSTANCE  hInstance;
  HICON  hIcon;
  HCURSOR  hCursor;
  HBRUSH  hbrBackground;
  LPCSTR  lpszMenuName;
  LPCSTR  lpszClassName;
} WNDCLASS;

style
윈도우의 스타일을 정의한다.
가장 많이 사용하는 값으로 CS_HREDRAWCS_VREDRAW 가 있다.
이 두 값을 OR 연산자(|)로 연결하여 사용한다.
이 값들은 윈도우의 수직(또는 수평) 크기가 변할 경우 윈도우를 다시 그린다.

lpfnWndProc
윈도우의 메시지 처리 함수를 지정한다.
메시지 처리 함수의 이름은 거의 WndProc 로 정해져 있는 편이다.

cbClsExtra cbWndExtra
일종의 예약 영역으로, 윈도우즈가 내부적 또는 아주 특수한 목적에 사용되는 여분의 공간이다.
이 예약 영역을 사용하지 않을 경우는 0으로 지정한다.

hInstance
이 윈도우 클래스를 사용하는 프로그램의 번호이며 이 값은 WinMain의 인수로 전달된 hInstance 값을 그대로 대입해 주면 된다.

hIcon hCurcor
이 윈도우가 사용할 마우스 커서와 최소화되었을 경우에 출력될 아이콘을 지정한다.
LoadCursor 함수와 LoadIcon 함수를 사용하여 지정한다.

hbrBackground
윈도우의 배경 색상을 지정한다.
GetStockObject 라는 함수를 사용하여 윈도우에서 기본적으로 제공하는 브러시를 지정한다.
일반적으로 흰색 배경(WHITE_BRUSH)이 많이 사용된다.

lpszMenuName
이 프로그램이 사용할 메뉴를 지정한다.
메뉴는 프로그램 코드에서 리소스 에디터에 의해 별도로 만들어진 후 링크시에 같이 합쳐진다.
메뉴를 사용하지 않을 경우 이 멤버에 NULL 을 대입해주면 된다.

lpszClassName
윈도우 클래스의 이름을 정의한다.
여기서 지정한 이름은 CreateWindow 함수에 전달되며, CreateWindow 함수는 윈도우 클래스에서 정의한 특정값을 참조하여 윈도우를 만든다.
윈도우 클래스의 이름은 보통 실행 파일의 이름과 일치시켜 작성한다.

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,

WinMain

Programming/Windows API 2006. 10. 25. 21:23
헤더파일

windows.h
기본적인 데이터 타입, 함수 원형, 매크로 상수등을 정의
윈도우 프로그래밍에 필요한 기본적인 헤더 파일 포함


시작점

윈도우즈 프로그램의 시작점인 Entry Point 는 main 함수가 아니라 WinMain 이다.

int APIENTRY WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow )

  • hInstance
    프로그램의 인스턴스 핸들
  • hPrevInstance
    바로 앞에 실행된 현재 프로그램의 인스턴스 핸들
    없을 경우는 NULL이 되며 Win32에서는 항상 NULL이다.
    호환성을 위해서만 존재하는 인수이다.
  • IpszCmdParam
    커맨드 라인으로 입력된 프로그램 인수이다.
    도스의 argv인수에 해당한다.
  • nCmdShow
    프로그램이 실행될 형태이며 최소화, 보통 모양 등이 전달된다.
인스턴스(Instance)란 클래스가 메모리에 실제로 구현된 실체를 의미한다.
hInstance 란 프로그램 자체를 일컫는 정수값이며 프로그램 내부에서 자신을 가리킨다.


메시지 처리 함수

WndProc 은 사용자와 시스템이 보내오는 메시지를 처리한다.

LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,
변수 명명법

사용하는 변수가 많으므로 지나치게 단축형으로 쓰면 혼란스럽고 그렇다고 너무 길게 쓰면 입력이 불편하므로 적당히 절충하여 변수 이름을 정한다.
윈도우즈 프로그래밍에서 쓰이는 이런 변수 명명법을 헝가리식 명명법(Hungarian Naming)이라고도 한다.

예) cbString: 문자열의 바이트 수를 나타내는 정수형 인수(변수)
    szMessage: 널 문자열을 가리키는 포인터

* 접두어
  • cb (Count of Bytes): 바이트 수
  • dw (Double Word): 부호없는 long형 정수
  • h (Handle): 윈도우, 비트맵, 파일 등의 핸들
  • sz (Null Terminated): NULL 종료 문자열
  • ch (Character): 문자형
  • a (Array): 배열
  • w (Word): 부호없는 정수형
  • i (Integer): 정수형
  • b (Bool): 논리형

WRITTEN BY
손가락귀신
정신 못차리면, 벌 받는다.

,