关于带有WS_EX_NOACTIVATE风格的窗口拖动的时候好像会一顿一顿的,怎么解决啊?

yongmen 2009-11-25 09:47:53
如题!
...全文
238 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhiyalixia 2011-12-14
  • 打赏
  • 举报
回复
能不能问下lz 你是怎么解决的 可不可以分享一下~~~
yongmen 2009-12-01
  • 打赏
  • 举报
回复
多谢各位,问题解决了!
wwgddx 2009-11-26
  • 打赏
  • 举报
回复
微软自己的osk(屏幕键盘)程序只是在拖动以后鼠标弹起的时候才会失去焦点,所以和你的不太一样,应该是在MOUSEMOVE的时候屏蔽了一些消息,在MOUSEUP的时候才接收到.
joimson 2009-11-26
  • 打赏
  • 举报
回复
WS_EX_NOACTIVATE
Windows 2000/XP: A top-level window created with this style does not become the foreground window when the user clicks it. The system does not bring this window to the foreground when the user minimizes or closes the foreground window.
To activate the window, use the SetActiveWindow or SetForegroundWindow function.

The window does not appear on the taskbar by default. To force the window to appear on the taskbar, use the WS_EX_APPWINDOW style.

这是msdn上说的,你看一下,就知道怎么做了
yongmen 2009-11-26
  • 打赏
  • 举报
回复
多谢1楼!我看到微软自己的osk(屏幕键盘)程序也具有这个风格,但是他拖动的时候并没有这个现象。那就是自己响应了这个消息?那该如何做呢?
togoblime 2009-11-26
  • 打赏
  • 举报
回复
微软的屏幕键盘可能是这样做的:
1.窗口同时具有WS_EX_NOACTIVATE WS_EX_APPWINDOW WS_EX_TOPMOST风格;
2.用户在标题栏按下鼠标时(WM_LBUTTONDOWN),HWND hLastForeground = ::GetForegroundWindow();保存前台窗口句柄,然后::SetForegroundWindow(m_hWnd)把自己送到前台;
3.用户在标题栏松开鼠标时(WM_LBUTTONUP),if(::IsWindow(hLastForeground))::SetForegroundWindow(hLastForeground);恢复前台窗口
togoblime 2009-11-25
  • 打赏
  • 举报
回复
并非是停顿而是系统没有显示拖动效果,这个风格是让用户操作此窗口后窗口也不被激活,你拖动窗口相当于试图激活它(将它放到前台),因而系统不响应你的拖动消息

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧