검색결과 리스트
글
Win32 API 프로그램의 작성 순서 6단계
1단계 : 윈도우 클래스 구조체
2단계 : 윈도우 구조체 등록
3단계 : 윈도우 생성
4단계 : 윈도우 출력
5단계 : 메시지 루프
6단게 : 메시지 처리 함수인 WndProc()의 작성
1단계 : 윈도우 클래스 구조체
2단계 : 윈도우 구조체 등록
원형 |
ATOM RegisterClassEx(__in CONST WNDCLASSEX *lpwcx |
설정 |
RegisterClass(&WndClass); |
3단계 : 윈도우 생성
윈도우를 생성하고 윈도우 핸들(HWND)을 받는 단계
HWND CreateWindow( LPCTSTR lpClassName, // 등록한 구조체 이름
LPCTSTR lpWindowName, // 메뉴위 타이틀 이름
DWORD dwStyle, //윈도우 창 모양(윈도가 가지는 모든 모양)
int x, //윈도우 화면 시작좌표 x
int y, //윈도우 화면 시작좌표 y
int nWidth, //윈도우 가로 사이즈
int nHeight, //윈도우 세로 사이즈
HWND hWndParent, //차일드 윈도일때 부모 윈도우 명시
HMENU hMenu, //메뉴
HINSTANCE hInstance, //프로그램 자체를 일컫는 정수값=자기 자신을 가리키는 1인칭 대명사
LPVOID lpParam // 사용하지 않는 부분 0의 값입력
);
4단계 : 윈도우 출력
BOOL ShowWindow(HWND hWnd, nCmdShow); // nCmdShow 는 함수가 리턴한 핸들을 그대로 넘김
/*
SW_HIDE 윈도우를 숨긴다.
SW_MINIMIZE 윈도우를 최소화하고 활성화시키지 않는다.
SW_RESTORE 윈도우를 활성화시킨다.
SW_SHOW 윈도우를 활성화하여 보여준다.
SW_SHOWNORMAL 윈도우를 활성화하여 보여준다.
*/
BOOL UpdateWindow(HWMD hWnd);
5단계 : 메시지 루프
LPMSG lpMsg, //아래 MSG 포인터 구조체 참고
HWMD hWnd, //핸들
UINT wMsgFilterMin, //받고자 하는 메세지 범위 보통 0 모든 메세지를 받겠다는 뜻
UINT wMsgFilterMax //받고자 하는 메세지 범위 보통 0 모든 메세지를 받겠다는 뜻
);
BOOL TranslateMessage( // 키입력 메세지 처리
const MSG *lpMsg
);
LRESULT DispatchMessage( // 메세지가 발생한것을 처리해 달라고 WinProc 함로 넘김
const MSG *lpmsg
);
typedef struct{
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
}MSG, *PMSG;
6단계 : 윈도우 메시지 처리 함수인 WindProc()의 작성
윈도우 메시지 (WinUser.h)
#define WM_SETFOCUS
#define WM_KILLFOCUS
#define WM_ENABLE
#define WM_SETREDRAW
#define WM_SETTEXT
#define WM_GETTEXT
#define WM_GETTEXTLENGTH
#define WM_PAINT
#define WM_CLOSE
WndProc() 함수의 기본구조
UINT iMessage,
WPARAM wParam,
LPARAM lParam)
HWND // void *형
typedef LONG_PTR LRESULT; // long 형
typedef long LONG_PTR; //
typedef LONG_PTR LPARAM; // long 형
typedef UINT_PTR WPARAM; // unsigned int 형
typedef unsigned int UINT_PTR; //
WndProc() 함수의 기본예제
{
switch (iMessage) {
case WM_DESTROY:
PostQuitMessage(0); // WinMain 함수를 빠져 나오는 메시지
break;
default:
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}return 0;
☞ 중용한 윈도우 메시지
메시지 |
설 명 |
WM_CREATE |
CreateWindow() 또는 CreateWindowEx() 함수에 의해 윈도우가 생성 되었을때 발생 하는 메시지 |
WM_SIZE |
사용자가 윈도우의 크기를 변경한 후에 발생되는 메시지 |
WM_MOVE |
사용자가 우니도우를 이동시킨 우에 발생되는 메시지 |
WM_PAINT |
윈도우의 클라이언트 영역의 일부를 새로이 그려야 하는 경우에 발생 |
WM_CHAR |
문자키(알파벳과 술자키)가 눌렸을 때 발생되는 메시지 통해 대소문자 구분 |
WM_KEYDOWN |
키보드가 눌렸을 때 발생하는 메시지 |
WM_DESTROY |
윈도우가 화면으로부터 사라지고 메모리에서 해제되기 직전에 발생되는 메시지 이다 |
WM_MOUSEMOVE |
마우스가 이동하면 계속 발생되는 메시지 |
WM_LBUTTONDOWN |
마우스의 왼쪽 버튼이 눌렸을 때 발생되는 메시지. 단 마우스의 커서는 윈도우의 클라이언트 영역안에 있어야 한다. |
WM_CLOSE |
윈도우가 종료될 때 발생하는 메시지로 '닫기' 버튼을 클릭하면 발생된 메시지 보다 WM_DESTROY 메시지 보다 이전에 발생되는 메시지이다. |
WM_QUIT |
응용 프로그램을 종료할 때 발생되는 메시지로 PostQuitMessage() 함수에 의해 발생된다. 이 메시지는 GetMessage()의 리턴값을 0으로 만든다. 이 메시지는 WinMain()에서만 받을 수 있다. |
전체적인 구조와 코드
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
HINSTANCE g_hInst;
LPCTSTR lpszClass=TEXT("First");
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
g_hInst=hInstance;
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;
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);
ShowWindow(hWnd,nCmdShow);
while (GetMessage(&Message,NULL,0,0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.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));
}
'…™업무일지。 > …™WINAPI。' 카테고리의 다른 글
Resource(리소스) (0) | 2014.10.22 |
---|---|
(NonQueued Messages)넌 큐 메시지 와 (Queued Messages)큐 메시지 (0) | 2014.10.22 |
Win32 API 기초정리 (0) | 2014.10.20 |
▶Win32 API 주요 함수 (0) | 2014.10.17 |
※ WINAPI 기본형 (0) | 2014.10.15 |
RECENT COMMENT