ÀÚ·á½Ç

Win32-Űº¸µå ¸Þ½ÃÁö »ìÆì º¸±â ³¯Â¥:2022-1-31 5:45:16 Á¶È¸¼ö:500
ÀÛ¼ºÀÚ : ÀÛ°¡K
Æ÷ÀÎÆ® : 2108
°¡ÀÔÀÏ : 2020-02-14 22:27:56
¹æ¹®È½¼ö : 324
±Û 238°³, ´ñ±Û 88°³
¼Ò°³ : öµé±â¸¦ °ÅºÎÇÏ´Â °³±¸ÀïÀÌ ÇÁ·Î±×·¡¸Ó
ÀÛ¼º±Û º¸±â
ÂÊÁö º¸³»±â
Űº¸µå ¸Þ½ÃÁö´Â ¿©·¯ °æ·Î·Î Àü´ÞµÇ´Âµ¥ ÀÏÀÏÀÌ »ìÆì º¸±â°¡ ¹«Ã´ ¾î·Æ½À´Ï´Ù.
ƯÈ÷ 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·Î ÀÛ¼ºÇÑ °ÍÀÌ¸ç ¸±¸®Áî ½ÇÇà ÆÄÀϵµ Æ÷ÇԵǾî ÀÖ½À´Ï´Ù.
¿äÁò À©µµ¿ì°¡ ±ñ±ñÇØÁ® ½ÇÇà ÆÄÀÏ ¶§¹®¿¡ ´Ù¿î·Îµå°¡ ¾ÈµÇ´Â °æ¿ìµµ Àִµ¥ ÀÌ °æ¿ì ¼Ò½º¸¦ Á÷Á¢ ÀÔ·ÂÇØ¼­
¸¸µé¾î ¾²½Ê½Ã¿À.


 



µ· ¸ø ¹ú¾îµµ ÁÁ´Ù. Áñ°Ì°Ô »ì¸é µÈ´Ù.
÷ºÎ ÆÄÀÏ 220131-054516_KeyMsgView.zip(46208 byte). ´Ù¿î·Îµå : 70

¸ñ·Ïº¸±â »èÁ¦ ¼öÁ¤ ½Å°í ½ºÅ©·¦


·Î±×ÀÎÇÏ¼Å¾ß ´ñ±ÛÀ» ´Þ ¼ö ÀÖ½À´Ï´Ù.