0

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

到目前为止,以下是我的代码:

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

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

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

4

1 回答 1

1

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

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

  • 项目>类向导
  • 选择您的项目和您的班级名称(在您的情况下 CTestHarnessDlg
  • Commands在搜索字段的选项卡上输入您的编辑 ID
  • 选择它,调用的 ListBoxMessages将填充来自该控件的所有消息
  • 选择EN_SETFOCUS并按下Add Handler并键入您想要的名称或保留默认名称
  • 然后按 OK 或者Edit Code你应该就在方法实现上
  • 一切都应该由类向导自动设置和创建:方法声明、方法实现、消息映射

如何手动添加命令

  • 转到您的类声明(通常在 .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);将打开窗口的屏幕虚拟键盘,您不必创建自己的键盘对话框,默认情况下在 Windows 上已经有一个

不使用 osk.exe

您将必须创建自己的对话框(CKeyboard),但 IMO 您不应该使用CDialog::DoModal方法,您应该使用CDialog::Create使对话框无模式,然后使用CWnd::ShowWindow然后使用CWnd::SetWindowPos移动你想要的对话。

于 2015-05-07T08:43:42.603 回答