5,232,974 th visitor since 2017.2.1 ( Today : 384 )
Programming
No. 295
Name. coolx
Subject. [API] hello.cpp
Main Cate. Win32
Sub Cate.
Date. 2006-07-20 09:44
Hit. 3245 (220.76.115.27)
File.
1. WinMain함수는 프로그램의 Entry Point를 가지는 표준 C Main함수와
동일한 개념의 함수이다. WndProc은 윈도우 프로시저로서, 키보드와
마우스를 통한 입력에 응답하고, 화면에 그래픽 출력을 표현하는
요약코드의 한 방법이다. 즉, 윈도우에 대한 메시지를 처리한다.

2. 어떤 소스에서도 WndProc를 직접 호출하지는 않는다. WndProc은
윈도우로부터만 호출되지만, WndMain에서 WndProc에 대한
참조가 한번 있는데 이것이 WndProc함수가 WinMain전에 프로그램의
시작 부분에서 선언되어야 하는 이유이다.


3. GetStockObject() 그래픽 개체(여기서는 윈도우 배경을 칠하는데
사용되는 브러시)를 얻는다.

4. RegisterClassEx() 프로그램의 윈도우를 위한 윈도우 클래스를 등록한다.

5. CreateWindow() 윈도우 클래스에 기반하여 윈도우 생성

6. ShowWindow() 윈도우를 화면에 표시

7. UpdateWindow() 윈도우에게 자신을 다시 그리도록 한다.

8. GetMessage() 메시지 큐에서 하나의 메시지를 얻는다.

9. TranslateMessage() 키보드 메시지를 변환한다.

10. DispatchMessage() 메시지를 윈도우 프로시저에 보낸다.

11. PostQuitMessage() 마침 메시지(WM_QUIT)를 메시지 큐에 삽입한다.

12. DefWindowProc() default메시지 처리를 수행한다.


/*------------------------------------------------------------
HELLOWIN.C -- Displays "Hello, Windows 95!" in client area
------------------------------------------------------------*/

#include <windows.h>

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

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
// hIstance는 instance handle로 프로그램을
// 유일하게 식별하는 번호이다.
// hPrevInstance는 항상 NULL이다.
// 예전에는 복사본의 적재 여부에 따라서,
// NULL값을 가진다.
// szCmdLine 실행시의 명령줄 인자이다.
// 문자열에 대한 포인터이다.
// iCmdShow 해당 윈도우가 윈도우즈에서
// 처음으로 표시되는 방법을 지시하는 번호이다.
// 1(SW_SHOWNORMAL), 7(SW_SHOWMINNOACTIVE)
// 의 값을 가진다.

{
static char szAppName[] = "HelloWin" ;
HWND hwnd ;
MSG msg ;
WNDCLASSEX wndclass ;

wndclass.cbSize = sizeof (wndclass) ;
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
// lpfn : long pointer to a function
wndclass.cbClsExtra = 0 ;
// cb : count of bytes
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;
wndclass.hIconSm = LoadIcon (NULL, IDI_APPLICATION) ;

RegisterClassEx (&wndclass) ;

hwnd = CreateWindow (szAppName, // window class name
"The Hello Program", // window caption
WS_OVERLAPPEDWINDOW, // window style
CW_USEDEFAULT, // initial x position
CW_USEDEFAULT, // initial y position
CW_USEDEFAULT, // initial x size
CW_USEDEFAULT, // initial y size
NULL, // parent window handle
NULL, // window menu handle
hInstance, // program instance handle
NULL) ; // creation parameters

ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;

while (GetMessage (&msg, NULL, 0, 0))
// WM_QUIT가 아닌 모든 메시지의 경우에
// 0이 아닌 값을 반환한다.
// WM_QUIT는 메시지는 메시지 루프를 빠져
// 나와서 프로그램이 종료된다.
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
HDC hdc ;
PAINTSTRUCT ps ;
RECT rect ;

switch (iMsg)
{
case WM_CREATE :
PlaySound ("hellowin.wav", NULL, SND_FILENAME | SND_ASYNC) ;
return 0 ;

case WM_PAINT :
hdc = BeginPaint (hwnd, &ps) ;

GetClientRect (hwnd, &rect) ;

DrawText (hdc, "Hello, Windows 95!", -1, &rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;

EndPaint (hwnd, &ps) ;
return 0 ;

case WM_DESTROY :
PostQuitMessage (0) ;
return 0 ;
}

return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
}


[바로가기 링크] : http://coolx.net/cboard/develop/295



Name
Password
Comment
Copyright © 1999-2017, swindler. All rights reserved. 367,611 visitor ( 1999.1.8-2004.5.26 ), 2,405,771 ( -2017.01.31)

  2HLAB   2HLAB_Blog   RedToolBox   Omil   Omil_Blog