C++/Win32 API - 将焦点设置为按钮不起作用

标签 c++ api winapi button setfocus

HWND button = CreateWindowEx(0, "BUTTON", ...);
SetFocus(button); // Button no get focus! :(

此外,我的表单上还有其他控件,我可以使用 SetFocus() 来实现这些控件。

谢谢,马丁

最佳答案

自从我不得不这样做以来已经很久了,但是......

如果这是一个对话框,我会告诉您通过 PostMessage() 发送 WM_NEXTDLGCTL。默认对话框项消息处理程序将为您处理剩下的设置键盘焦点和选择激活。但是,如果我正确阅读的话,情况会有所不同。您正在即时创建原始的父窗口和子窗口。如果是这种情况,请 SetFocus() 到父窗口,并通过将其置于顶部来处理父窗口上的 WM_SETFOCUS,然后将焦点设置在子窗口上。 WM_SETFOCUS 和 WM_KILLFOCUS 旨在允许您切换控件的“激活”状态,并且大多数会为您处理它(除非您的窗口是所有者绘制控件或类似控件)。但是在原始窗口中,当您的基本父窗口被发送焦点时,如果您托管任何窗口,您需要适本地确保正确的子窗口拥有它(将其视为管理您自己的“对话框”)。同样,如果这是一个对话框,通常这是由默认对话框过程为您完成的,但作为原始窗口,您有点需要自己管理这一切。

虽然我无法想象如何,但我希望这有所帮助。

关于C++/Win32 API - 将焦点设置为按钮不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3463766/

相关文章:

c++ - 在类中使用全局变量作为数组大小

java - 改造Android Studio中无法得到响应

c++ - winapi c++ 窗口不少于

Python:无法保存到 CSV

php - Stripe::无法向 Laravel 中没有事件卡的客户收费

c++ - 使用 WSAIoctl 函数统计网络接口(interface)(WIN32 API)

c++ - 如何在 GDI+ 中绘制 PNG 并保持透明度/Alpha channel

c++ - 确定何时在预处理器中从 64 位交叉编译 32 位?

c++ - 如何在C++中读取未知大小的字符串

c++ - 生成已扩展模板的 C++ 代码