Mafa Dev
윈도우 창 생성하기 소스( 주석 포함 ) 본문
#include <Windows.h>
LRESULT CALLBACK WndProc(HWND hwnd,UINT iMsg,
WPARAM wParam , LPARAM lParam);
int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
LPTSTR lpszCmdLine , int nCmdShow)
{
HWND hwnd;
MSG msg;
// 윈도우 클래스 생성
WNDCLASS WndClass; // 윈도우 클래스 타입인 WNDCLASSEX의 변수를 만들고 각 필드에 값 부여
WndClass.style = CS_HREDRAW | CS_VREDRAW; // 윈도우의 크기를 변경하면 다시 그리는 형태의 윈도우
WndClass.lpfnWndProc = WndProc; // WndProc은 메시지 처리를 위한 함수의 이름
WndClass.cbClsExtra = 0; // 보통 클래스와 운도우를 위한 여분의 메모리는 사용치 않는다.
WndClass.cbWndExtra = 0; // 그러므로 값을 0을 써준다.
WndClass.hInstance = hInstance; // 응용 프로그램 인스턴스를 WinMain()의 첫번째 매개변수로 넣어줌
WndClass.hIcon = LoadIcon(NULL , IDI_APPLICATION); // 로드하는 아이콘
WndClass.hCursor = LoadCursor(NULL , IDC_ARROW); // 로드하는 커서
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); // 흰색바탕(WHITE_BRUSH)의 윈도우를 생성한다.
WndClass.lpszMenuName = NULL; // 아직은 메뉴도 만들지 않고 사용치 않으므로 NULL이다.
WndClass.lpszClassName = "Window Class Name"; // 윈도우 클래스 이름을 "Window Class Name 라고 하였다.
RegisterClass(&WndClass); // 커널에 등록하기 위한 함수 사용방법은 매개변수로 WNDCLASSEX의
// 주소를 넣어주면 된다.
// 윈도우를 만드는 함수 CreateWindow()
hwnd = CreateWindow( // 윈도의 핸들값 반환
"Window Class Name", // 윈도우 클래스 이름
"Window Title Name", // 만들어질 윈도우 타이틀바에 나타날 이름
WS_OVERLAPPEDWINDOW, // 이미 정의된 스타일 값중 선택할수 있다. (WS_OVERLAPPEDWINDOW)는
// 타이틀바에 최소회 , 최대화 ,닫기 버튼이 나타나며 오른쪽 마우스 버튼을
// 눌렀을 때 시스템 메뉴가 나타나는 윈도우이다.
CW_USEDEFAULT, // 생성되는 윈도우가 어느 위치에 나타나야 하는지 x값과 y좌표값으로 써준다.
CW_USEDEFAULT, // CW_USEDEFAULT는 커널에 의해 기본값을 사용하라는 의미이다.
CW_USEDEFAULT, // 생성되는 윈도우의 폭과 높이 값으로 단위는 픽셀이다.
CW_USEDEFAULT, // CW_USEDEFAULT는 커널에 의해 기본값을 사용하라는 의미이다.
NULL,
NULL,
hInstance,
NULL
);
// 윈도우를 화면에 보여줌
ShowWindow(hwnd,nCmdShow); // nCmdShow는 윈도우를 화면에 나타내는 방법으로 상수값을 제공한다.
UpdateWindow(hwnd); // 윈도우에 WM_PAINT 메시지를 보내 화면에 기본 출력을 한다.
while(GetMessage(&msg , NULL , 0 , 0))
{
TranslateMessage(&msg); // 두 메시지를 하나로 변형할때 사용한다.
DispatchMessage(&msg); // 메시지를 처리하는 함수에 메시지를 보낸다.
}
return msg.wParam;
}
// 이벤트 저장되는 곳
LRESULT CALLBACK WndProc(HWND hwnd, UINT iMsg,
WPARAM wParam , LPARAM lParam)
{
switch(iMsg) // 메시지의 번호
{
case WM_CREATE: // 윈도우 생성시
break;
case WM_DESTROY: // 윈도우 종료시
PostQuitMessage(0); // 강제 종료
break;
} // 처리할 메시지만 case문에 나열한다.
return DefWindowProc(hwnd,iMsg,wParam , lParam); // 나머지는 커널이 처리하도록 메시지를 전달한다.
}
출력화면입니다.
'개발 > API 프로그램' 카테고리의 다른 글
[API] 출력 영역 얻기 (0) | 2013.02.23 |
---|---|
[API] 윈도우 프로그램의 구조 (0) | 2013.02.23 |