Űº¸µå ¸Þ½ÃÁö´Â ¿©·¯ °æ·Î·Î Àü´ÞµÇ´Âµ¥ ÀÏÀÏÀÌ »ìÆì º¸±â°¡ ¹«Ã´ ¾î·Æ½À´Ï´Ù.
ƯÈ÷ AltŰ¿Í °°ÀÌ ´©¸£¸é ½Ã½ºÅÛ Å°ÀÔ·ÂÀ¸·Î °£ÁÖÇϸç ÇÑ±Û ÀÔ·Â »óÅ¿¡¼´Â IME ¸Þ½ÃÁö·Î Àü´ÞµÇ¾î
Á¤È®ÇÏ°Ô ¾ðÁ¦ ¾î¶² ¸Þ½ÃÁö°¡ ¿Ô´ÂÁö ¾Ë±â ¾î·Æ½À´Ï´Ù.
ÀÌ ÄÚµå´Â Űº¸µå ÀÔ·Â ¸Þ½ÃÁö¸¦ ´ýÇÁÇÏ¿© ¸®½ºÆ® ¹Ú½º¿¡ º¸¿©ÁÝ´Ï´Ù.

â¿¡ Æ÷Ä¿½º¸¦ µÎ°í(¸®½ºÆ® ¹Ú½º¿¡ µÎ¸é ¾ÈµÊ) ۸¦ ´©¸£¸é ÀÌ Å° ÀԷ¿¡ ´ëÇÑ ¸Þ½ÃÁö¸¦ ¸®½ºÆ® ¹Ú½º¿¡ Ç¥½ÃÇÕ´Ï´Ù.
ÇÑ±Û ¸ðµåÀÏ ¶§ AltŰ¿Í °°ÀÌ ´©¸¦ ¶§ ¾î¶² ¸Þ½ÃÁö°¡ Àü´ÞµÇ´ÂÁö º¼ ¼ö ÀÖ½À´Ï´Ù.
Win32 ÇÁ·ÎÁ§Æ®¸¦ Çϳª ¸¸µé°í ´ÙÀ½ ¼Ò½º ÆÄÀÏÀ» ÀÛ¼ºÇϽʽÿÀ.
#include <windows.h>
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
HINSTANCE g_hInst;
LPCTSTR lpszClass = TEXT("KeyMsgView");
int APIENTRY WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance
, _In_ LPSTR lpszCmdParam, _In_ 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;
WndClass.lpszClassName = lpszClass;
WndClass.lpszMenuName = NULL;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd = CreateWindow(lpszClass, lpszClass, WS_OVERLAPPEDWINDOW,
10, 100, 1024, 768,
NULL, (HMENU)NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
while (GetMessage(&Message, NULL, 0, 0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return (int)Message.wParam;
}
HWND hList;
// Ű ÀÔ·Â ¸Þ½ÃÁö ÇÑ °÷À¸·Î ¸ðÀ½
void OnKey(bool bDown, bool bSys, WPARAM wParam, LPARAM lParam)
{
// wParam¿¡ °¡»óŰÄÚµå
UINT vk = (UINT)wParam;
// b30ÀÌ 1À̸é ÀÌÀü¿¡ ´·¯Á® ÀÖ¾úÀ½. 0ÀÌ¸é ¶³¾îÁ® ÀÖ¾úÀ½
bool bPrevdown = (lParam & (1 << 30)) != 0;
// b24°¡ 1À̸é È®ÀåŰÀÓ.
bool bExtend = (lParam & (1 << 24)) != 0;
// AltŰ¿Í ÇÔ²² ´·¯Á³À¸¸é b29°¡ 1ÀÌ´Ù.
bool bWithAlt = (lParam & (1 << 29)) != 0;
// ÇÏÀ§ 16ºñÆ®¿¡ ¹Ýº¹ Ä«¿îÆ®. °ÅÀÇ Ç×»ó 1ÀÓ
int repeat = lParam & 0xffff;
// b16 ~ b23±îÁö ½ºÄµÄÚµå
unsigned char scan = (unsigned char)((lParam & 0xff0000) >> 16);
TCHAR mes[3];
TCHAR item[128];
// ¸®½ºÆ® ¹Ú½º¿¡ Ãâ·ÂÇÒ Á¤º¸ Á¶¸³
if (bDown) {
if (bSys) {
lstrcpy(mes, L"SD");
} else {
lstrcpy(mes, L"KD");
}
} else {
if (bSys) {
lstrcpy(mes, L"SU");
} else {
lstrcpy(mes, L"KU");
}
}
// Ű ÀÔ·Â Á¤º¸ Á¶¸³
wsprintf(item, L"%s VK(wParam)=%x, lParam=%x, prev=%d, ext = %d, scan = %d, repeat = %d, alt = %d",
mes, wParam, lParam, bPrevdown, bExtend, scan, repeat, bWithAlt);
// ¸®½ºÆ® ¹Ú½º¿¡ Ãâ·ÂÇϰí Á¦ÀÏ ¸¶Áö¸· Ç׸ñÀ» º¸À̵µ·Ï ÇÑ´Ù.
SendMessage(hList, LB_ADDSTRING, 0, (LPARAM)item);
int count = (int)SendMessage(hList, LB_GETCOUNT, 0, 0);
SendMessage(hList, LB_SETCURSEL, count - 1, 0);
}
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam)
{
HDC hdc;
PAINTSTRUCT ps;
LPCTSTR mes = TEXT("Űº¸µå·ÎºÎÅÍ ÀÔ·ÂµÈ ¸Þ½ÃÁö¸¦ º¸¿©ÁÝ´Ï´Ù.");
LPCTSTR mes2 = TEXT("¸¶¿ì½º Ŭ¸¯ = Æ÷Ä¿½º À̵¿ ¹× ¸ñ·Ï Áö¿ò");
switch (iMessage) {
case WM_CREATE:
hList = CreateWindow(TEXT("listbox"), NULL, WS_CHILD | WS_VISIBLE | WS_BORDER | WS_VSCROLL |
LBS_NOTIFY, 10, 10, 600, 700, hWnd, (HMENU)0, g_hInst, NULL);
return 0;
case WM_KEYDOWN:
// ¸Þ´ºÅ°´Â 0x05·Î Á¶»çµÊ
OnKey(true, false, wParam, lParam);
return 0;
case WM_KEYUP:
OnKey(false, false, wParam, lParam);
return 0;
case WM_SYSKEYDOWN:
// AltŰ ÀԷ½à Àü´Þ. b24°¡ 1ÀÌ¸é ¿À¸¥ÂÊ, 0ÀÌ¸é ¿ÞÂÊ. b30ÀÌ 0À̸é óÀ½ ´¸², 1ÀÌ¸é °è¼Ó ´·ÁÁ® ÀÖ´Â °Í
OnKey(true, true, wParam, lParam);
return 0;
case WM_SYSKEYUP:
// b24·Î È®ÀåŰ ¿©ºÎ¸¸ ¾Ë ¼ö ÀÖÀ¸¸ç ÀÌÀü »óÅÂÀÎ b30Àº Ç×»ó 1ÀÓ
OnKey(false, true, wParam, lParam);
return 0;
case WM_LBUTTONDOWN:
// Ŭ¸¯½Ã ¸®½ºÆ®¹Ú½ºÀÇ Æ÷Ä¿½º¸¦ À©µµ¿ì·Î ¿Å±â°í ¸®½ºÆ® ¹Ú½º ºñ¿ò
SetFocus(hWnd);
SendMessage(hList, LB_RESETCONTENT, 0, 0);
return 0;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
TextOut(hdc, 630, 10, mes, lstrlen(mes));
TextOut(hdc, 630, 30, mes2, lstrlen(mes2));
EndPaint(hWnd, &ps);
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd, iMessage, wParam, lParam));
}
÷ºÎÇÑ ÇÁ·ÎÁ§Æ®´Â VS2022·Î ÀÛ¼ºÇÑ °ÍÀÌ¸ç ¸±¸®Áî ½ÇÇà ÆÄÀϵµ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.
¿äÁò À©µµ¿ì°¡ ±ñ±ñÇØÁ® ½ÇÇà ÆÄÀÏ ¶§¹®¿¡ ´Ù¿î·Îµå°¡ ¾ÈµÇ´Â °æ¿ìµµ Àִµ¥ ÀÌ °æ¿ì ¼Ò½º¸¦ Á÷Á¢ ÀÔ·ÂÇØ¼
¸¸µé¾î ¾²½Ê½Ã¿À.

µ· ¸ø ¹ú¾îµµ ÁÁ´Ù. Áñ°Ì°Ô »ì¸é µÈ´Ù. |
|