在用 Visual C++ 编码的 Win32 应用程序中,如何检测按键的F1按键并在发生这种情况时恢复/最大化其 GUI?
即使另一个应用程序具有焦点,也应检测到此键,并覆盖通常的 F1“帮助”窗口行为。
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
{
const wchar_t CLASS_NAME[] = L"Test";
WNDCLASS wc = { };
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
RegisterClass(&wc);
HWND hwnd = CreateWindowEx(0, CLASS_NAME, L"Test", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, nCmdShow);
MSG msg = { };
while (GetMessage(&msg, NULL, 0, 0))
{
// Should it be detected here ? //
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
正如@RbMm 在评论中提到的,解决方案是:
int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, PWSTR pCmdLine, int nCmdShow)
{
const wchar_t CLASS_NAME[] = L"Test";
WNDCLASS wc = { };
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.lpszClassName = CLASS_NAME;
RegisterClass(&wc);
HWND hwnd = CreateWindowEx(0, CLASS_NAME, L"Test", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);
ShowWindow(hwnd, nCmdShow);
RegisterHotKey(hWnd, 100, 0, VK_F1); // here we go!
MSG msg = { };
while (GetMessage(&msg, NULL, 0, 0))
{
if (msg.message == WM_HOTKEY)
// Do something here
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return 0;
}
另请参见此处。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句