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 .