我在这里找了一个源程序
http://www.codeproject.com/samples/onscreenkeyboard.asp
但是这个源程序是直接画的键盘,不知道怎么画,因此我希望使用按钮来实现键盘
我觉得那样有点击效果,看上去更自然和舒适。但是我试验了一下我的想法,结果却是
程序的焦点在我的程序和记事本之间不停切换,一点都不像那些输入法上的软键盘工作
自然和舒服,不知道我这个程序的问题出在哪里?
大家帮忙指点一下?
源程序我放在这里了。VC6.0+win2000环境http://www.olight.com.cn/temp/keyboarddemo.rar
http://www.codeproject.com/samples/onscreenkeyboard.asp
但是这个源程序是直接画的键盘,不知道怎么画,因此我希望使用按钮来实现键盘
我觉得那样有点击效果,看上去更自然和舒适。但是我试验了一下我的想法,结果却是
程序的焦点在我的程序和记事本之间不停切换,一点都不像那些输入法上的软键盘工作
自然和舒服,不知道我这个程序的问题出在哪里?
大家帮忙指点一下?
源程序我放在这里了。VC6.0+win2000环境http://www.olight.com.cn/temp/keyboarddemo.rar
我看了一下 "紫光输入法" 的软键盘,类名 SoftKBDClsC1
确实是WS_DISABLED的,但是这样又怎么使用这个窗体呢?
还不明白。
结果现在点鼠标没有反应了。
不过我后来又找到一个软键盘,我使用spy++查看,发下就是使用按钮实现的,应该是使用delphi实现的。是一个免费的软键盘,我在这里下载的: http://www.lakefolks.org/cnt/如果您有兴趣,不妨下载来试验一下.
-----------------------------------------------------
这一点是这么做的:响应WM_ACTIVATE消息,hParenWnd是目标窗口句柄:case WM_ACTIVATE:
if(IsWindowEnabled(hWnd))
{
SendMessage(hParentWnd,WM_NCACTIVATE,TRUE,0);
SendMessage(hWnd,WM_NCACTIVATE,TRUE,0);
}
break;但是这么做了有没有用我就不知道了,楼主可以试试。
::SendMessage(gFocus,WM_NCACTIVATE,TRUE,0);
::SendMessage(m_hWnd,WM_NCACTIVATE,TRUE,0);
}
这要得益于这个帖http://search.csdn.net/Expert/topic/1346/1346485.xml?temp=.4596521增加上:对WM_MOUSEACTIVATE 和 WM_ACTIVATE 的消息处理就OK了。-----------------------老季同志,我很遗憾的告诉你,你的想法是不可行的,因为手写板跟WORD不是一个EXE,再经过测试OnSetFoucs()和OnKillFocus()也是不行的(我用的是对话框做的测试,根本就没有相应,有问题),试验还发现::SetFocus()也是不行的,要用::SetForegroundWindow();,至少以下代码是可行的,但是窗口句柄你要自己获得,而且这个效果只能说可以基本实现你想要的效果而已,不是最终的解决办法,其它的我也就不知道了,我水平有限,只能帮到这了。int CAbcDlg::OnMouseActivate(CWnd* pDesktopWnd, UINT nHitTest, UINT message)
{
MessageBeep(MB_OK);
HWND hwnd;
int hw=0x000d039a;
hwnd = (HWND)(hw);
// hwnd = ::GetForegroundWindow();
// hwnd = GetMyFocusWnd(); //这个函数返回你的那个窗口的句柄 ::SetForegroundWindow(hwnd);
//::SetFocus( hwnd ); return MA_NOACTIVATE;
//return CDialog::OnMouseActivate(pDesktopWnd, nHitTest, message);
}void CAbcDlg::OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized)
{
//CDialog::OnActivate(nState, pWndOther, bMinimized); HWND hwnd;
int hw=0x000d039a;
hwnd = (HWND)(hw); ::SetForegroundWindow(hwnd);
}不过把自己设为WORD的一个子窗口也许是一个好办法,上面有人说过了。