#include <windows.h> //API에서 사용하는 거의 모든 함수들이 정의되어 있는 헤더파일

LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); // WndProc 함수 선언
HINSTANCE g_hInst; // 전역변수 선언
LPCTSTR lpszClass=TEXT("처음"); //전역변수 선언 & 전역문자열?

int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow) //모든 윈도우즈 프로그램의 시작지점은 winmain함수
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass; //변수선언. 대문자는 자료형임..
g_hInst=hInstance;

/* WndClass(윈도우클래스) 초기화 */
//윈도우창을 만드는 클래스..

WndClass.cbClsExtra=0; // 일종의
WndClass.cbWndExtra=0; // 예약공간
WndClass.hbrBackground=(HBRUSH)GetStockObject(BLACK_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); // 이 구조체의 번지를 전달한다는데 어브어버버.. 이런 윈도우를 만들었다고 운영체제에 알리는 역활이래염..

/* 실제로 윈도우창을 만들고 화면에 나타내는 코드*/
hWnd=CreateWindow(lpszClass, lpszClass, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, (HMENU)NULL, hInstance, NULL); //방금 선언한 WndClass로 본격 윈도우를 생성하는 함수. 파라메터들이 ㅎㄷㄷ하게 많네염;
ShowWindow(hWnd, nCmdShow); // 출력하고자 하는 윈도우의 핸들(?)

/* 사용자나 시스템으로부터 온 메세지들을 처리하는 부분. */
//메세지 루프라고 함
while(GetMessage(&Message, NULL, 0, 0)) { //메세지 큐에서 메세지를 읽어드리는 부분
TranslateMessage(&Message); // 키보드에서 입력을 받아오는 부분(?)
DispatchMessage(&Message); // 메세지큐에 저장된 메세지를 꺼내 WndProc(메세지처리함수)함수로 전달?
}
return (int)Message.wParam;
}

/* 운영체제에서 메세지를 처리하는 부분. 위의 메세지 루프랑 차이가 있다는데 잘 모르겠네; */
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) //함수 원형
{
switch (iMessage) {
case WM_DESTROY: // WM_DESTROY 메세지만 처리. 윈도우가 종료할려고 할때 발생하는 메세지임
  PostQuitMessage(0); //GetMessage()에 0(NULL)값을 보내 winmain이 종료됨.
  return 0;
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam)); //정의하지 않은 메세지 처리
}

2009/01/31 17:38 2009/01/31 17:38

Trackback Address >> http://stageclear.net/tc/trackback/8

  1. KanG2 2009/04/30 14:37  address  modify / delete  reply

    ShowWindow(hWnd, nCmdShow);
    함수 이름 그대로 윈도우를 어떻게 보여줄건지의 여부라고 보면 됨.
    어떤 윈도우를 (->hWnd) 어떻게 보여줄꺼냐 (->nCmdShow)

    CreateWindow 함수에서 세번째 파라메터에 WS_VISIBLE 을 넘겨주면 걍 보이긴 한다만..

[로그인][오픈아이디란?]