본문 바로가기
프로그래밍/API

API-Key입력(2)

by 리뷰하는 (게임)프로그래머_리프TV 2010. 4. 21.


WM_CHAR는 문자에 대한 연산이고,

모든 키에 대한 연산을 위한

WM_KEYDOWN:

#include <windows.h>

LRESULT CALLBACK WndProc( HWND, UINT, WPARAM, LPARAM );
HINSTANCE g_hInst;
LPCTSTR lpszClass = TEXT("keyDown");

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( COLOR_WINDOW+1 );
	WndClass.hCursor = LoadCursor( NULL, IDC_ARROW );
	WndClass.hIcon = LoadIcon( NULL, IDI_APPLICATION );
	WndClass.hInstance = hInstance;
	WndClass.lpfnWndProc = 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, NULL, 0, 0 ) )
	{
		TranslateMessage( &Message );
		DispatchMessage( &Message );
	}
	return (int)Message.wParam;
}

LRESULT CALLBACK WndProc( HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam )
{
	HDC hdc;
	PAINTSTRUCT ps;
	static int x = 100;			// 문자열의 x,y위치
	static int y = 100;		
	static TCHAR str[2] = TEXT("A");	// 문자 1, 종료값 1개를 가지는 str
	static bool changeChar = true;		// bool타입, true = A, false = #
	
	switch( iMessage )
	{
	case WM_KEYDOWN:		// 키 입력을 받으면,
		switch( wParam )	// 무슨 키인지 판단하여
		{
		case VK_LEFT:		// 좌
			x -= 10;
			break;
		case VK_RIGHT:		// 우
			x += 10;
			break;
		case VK_UP:			// 위
			y -= 10;
			break;
		case VK_DOWN:		// 아래
			y += 10;
			break;			// 각각 좌표를 맞게 변경하고
		case VK_SPACE:		// 스페이스 바를 눌렀으면
			if( changeChar )	// true 상태면 #으로 변경
				str[0] = '#';
			else				// false 면 A로 변경
				str[0] = 'A';

			changeChar = !changeChar;		// bool 타입을 반대 속성으로 변경
			break;
		}
		InvalidateRect( hWnd, NULL, TRUE );		// 매번 화면을 지우면서 갱신한다.
		return 0;
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	case WM_PAINT:		// 꾸준히 출력
		hdc = BeginPaint( hWnd, &ps );
		TextOut( hdc, x, y, str, 1);
		EndPaint( hWnd, &ps );
		return 0;
	}
	return( DefWindowProc( hWnd, iMessage, wParam, lParam));
}​


// 실행 결과

설명 : 방향키에 따라서 문자가 이동하고, 스페이스바를 누르면 A -> #으로 변경된다.

'프로그래밍 > API' 카테고리의 다른 글

API-타이머  (0) 2010.04.21
API-마우스입력  (0) 2010.04.21
API-Key입력(1)  (0) 2010.04.21
API-MessageBox  (0) 2010.04.19
API-GraphOut  (0) 2010.04.19