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 .










