将光标放在 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 的编辑控制框中的主要内容,如果未能解决你的问题,请参考以下文章

如何修复烦人的 Visual Studio 文本编辑器光标错位错误

visual studio有没有 选择一行 的快捷键?

转到Visual Studio中的匹配大括号?

有没有办法在 Visual Studio 中模拟 Sublime Text 的“多光标”功能?

Visual Studio Code不再解析隐式索引文件?

Visual Studio Code的快捷键