我写了一个软键盘,想实现这样的功能,软键盘已被运行,当编辑框获得焦点时,软键盘弹出,当编辑框失去焦点时,软键盘隐藏起来,重载了编辑框的类,分别重载了OnSetFocus和OnKillFocus,可结果时当软键盘弹出时,编辑框就失去了焦点,于是执行OnKillFocus,软键盘被隐藏起来了,然后编辑框就又获得了焦点,于是就这样循环,软键盘就弹出隐藏弹出隐藏,不停的这样做,请问大家有什么好的建议来实现这个功能:当编辑框获得焦点时,软键盘弹出,当编辑框失去焦点时,软键盘隐藏起来
调试欢乐多
CWnd* pWnd=CWnd::FindWindow(NULL,_T("Keyboard"));
HWND hwnd=pWnd->GetSafeHwnd();
//::PostMessage(hwnd,WM_CLOSE,0,0);
::SendMessage(hwnd,WM_SHOWWINDOW,SW_SHOW,SW_SHOW);
在软键盘程序里重载了OnShowWindow。
软键盘一弹出来编辑框焦点就失去了。
SetWindowPos(NULL, 0, 0, 0, 0, SWP_NOZORDER | SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVE | SWP_SHOWWINDOW) ;
来显示软键盘窗口。
1. 编辑框判断失去焦点时,获得焦点的窗口如果是你的软键盘窗口,则不隐藏软键盘,否则隐藏;
这个方法不好。2. 在软键盘的WM_MOUSEACTIVATE消息响应函数中,返回MA_NOACTIVATE,即不让鼠标激活当前这个窗口。
这个方法专业。
如果是前者一定要用hook了,后者此不必