【问题标题】:How would you open a Dialog when an edit box is selected? MFC 2005选择编辑框时如何打开对话框? MFC 2005
【发布时间】:2015-07-17 02:27:15
【问题描述】:

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

以下是我目前的代码:

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

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

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

【问题讨论】:

  • 带有“DLL”的意思是对话框吗?
  • 是的,对话框。很抱歉造成混乱!

标签: mfc dialog keyboard editbox


【解决方案1】:

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

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

  • 项目>类向导
  • 选择你的项目和你的班级名称(在你的情况下 CTestHarnessDlg)
  • Commands 标签的搜索字段中输入您的编辑 ID
  • 选择它,名为Messages 的列表框将填充来自该控件的所有消息
  • 选择 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 移动您的你想要的对话框。

【讨论】:

  • 太棒了,这听起来很有希望!我会实现这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
  • 2021-11-29
  • 1970-01-01
相关资源
最近更新 更多