windows9x下点击鼠标时,鼠标点中的窗口得到焦点并激活,原窗口失去焦点并失活,现在我想禁止鼠标将活动窗口设置到本程序的主窗口。如果直接在程序中检测到窗口切换到本窗口后就重新设置原窗口活动,由于许多程序(原窗口)在OnKillFocus与OnSetFocus执行了许多额外操作,所以“失而复得”不能满足我的应用要求。我采用全局钩子也只拦到本窗口设置焦点与激活的消息,并且消息参数中的原焦点窗口是NULL,原活动窗口也是NULL。丢弃这些消息只是本窗口不得到焦点也不激活,但旧窗口已经失去焦点并失活! 我试过鼠标钩子也没有实现。有什么办法让鼠标点击本窗口时本窗口不激活而且旧窗口也不失去焦点呢?
解决方案 »
- 中秋到了,建议CSND给每个用户发个月饼
- VC++ 访问SQL数据库的问题
- VC6.0 MFC的对象后面敲"."之后,为什么不自动列出相应的方法。
- 读取表格内容。
- 重装系统后出现的ActiveX控件问题,请高手们指点,高分送
- delphi形式转vc(编dll中的问题)急!
- 如何在richedit 中加入超链接
- 请高手指点:操作CString对象时,经常出现:UnHanlded Exception: 0x00000005 access violation!
- 初学者请教一个简单的问题,谢谢帮助!
- ?DLL中写的类想在VB中调用?
- 请问在初始化时把猫设置成语音模式的AT命令是什么?
- 请问:CStatic的派生类中OnCtrColor()与CtrColor()函数有什么区别?
{
return MA_NOACTIVATEANDEAT ;
}
处理 WM_MOUSEACTIVATE消息,返回MA_NOACTIVATEANDEAT的结果就可以禁止通过鼠标点击来激活窗口了如果通过任务条也不能激活的话,那就在
void CNoFocusDlg::OnActivateApp(BOOL bActive, HTASK hTask)
{
HWND hWnd = (HWND)0x330636;
::BringWindowToTop( hWnd ); // 不行还可以用SetForeGroudWindow
// 另外还可以辅助 ShowWindow()
}
WM_KILLFOCUS来实现,比如用PerTranslateMessage()函数。
谢谢!但我在WINDOWS ME和WINDOWS 2000下都测试过,无论返回MA_NOACTIVATE还是返回MA_NOACTIVATEANDEAT都使本窗口不得到焦点的同时原窗口确实失去了焦点,并且没有窗口显示为活动窗口了。难道是我做错了。
还感谢你告诉了我一个好的新网址: 编程沙龙www.programsalon.com,不过要成为会员要么提供许多源码要么付款,都需要时间,你能给我touchweb的源码或一个例程吗? 100分不够可开窗口再加,多谢帮忙,不胜感谢 !
你将你要干的事情说出来,或许有比你提的更好的方法,不一定要想你说的
“有什么办法让鼠标点击本窗口时本窗口不激活而且旧窗口也不失去焦点呢? ”
那样做
void CNoFocusDlg::OnActivateApp(BOOL bActive, HTASK hTask)
{
HWND hWnd = (HWND)0x330636;
::BringWindowToTop( hWnd ); // 不行还可以用SetForeGroudWindow
// 另外还可以辅助 ShowWindow()
}第二: w2k和win9x有区别,是吗? (我没有win9x)
我参考了你给我介绍的在www.programsalon.com里的touchweb里那个软键盘窗口,就使用了MA_NOACTIVATE而原窗口不失去焦点。
但我分析后发现,它的焦点切换只在应用程序本身,即切换前后的子窗口都是同一进程的子窗口,其父窗口都是本进程的主窗口,当然没问题。
若改造成当焦点在外部窗口时点击本窗口,我还没完成,估计本窗口不得到焦点的同时外部窗口也应该是已失去焦点的。