API선언, 상수, 데이터타입, 필요한 헤더들 포함.
Winmain
- Windows 프로그램의 엔트리 포인트
hInstance
- 프로그램의 인스턴스 핸들
- 인스턴스(Instance) : 클래스가 메모리에 실제로 구현된 실체
WndClass
-윈도우를 생성하는 클래스
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 : 윈도우의 스타일 지정
lpfnWndProc : 메시지 발생시 여기서 지정한 함수를 호출하여 메시지를 처리함.
cbClsExtra,cbWndExtra : 예약영역
hInstance : 윈도우 클래스를 사용하느 프로그램
hIcon,hCursor : 마우스 커서와 아이콘 지정
hbrBackground : 배경 색지정
lpszMenuName : 프로그램이 사용할 메뉴 지정
lpszClassName : 클래스 이름 정의
윈도우 클래스를 정의한 후에는 다음과 같이 등록한다.
RegisterClass(&ClassName);
윈도우 생성 함수 : CreateWindow
HWND CreateWindow(lpszClassName,lpszWindowName,dwStyle,x,y,nWidth,nHeight,hwndParent,hmenu,hinst,lpvParam);
lpszClassName : 생성하고자 하는 윈도우 클래스 지정
lpszWindowName : 타이틀 바에 나타날 문자
dwStyle : 윈도우 형태 지정
X,Y,nWidth,nHeigth : 윈도우 크기와 위치 지정
hWndParent : 부모윈도우 존재 시 부모윈도우 핸들 지정
hmenu : 윈도우에서 사용할 메뉴의 핸들 지정
hinst : 윈도우를 만드는 주체 지정
lpvParam : 보통 NULL
화면 출력함수
ShowWindow(hWnd,nCmdShow);
hwnd : 출력하고자 하는 윈도우의 핸들 값
nCmdShow : 화면에 출력하는 방식 지정.
윈도우 창띄우기 소스
#include <windows.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int WINAPI WinMain ( HINSTANCE hInstance, HINSTANCE hPrevious, LPSTR lpCmdString, int CmdShow )
{
WNDCLASS windowClass;
HWND hWnd;
windowClass.cbClsExtra = 0;
windowClass.cbWndExtra = 0;
windowClass.hbrBackground = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
windowClass.hCursor = LoadCursor (NULL, IDC_ARROW);
windowClass.hIcon = LoadIcon (NULL, IDI_APPLICATION);
windowClass.hInstance = hInstance;
windowClass.lpfnWndProc = (WNDPROC)WndProc;
windowClass.lpszClassName = "ClassName";
windowClass.lpszMenuName = NULL;
windowClass.style = CS_HREDRAW | CS_VREDRAW;
if (!RegisterClass (&windowClass))
{
MessageBox(NULL, "Error : Cannot Register Window Class", "ERROR", MB_OK);
return (0);
} // end if
hWnd = CreateWindow ("ClassName", // 클래스명
"Taesun1114", // 윈도우 타이틀
WS_OVERLAPPEDWINDOW |
WS_VISIBLE |
WS_SYSMENU |
WS_CLIPCHILDREN |
WS_CLIPSIBLINGS,
100, // 윈도우 좌표 x
100, // 윈도우 좌표 y
640, // 윈도우 너비
480, // 윈도우 높이
NULL,
NULL,
hInstance,
NULL);
if ( hWnd == NULL )
{
MessageBox(NULL, "Error : Failed to Create Window", "ERROR", MB_OK);
return (0);
} // end if
ShowWindow ( hWnd , CmdShow);
UpdateWindow ( hWnd );
MSG msg;
while(1)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
if (msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage (&msg);
} // end if
} // end while
return msg.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam){
switch(iMessage)
{
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return (DefWindowProc(hWnd,iMessage,wParam,lParam));
}
윈도우가 띄어짐!!
'System > Windows' 카테고리의 다른 글
Message HOOK - Window (0) | 2012.08.20 |
---|---|
CreateProcess (2) | 2012.08.03 |
파일복사 api (0) | 2012.08.02 |
WinAPI 레지스트리 (0) | 2012.07.27 |
WinApi MessageBox (0) | 2012.07.26 |