我创建了一个应用程序,在其中我使用窗口过程来跟踪窗口中的所有控件。
我的问题是,如何将焦点初始设置为窗口中第一个创建的控件?
答案 0 :(得分:38)
有两种方法可以将初始焦点设置为MFC中的特定控件。
第一种也是最简单的方法是利用控件的Tab键顺序。在Visual Studio中使用资源编辑器布置对话框时,可以为每个控件分配选项卡索引。具有最低选项卡索引的控件将自动接收初始焦点。要设置控件的Tab键顺序,请从“Format”菜单中选择“Tab Order”,或按 Ctrl + D 。
第二种稍微复杂的方法是覆盖代表对话框的类中的OnInitDialog
function。在该函数中,您可以将输入焦点设置为您希望的任何控件,然后返回FALSE
以指示您已将输入焦点显式设置为对话框中的某个控件。如果返回TRUE
,框架会自动将焦点设置为默认位置,如上所述,作为对话框中的第一个控件。要将焦点设置为特定控件,请调用GotoDlgCtrl
method并指定您的控件。例如:
BOOL CMyDialog::OnInitDialog()
{
CDialog::OnInitDialog();
// Add your initialization code here
// ...
// Set the input focus to your control
GotoDlgCtrl(GetDlgItem(IDC_EDIT));
// Return FALSE because you manually set the focus to a control
return FALSE;
}
请注意,只需调用特定控件的SetFocus
方法,就可以不在对话框中设置焦点。 Raymond Chen explains here on his blog为什么它比这更复杂,为什么GotoDlgCtrl
函数(或其等价的,WM_NEXTDLGCTRL
消息)是首选。