WINCE下一般都没有键盘做为输入,所以如果要输入汉字的话,方法一是在输入法dll中弹出SIP软键盘来按键,方法二当然就是手写输入了。
我们用的是方法一,OS固化输入法后,从开机,输入法的status window就一直在,因为一直都有IMN_OPENSTATUSWINDOW消息通知输入法DLL打开status window。
这时就要想法隐藏掉tatus window了,
方法一:
HIMC ImmAssociateContext(
HWND hWnd,
HIMC hIMC
);
在OnInitDialog或初始化窗口时调用ImmAssociateContext(GetSafeHwnd(), NULL); 把hIMC置空,可以隐藏该窗口的status window。
方法二:
BOOL ImmDisableIME(
DWORD idThread
);
ImmDisableIME在WINCE下参数只能用0。ImmDisableIME(0);
该方法使该进程内都禁用输入法,而不像方法一是使一个窗口不用输入法。
要注意的是:ImmDisableIME要在该进程创建任何窗口前调用才会成功。所以一个好地方是CWinApp的InitInstance。
不知道有没有这样的方法,让WINCE一开机,没有输入法窗口,到我要用输入法时能调出输入法窗口,好象这样才是最好的办法。
另外windows禁用IME的情况,可能是一个edit或某些edit禁用IME,这样的解决方法是:
http://topic.csdn.net/t/20050913/19/4267382.html
HIMC m_hImc; // 全局或者成员变量
// Function for Disabling IME
void CMyDialog::DisableIME()
{
HWND hWnd = GetDlgItem(IDC_EDIT1)->m_hWnd;
if (hWnd && IsWindow(hWnd))
{
// Get input context for backup.
m_hImc = ImmGetContext(hWnd);
// Remove association the testing
if (m_hImc)
ImmAssociateContext(hWnd, NULL);
// Release input context
ImmReleaseContext(hWnd, m_hImc);
::SetFocus(hWnd);
}
}
// Function for Enabling IME
void CMyDlg::EnableIME()
{
HWND hWnd = GetDlgItem(IDC_EDIT1)->m_hWnd;
if (hWnd && IsWindow(hWnd))
{
// Enable IME
if (m_hImc)
{
// Associate the input context with testing window
ImmAssociateContext(hWnd, m_hImc);
m_hImc = NULL;
}
::SetFocus(hWnd);
}
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/albertkong/archive/2009/06/06/4244426.aspx