如何判断当前窗口是否处于输入字符的状态?具体的说,怎样知道当前窗口中获得输入焦点的子窗口或控件是个文本框或具有输入字符功能的其它控件(如组合框等)?就象汉字输入法一样,当光标处于输入字符的窗体时,就自动显示出汉字输入窗口,当焦点处于某按钮或复选框等非字符输入窗口时,就自动隐藏输入法窗口。前几天我做了一个软键盘程序(是个普通应用程序,不是Ime),想实现象汉字输入法一样的自动显示和隐藏软键盘的功能,问题是怎样知道当前是否处于字符输入状态呢?
调试欢乐多
具体代码【可能】如下,部分结构和函数名字实在记不住……在你希望它出现软键盘的控件类的OnMouseMove函数中加入
TRACKMOUSEEVENT evtMouse;
evtMouse.cbSize=sizeof(evtMouse);
evtMouse.dwFlags=TME_HOVER | TME_LEAVE;
evtMouse.dwHoverTime=1;
evtMouse.hwndTrack=this->GetSafeHwnd();
_TrackMouseEvent(&evtMouse);
CCtrlWnd(控件类的名字)::OnMouseMove(nFlags, point);上面的代码将追踪鼠标的悬停或者离开事件然后重载DefWndProc函数
LRESULT CCtrlWnd::DefWindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
// TODO: Add your specialized code here and/or call the base class
switch(message)
{
case WM_MOUSELEAVE://鼠标移动出了窗口
//销毁软键盘窗口
return 0;
case WM_MOUSEHOVER://鼠标进入了窗口
//创建并显示软键盘窗口
return 0;
}
return CCtrlWnd::DefWindowProc(message, wParam, lParam);
}
应该是return CCtrlWndParent::DefWindowProc(message, wParam, lParam);
比如你如果重载了CEdit,就是
return CEdit::DefWindowProc(message, wParam, lParam); 最后调用父类的DefWindowProc