如何在特定窗口中设置控件的初始焦点?

问题描述 投票:19回答:1

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

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

c++ windows winapi mfc setfocus
1个回答
40
投票

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

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

  2. 第二种,稍微复杂一点的方法是重写代表您的对话框的类中的OnInitDialog function。在该功能中,可以将输入焦点设置为所需的任何控件,然后返回OnInitDialog表示已将输入焦点显式设置为对话框中的控件之一。如果返回FALSE,则框架会自动将焦点设置为默认位置,如上所述,该默认位置是对话框中的第一个控件。要将焦点设置到特定控件,请调用TRUE并指定您的控件。例如:

    GotoDlgCtrl method

    注意,您应该not通过简单地调用特定控件的GotoDlgCtrl方法在对话框中设置焦点。 Raymond Chen 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函数(或等效的explains here on his blog消息)。

© www.soinside.com 2019 - 2024. All rights reserved.