选择编辑框时如何打开对话框? MFC 2005

How would you open a Dialog when an edit box is selected? MFC 2005

我希望能够创建一个屏幕键盘,以便在选择编辑字段时弹出。我正在使用 MFC Visual studio 2005(基于 C++)。

下面是我目前的代码:

void CTestHarnessDlg::OnEnChangeEdit3()
{
    CKeyboard Dlg;
    Dlg.DoModal();
}

当我 运行 对话框并单击所选字段时,它不会打开屏幕键盘,直到我按下键盘上的某个键。有没有一种方法可以在不向文本字段中输入任何内容的情况下打开键盘?

我一直在看 ON_EN_SETFOCUS,但我对 MFC 还很陌生。我不确定如何在代码中使用 CEDIT 命令 类...感谢任何帮助,谢谢!

如何使用 Visual Studio Class 向导添加命令

在 Visual Studio 中,打开您的项目,然后在上方菜单中转至:

  • 项目>Class向导
  • select 你的项目和你的 class 名字(在你的例子中 CTestHarnessDlg)
  • Commands 选项卡的搜索字段中输入您的编辑 ID
  • Select 它和名为 Messages 的列表框将填充来自该控件的所有消息
  • Select EN_SETFOCUS 并按 Add Handler 并输入您想要的名称或保留默认名称
  • 然后按 OK 或 Edit Code 你应该就在方法实现上了
  • 一切都应该由 class 向导自动设置和创建:方法声明、方法实现、消息映射

如何手动添加命令

  • 去你的class声明(通常在.h文件中)并添加方法声明,你必须知道你需要添加的函数类型

    afx_msg void OnSetfocusEdit();

  • 转到消息映射(通常在cpp文件中)并添加映射,你必须知道你必须使用的宏,在这种情况下ON_EN_SETFOCUS

    ON_EN_SETFOCUS(IDC_YOUR_EDIT_ID, &CTestHarnessDlg::OnSetfocusEdit)

  • 转到您的cpp(通常在cpp文件中)并添加方法实现

void CTestHarnessDlg::OnSetfocusEdit()
{
    TCHAR sysDir[MAX_PATH];
    if( !GetSystemDirectory( sysDir,  MAX_PATH) )
    {
        ASSERT(FALSE);
        return;
    }
    ShellExecute(NULL, NULL, L"osk.exe", _T("") , sysDir, SW_SHOW);
}

使用osk.exe

命令 ShellExecute(NULL, NULL, L"osk.exe", _T("") , sysDir, SW_SHOW); 将打开 window 的屏幕虚拟键盘,您不必创建自己的键盘对话框,默认情况下 windows

不使用 osk.exe

您将必须创建自己的对话框 (CKeyboard),但在我看来,您不应该使用 CDialog::DoModal method, you should make the dialog modeless using CDialog::Create then use CWnd::ShowWindow and then use CWnd::SetWindowPos 将对话框移动到您想要的位置。