将光标放在 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 文本编辑器光标错位错误