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

时间:2015-05-06 19:02:08

标签: mfc dialog keyboard editbox

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

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

在Visual Studio中

打开项目,然后在上面的菜单中转到:

  • 项目>类向导
  • 选择您的项目和您的班级名称(在您的情况下) CTestHarnessDlg
  • 在搜索字段的Commands标签上输入您的修改ID
  • 选择它,名为Messages的ListBox将填充来自该控件的所有消息
  • 选择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);将在屏幕虚拟键盘上打开窗口,你没有创建自己的键盘对话框,默认情况下已经有一个窗口

不使用osk.exe

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