1.보 ¶
- 1-1) WM_CHAR 메
보부 는 를 램 보 메(WM_CHAR)를 보내며 램 메를 받 보 리. (Focus)를 램란 는 를 말며 번 램만 . 무리 러 램 동 는 멀 더 는 램 밖 며 램만 를 보 받들 . 냐면 보는 뿐며 보를 는 뿐 문.
~cpp #include <windows.h> LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); HINSTANCE g_hInst; LPSTR lpszClass="Key"; 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)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,0,0,0)) { TranslateMessage(&Message); DispatchMessage(&Message); } return Message.wParam; } LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; static char str[256]; int len; switch(iMessage) { case WM_CHAR: len = strlen(str); str[len]=(TCHAR)wParam; str[len+1]=0; InvalidateRect(hWnd,NULL,FALSE); return 0; case WM_PAINT: hdc=BeginPaint(hWnd,&ps); TextOut(hdc,100,100,str,strlen(str)); EndPaint(hWnd,&ps); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; } return(DefWindowProc(hWnd,iMessage,wParam,lParam)); }
를 보. 보 를 르면 문들 면 .WndProc 보면 문 str 며 문 변 문들 모. 변는 WndProc 는 변므 냥 면 메 마 문 static 붙 변 만들 . 면 WinMain 변 만들 .
문들 바 바 문 모 는 는 보 는 문 리 문. 보 보 메 WM_CHAR 며 메 문 립만 문 WM_PAINT 리. 물 WM_CHAR 메 문 바 바 는 능는 만 램 면 릴 를 며 모 WM_PAINT . 면 문들 면 복 는.
WM_CHAR 메는 문 를 wParam 며 리는 wParam 떤 를 눌는를 내 .
는 wParam 를 str 문배 .
문들 바 바 문 모 는 는 보 는 문 리 문. 보 보 메 WM_CHAR 며 메 문 립만 문 WM_PAINT 리. 물 WM_CHAR 메 문 바 바 는 능는 만 램 면 릴 를 며 모 WM_PAINT . 면 문들 면 복 는.
WM_CHAR 메는 문 를 wParam 며 리는 wParam 떤 를 눌는를 내 .
는 wParam 를 str 문배 .
~cpp len = strlen(str); str[len]=(TCHAR)wParam; str[len+1]=0;
문 부 wParam 바 뒤 0 문 . 마 동 복 str 문 배는 .
보 메는 str배 문 만 며 문 면 는 WM_PAINT 맡는. 보 메 문 더 면 변는 므 WM_PAINT메 는. WM_PAINT 메를 는데 는 InvalidateRect 를 면 . WM_CHAR 문 립 InvalidateRect 를 보 마 면 리 .
보 메는 str배 문 만 며 문 면 는 WM_PAINT 맡는. 보 메 문 더 면 변는 므 WM_PAINT메 는. WM_PAINT 메를 는데 는 InvalidateRect 를 면 . WM_CHAR 문 립 InvalidateRect 를 보 마 면 리 .
- 1-2) WM_KEYDOWN
보부 문를 받 는 WM_CHAR 메를 면 는 배. 문 를 받면 WM_CHAR 메만는 받 . 를 들 동 Ins, Del, PgUp, 등 는 문 문 WM_CHAR 메는 낼 . 는 WM_KEYDOWN 메를 .
/ /
VK_LBUTTON / 01
VK_RBUTTON / 02
VK_CANCEL / 03 / Ctrl-Break
VK_MBUTTON / 04
VK_BACK / 08 / Backspace
VK_TAB / 09 / Tab
VK_RETURN / 0D / Enter
VK_SHIFT / 10 / Shift
VK_CONTROL / 11 / Ctrl
VK_MENU / 12 / Alt
VK_ESCAPE / 1B / Esc
VK_SPACE / 20 / Space
VK_END / 23 / End
VK_HOME / 24 / Home
VK_LEFT / 25 / 동
VK_UP / 26 / 동
VK_RIGHT / 27 / 른 동
VK_DOWN / 28 / 동
VK_NUMLOCK / 90 / Num Lock
VK_SCROLL / 91 / Scroll Lock
VK_LBUTTON / 01
VK_RBUTTON / 02
VK_CANCEL / 03 / Ctrl-Break
VK_MBUTTON / 04
VK_BACK / 08 / Backspace
VK_TAB / 09 / Tab
VK_RETURN / 0D / Enter
VK_SHIFT / 10 / Shift
VK_CONTROL / 11 / Ctrl
VK_MENU / 12 / Alt
VK_ESCAPE / 1B / Esc
VK_SPACE / 20 / Space
VK_END / 23 / End
VK_HOME / 24 / Home
VK_LEFT / 25 / 동
VK_UP / 26 / 동
VK_RIGHT / 27 / 른 동
VK_DOWN / 28 / 동
/ 30 ~ 39 / 0~9
/ 41 ~ 5A / 문 A~Z
VK_F1 ~ VK_F16 / 70 ~ 7F / F1 ~ F16/ 41 ~ 5A / 문 A~Z
VK_NUMLOCK / 90 / Num Lock
VK_SCROLL / 91 / Scroll Lock
- 1-3) TranslateMessage
~cpp while(GetMessage(&Message,0,0,0)) { TranslateMessage(&Message); DispatchMessage(&Message); }
2.마 ¶
GUI는 보보 마 더 많 . 는 보만 DTP, CAD 등 복 램는 마 . 보 리를 메 는 마 마 리 메를 받 리. 마 메는 .
/ / 놓 / 더블릭
/ WM_LBUTTONDOWN/ WM_LBUTTONUP / WM_LBUTTONDBLCLK
/ WM_RBUTTONDOWN/ WM_RBUTTONUP / WM_RBUTTONDBLCLK
/ WM_LBUTTONDOWN/ WM_LBUTTONUP / WM_LBUTTONDBLCLK
/ WM_RBUTTONDOWN/ WM_RBUTTONUP / WM_RBUTTONDBLCLK
마 메는 lParam 마 눌러 y, x를 며 내 HIWORD, LOWORD 등 매 를 . 마 메 는 (LOWORD(lParam), HIWORD(lParam)) .
wParam는 마 보 (Shift, Ctrl) . 는 들 보면 .
/ 명
MK_CONTROL / Ctrl 눌 .
MK_LBUTTON / 마 눌 .
MK_RBUTTON / 마 른 눌 .
MK_MBUTTON / 마 눌 .
MK_SHIFT / Shift 눌 .
MK_CONTROL / Ctrl 눌 .
MK_LBUTTON / 마 눌 .
MK_RBUTTON / 마 른 눌 .
MK_MBUTTON / 마 눌 .
MK_SHIFT / Shift 눌 .
마 메 마 동 마 는 WM_MOUSEMOVE 메 . 메 른 마 메 마 lParam 마 며 wParam .