MFC中调用软键盘
1、前提
- //头文件中添加包含文件
- #include <Imm.h>
- //源文件中添加lib文件
- #pragma comment(lib,"imm32.lib")
2、调用
在需要调用软键盘的响应中添加:
- HIMC hIMC = ImmGetContext(pWnd->m_hWnd); // 接受输入的窗口句柄
- DWORD dwConv, dwSent;
- ImmGetConversionStatus(hIMC,&dwConv,&dwSent);
- if (dwConv & IME_CMODE_SOFTKBD)
- dwConv &= ~IME_CMODE_SOFTKBD;// 这是关闭软键盘
- else
- dwConv |= IME_CMODE_SOFTKBD; // 打开软键盘
- ImmSetConversionStatus(hIMC,dwConv,dwSent);
- ImmReleaseContext(pWnd->m_hWnd,hIMC);
以上内容转自http://xiaoyueweiguang.blog.163.com/blog/static/117267556200991210485065/
修改一下,使得mfc中的输入框在获取输入焦点时使用软键盘,失去焦点时不使用软键盘
在dlg类中加入成员变量
- public:
- // 软键盘
- HIMC m_hIMCSoftKey;
- public:
- // 软键盘
- DWORD m_dwConvSoftKey;
- public:
- // 软键盘
- DWORD m_dwSentSoftKey;
在oninitdialog中加入
- g_hwnd=this->GetSafeHwnd();
- //软键盘
- m_hIMCSoftKey = ImmGetContext(g_hwnd);// 接受输入的窗口句柄
- ImmGetConversionStatus(m_hIMCSoftKey,&m_dwConvSoftKey,&m_dwSentSoftKey);
在ondestroy中加入
- //软键盘
- ImmReleaseContext(g_hwnd,m_hIMCSoftKey);
在onsetfocus中加入
- m_dwConvSoftKey |= IME_CMODE_SOFTKBD; // 打开软键盘
- ImmSetConversionStatus(m_hIMCSoftKey,m_dwConvSoftKey,m_dwSentSoftKey);
在onkillfocus中加入
- m_dwConvSoftKey &= ~IME_CMODE_SOFTKBD;// 这是关闭软键盘
- ImmSetConversionStatus(m_hIMCSoftKey,m_dwConvSoftKey,m_dwSentSoftKey);
其他软键盘调用:
ShellExecute(GetSafeHwnd(), NULL, _T("osk.exe"), NULL, NULL, SW_NORMAL);