22

我创建了一个应用程序,在其中我使用窗口过程来跟踪窗口中的所有控件。

我的问题是,我如何最初将焦点设置到窗口中第一个创建的控件?

4

1 回答 1

46

有两种方法可以将初始焦点设置到 MFC 中的特定控件。

  1. 第一种也是最简单的方法是利用控件的 Tab 键顺序。当您使用 Visual Studio 中的资源编辑器来布置对话框时,您可以为每个控件分配一个选项卡索引。具有最低标签索引的控件将自动获得初始焦点。要设置控件的 Tab 键顺序,请从“格式”菜单中选择“Tab 键顺序”,或按Ctrl+ D

  2. 第二种稍微复杂一点的方法是覆盖代表对话框的类中的OnInitDialog函数。在该函数中,您可以将输入焦点设置为您希望的任何控件,然后返回FALSE以指示您已将输入焦点明确设置为对话框中的控件之一。如果您返回TRUE,框架会自动将焦点设置到默认位置,如上文所述,对话框中的第一个控件。要将焦点设置到特定控件,请调用该GotoDlgCtrl方法并指定您的控件。例如:

    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在他的博客上解释了为什么它比这更复杂,以及为什么首选GotoDlgCtrl函数(或它的等价物,WM_NEXTDLGCTRL消息)。

于 2011-02-25T07:04:09.473 回答