Notice
Recent Posts
관리 메뉴

Hacking Arts

WinMain - 1.윈도우 클래스 만들기 본문

Programing/API Programing

WinMain - 1.윈도우 클래스 만들기

Rakehell 2014. 9. 19. 20:25
-윈도우 클래스 만들기 이전에 설명한 윈도우 클래스 4단계 중 첫번째 단계이다. 윈도우 클래스를 만들때는 일단 WNDCLASS라는 구조체를 선언하고 내용을 추가 해준다음 RegisterClass라는 함수를 이용하여 구조체를 등록해준다. 이러면 과정은 끝이난다.아래는 WNDCLASS 구조체 내용이다. 전부 채워주면 된다.
typedef struct tagWNDCLASSW
{
    UINT        style;
    WNDPROC     lpfnWndProc;
    int         cbClsExtra;
    int         cbWndExtra;
    HINSTANCE   hInstance;
    HICON       hIcon;
    HCURSOR     hCursor;
    HBRUSH      hbrBackground;
    LPCWSTR     lpszMenuName;
    LPCWSTR     lpszClassName;
} WNDCLASS;
이 아래는 실제 코드이다.
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
	HWND hWnd;
	MSG Message;

	WNDCLASS WndClass;

	WndClass.cbClsExtra = 0;					//클래스 여분 바이트수
	WndClass.cbWndExtra = 0;					//윈도우 여분 바이트수
	WndClass.hbrBackground = (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);
}
이런식으로 하면 된다. 마지막에 RegisterClass에게 구조체를 알려주면 등록되게 되는 것이다. 그리고 구조체로 만들어질 클래스명에 lpszClass는 LPWSTR lpszClass = L"ApiBase"; 이런식으로 전역변수로 선언하여 지정했다. 이렇게 되면
class ApiBase
{
	...
}
이런식으로 클래스의 형태가 될 것이다. 이렇게 하면 첫번째 단계가 끝이난다. 

 -참고 도서 API Programing / 이창현 / 혜지원