#include<windows.h>
#include<tchar.h>
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPWSTR lpszClass=L"ApiBase";
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpszCmdParam, int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst = hInstance;
//클래스를 등록한다 ex) 인스턴스 핸들 : 메모리에 생성된 클래스의 실체 , 내방의 여러가지 물건(객체) 존재하고있는 모든 물건들이 클래스이다.
//객체=물건 , 클래스 = 물건들, 클래스들의 집합 = 인스턴스 핸들(메모리에 실제로 올라온것)
/************* 윈도우 클래스만들기 ****************/
WndClass.cbClsExtra = 0; //클래스 여분 바이트 수
WndClass.cbWndExtra = 0; //윈도우 여분 바이트 수
WndClass.hbrBackground = (HBRUSH)GetStockObject(WHITE_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);
/*************윈도우 객체 생성*********************/
//CreateWindow로 객체를 생성하고 인트형 handle을 반환한다.
hWnd = CreateWindow(lpszClass,lpszClass,WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,CW_USEDEFAULT,
NULL,(HMENU)NULL,hInstance,NULL);
/************윈도우 화면을 띄운다********************/
ShowWindow(hWnd,nCmdShow);
/************메세지 루프(어플리케이션 큐 에서 메세지를 가저와 윈도우 프로시저로 전달)***/
while(GetMessage(&Message,0,0,0))
{
TranslateMessage(&Message); //WM_KEYDOWN,WM_CHAR,WM_KEYUP세가지 메세지 발생, GetMessage함수로 읽어드린 이벤트를 이 함수가 문자가 입력됬는지 검사하고 입력됬으면 WM_CAHR 생성하고, 문자입력이 없으면 DispatchMessage로 넘김.
DispatchMessage(&Message); //GetMessage함수로부터 전달된 메세지를 윈도우 프로시저로 전달하는 역할을한다.
}
//키보드 입력(이벤트발생) -> 운영체제(시스템큐) -> 애플리케이션큐(프로그램버퍼) -> winmain()(메세지루프) -> WndProc()(윈도우프로시저)
//SendMessage : 위의 과정을 무시하고 윈도우 프로시저 함수로 바로전달되며 메세지 전달하는 역할은 이 함수가한다. 완전히 처리되기전까지 반환되지 않는다.
//PostMessage : 위와 같음. 이 함수로 메시지를 보내면 곧바로 반환됨,해당 메세지를 붙인 스레드는 다른작업 가능함. 비동기적으로 처리시 유용함.
return Message.wParam;
//MSG message 원형
/* typedef struct tagMSG
{
HWND hWnd; 이벤트가 발생한 윈도우 핸들
UINT message; 이벤트 메시지 종류
WPARAM wParam; 부가정보
LPARAM lParam; 부가정보
DWORD time; 이벤트 접수된 시각
POINT pt; 이벤트가 발생한 위치(좌표)
}*/
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
switch(iMessage)
{
case WM_DESTROY:
PostQuitMessage(0);
}
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
'[PROGRAMMING] > ▶Window System Programming' 카테고리의 다른 글
GetModuleHandle 과 Loadlibrary 대하여.. (0) | 2012.07.26 |
---|---|
Cmd 프로세스 리스트와 프로세스 종료 구현하기 (0) | 2011.12.08 |