前提・実現したいこと
WinAPIのアクセラレータキーでCtrl + V
を作成しようとしましたが以下のように記述してもShift + V
でしか反応しません.なにが問題なのでしょうか
該当のソースコード
C
1#define UNICODE 2 3#include <windows.h> 4 5#define ID_PASTE 10001 6 7LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam); 8 9int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpszCmdLine, int nCmdShow) 10{ 11 UNREFERENCED_PARAMETER(hPrevInstance); 12 UNREFERENCED_PARAMETER(lpszCmdLine); 13 14 wchar_t CLASS_NAME[] = L"sample"; 15 16 WNDCLASSEX wc = { 17 sizeof(WNDCLASSEX),CS_VREDRAW | CS_HREDRAW, WindowProc, 18 0, 0, hInstance, 19 NULL, (HCURSOR)LoadImage(NULL, IDC_ARROW, IMAGE_CURSOR, 0, 0, LR_SHARED),(HBRUSH)GetStockObject(WHITE_BRUSH), 20 NULL, CLASS_NAME, NULL 21 }; 22 23 RegisterClassEx(&wc); 24 25 HWND hwnd = CreateWindowEx( 26 0, CLASS_NAME, L"Sample", WS_OVERLAPPEDWINDOW, 27 CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, 28 NULL, NULL, hInstance, NULL); 29 if (hwnd == NULL)return 0; 30 31 static ACCEL accel; 32 accel.key = 0x56; 33 accel.cmd = ID_PASTE; 34 accel.fVirt = FCONTROL; 35 36 HACCEL haccel = CreateAcceleratorTable(&accel, 1); 37 38 ShowWindow(hwnd, nCmdShow); 39 UpdateWindow(hwnd); 40 41 MSG msg = {}; 42 while (GetMessage(&msg, NULL, 0, 0) > 0) { 43 if (!TranslateAccelerator(hwnd, haccel, &msg)) { 44 TranslateMessage(&msg); 45 DispatchMessage(&msg); 46 } 47 } 48 49 DestroyAcceleratorTable(haccel); 50 51 return (int)msg.wParam; 52} 53 54LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 55{ 56 switch (uMsg) { 57 case WM_CREATE: 58 break; 59 case WM_COMMAND: 60 MessageBox(hwnd, L"GetMessage COMMAND", L"ALERT", MB_OK); 61 break; 62 63 case WM_DESTROY: 64 PostQuitMessage(0); 65 return 0; 66 67 default: 68 break; 69 } 70 71 return DefWindowProc(hwnd, uMsg, wParam, lParam); 72} 73
補足情報
Windows10 Pro
VisualStudio2017 Community
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/26 06:45
2018/11/26 07:03
2018/11/26 07:24