C++ Win32API WM_KEYDOWN and buttons
C++ Win32API WM_KEYDOWN and buttons
我在WM_KEYDOWN接收消息时遇到问题。WM_KEYDOWN工作只是很好,直到我点击任何按钮在我的应用程序。从那时起,它不再接收我的输入从键盘。如何解决这个问题?
如果您正在使用Win32控件,如CreateWindowEx(NULL, L"BUTTON", ...
,这是预期的每个控件实际上是一个子窗口,并捕获所有的窗口消息后,它有焦点。
一旦按钮被点击,你可以捕获WM_COMMAND - BM_CLICK消息,然后调用SetFocus(hwnd)重新聚焦在你的窗口(如Giswin提到的)。
在你点击应用程序上的任何按钮之前,可能你的窗口没有焦点。你可以在应用程序的某个地方添加代码以编程方式设置焦点:
yourwindow->SetFocus();
或使用winapi:
::SetFocus(hWnd);
以防有人想知道,我(毫不奇怪)注意到在我的WindowProcedure回调中处理WM_CHAR响应的相同行为也是如此。一旦你点击一个按钮,焦点就会从主窗口转移到按钮控件(这是一个子窗口),并且键盘按下不再有任何效果。
根据@NTSCCobalt的建议,在WM_COMMAND案例中添加一个简单的SetFocus(主窗口处理程序)将解决问题,例如
case DEL__BUTTON:{
<Button specific code>
SetFocus(hwnd);
return 0;
}
相关文章:
- C++核心准则 C35 对于接口类"A base class destructor should be either public and virtual, or protected and nonv
- 为什么C++逐位AND运算符在不同大小的操作数中表现为这样
- 为什么 Clang 不允许"and"作为函数名称?
- 位阵列上的快速AND运算
- 是否可以在 C++03 中定义'move-and-swap idiom'等效项
- BoostPython and CMake
- OpenSSL BIO and SSL_read
- Gurobi GRBModel and GRBmodel in C++
- std::visit and std::variant usage
- SHBrowseForFolder with BIF_BROWSEFORCOMPUTER and SHGetPathFr
- Directx12 and keystrokes
- different between int **arr =new int [ n]; and int a[i][j]?
- C++ getenv and setenv
- Inference pytorch C++ with alexnet and cv::imread image
- Visual Studio 2019 C++ and std::filesystem
- 保证逻辑 AND 表达式中的函数调用
- python ctypes and C++ pointers
- C++ const char with .begin() and .end()
- Threads with Classes and std::packaged_task
- C++ Win32API WM_KEYDOWN and buttons