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/