U E D R , A S I H C RSS

5인용C++스터디/키보드및마우스의입출력

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 .


~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 .





  • 1-2) WM_KEYDOWN
    WM_CHAR . WM_CHAR . Ins, Del, PgUp, 펑 WM_CHAR . WM_KEYDOWN .
WM_KEYDOWN wParam . (Virtual Key Code) .

/ / 키
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
VK_NUMLOCK / 90 / Num Lock
VK_SCROLL / 91 / Scroll Lock




  • 1-3) TranslateMessage
A키 . WM_KEYDOWN, WM_CHAR, WM_KEYUP . WM_CHAR . 키 WM_KEYDOWN, 키 WM_KEYUP . WM_CHAR ? WM_KEYDOWN . .


~cpp 
while(GetMessage(&Message,0,0,0)) {
	TranslateMessage(&Message);
	DispatchMessage(&Message);
}

GetMessage TranslateMessage . TranslateMessage WM_KEYDOWN WM_CHAR . DispatchMessage WndProc . TranslateMessage WM_CHAR WndProc .




2.



GUI . 픽 툴 DTP, CAD . 키 . .

/ / /
/ 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 키 .

WM_MOUSEMOVE . lParam wParam 합키 .




Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:19
Processing time 0.0332 sec