将光标放在 Visual Studio 的编辑控制框中

Posted

技术标签:

【中文标题】将光标放在 Visual Studio 的编辑控制框中【英文标题】:Place cursor in edit control box in visual studio 【发布时间】:2019-12-19 04:21:09 【问题描述】:

我正在尝试在 Visual Studio 软件中制作密码对话框。一旦我的密码对话框打开,我希望将光标放在编辑控件框中,以便我可以在上面输入密码。

如何在 Visual Studio MFC 的文本编辑框中放置或放置光标而无需单击鼠标?

请建议我如何做到这一点。

static CEdit *ptrCurrentEditWindow;

BOOL GET_PASSWORD::OnInitDialog()

    CDialog::OnInitDialog();

    SetDlgItemText(IDC_PASSWORD, L"");
    ptrCurrentEditWindow = &m_wnd_password;

    return TRUE;  

【问题讨论】:

【参考方案1】:

CDialog::OnInitDialog 的文档解释了如何执行此操作。返回值部分包含以下信息:

指定应用程序是否已将输入焦点设置到对话框中的控件之一。如果OnInitDialog 返回非零值,Windows 会将输入焦点设置到默认位置,对话框中的第一个控件。仅当应用程序已将输入焦点显式设置为对话框中的某个控件时,应用程序才能返回 0。

这让你有两个选择:

让您的编辑控件成为第一个控件,并通过返回 TRUE 让 Windows 为您处理所有事情。 手动将输入移动到您的编辑控件 (CDialog::GotoDlgCtrl),然后返回 FALSE

解决更新后的问题:只要您将IDC_PASSWORD 设置为对话框模板中的第一个控件,实现已经完成,您需要什么。如果您不想或无法安排此操作,则必须手动移动输入焦点,如下所示:

BOOL GET_PASSWORD::OnInitDialog()

    CDialog::OnInitDialog();

    // Not needed; an edit control is initially empty
    SetDlgItemText(IDC_PASSWORD, L"");

    // Set input focus to the desired control
    GotoDlgCtrl(GetDlgItem(IDC_PASSWORD));
    // Let the framework know, that you already set input focus
    return FALSE;

【讨论】:

SetDlgItemText(IDC_PASSWORD, L" ");我在 OnInitDialog Box 中给出了这样的信息,但光标没有放在编辑控制框中。我必须使用鼠标单击手动完成 如果您无法安排第一个选项,请选择第二个选项。无论您更改控件的内容,任何一个都有效。如果您想以艰难的方式做到这一点,只需将实现中的最后一行代码替换为:GotoDlgCtrl(GetDlgItem(IDC_PASSWORD)); return FALSE;。顺便说一句,在对话框中有一个指向 UI 元素的静态成员变量是非常不常见的。并且不可避免地会给你带来悲伤。无论这试图解决什么问题,这可能都不是解决方案。 我还想提一下,在设置 Tab 键顺序时,您可以在单击第一个数字时使用 CTRL + SHIFT。这将使选项卡顺序保留并“按原样”包含该控件,然后您可以继续并单击其余控件。如果您只想调整最后一个视图控件的 Tab 键顺序或仅调整 Tab 键顺序的一部分,这将非常方便。

以上是关于将光标放在 Visual Studio 的编辑控制框中的主要内容,如果未能解决你的问题,请参考以下文章