콘솔창에서 깨작거리는 것을 넘어서 GUI 프로그래밍을 짜보고 싶었다. 그래서 공부를 시작함
필수 함수들 : WinMain() , WndProc();
WinMain() -> 프로그램 시작 지점, 윈도우를 만들고 출력시킴
WndProc() -> 실질적인 동작, 메세지 처리함수
WinMain 에서 윈도우 클래스를 등록하고 창을 출력시킴 -> CreateWindow 와 ShowWindow
그리고 메시지 루프를 시킨다. GetMessage , TranslateMessage , DispatchMessage
WndProc 함수는 메세지를 받고 그 메세지에 따른 루틴들을 작성
#include<stdio.h>
#include<conio.h>
#include<Windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPCWSTR lpszClass=TEXT("First");
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=hInstance;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=(HBRUSH)GetStockObject(LTGRAY_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;
RegisterClass(&WndClass);
// 윈도우 클래스 등록
hWnd=CreateWindow(lpszClass,lpszClass,WS_CAPTION | WS_SYSMENU,CW_USEDEFAULT,CW_USEDEFAULT,500,500,NULL,(HMENU)NULL,hInstance,NULL); // 4번째 인자부터는 x y 폭 높이
ShowWindow(hWnd,nCmdShow);
while(GetMessage(&Message,0,0,0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
switch(iMessage)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd,&ps);
TextOut(hdc,100,100,L"TEST",4);
EndPaint(hWnd,&ps);
return 0;
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
거의 되면 이러한 형태를 띈다. 창에다가 TEST 라는 문자열을 출력시키는 간단한 예제
'Programming > windows API' 카테고리의 다른 글
const char 바이바이 (0) | 2014.03.22 |
---|