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.0271 sec