如何防止自绘的虚框被其他窗口覆盖

fire2fire 2009-04-17 04:26:27
HDC hWindowDC = GetWindowDC( NULL );

void DrawDragRect( HDC DC, int X, int Y, int Cx, int Cy, int Size, HBRUSH Brush )
{
HRGN RgnIn = CreateRectRgn( X + Size, Y + Size, X + Cx - Size, Y + Cy - Size );
HRGN RgnOut = CreateRectRgn( X, Y, X + Cx, Y + Cy );
HRGN RgnNew = CreateRectRgn( 0, 0, 0, 0 );
CombineRgn( RgnNew, RgnOut, RgnIn, RGN_XOR );
SelectClipRgn( DC, RgnNew );
HBRUSH BrushOld = ( HBRUSH )SelectObject( DC, Brush );
PatBlt( DC, X, Y, X + Cx, Y + Cy, PATINVERT );
SelectObject( DC, BrushOld );
SelectClipRgn( DC, NULL );
DeleteObject( RgnNew );
DeleteObject( RgnOut );
DeleteObject( RgnIn );
}

我自己实现了拖动窗口的虚框,和系统的差不多,但是,我用上面函数在屏幕上绘制的虚框,当遇到DirectDraw的窗口(一般是游戏窗口,以及Vista Areo模式)时,虚框就被覆盖掉了,但是系统绘制的虚框不会被覆盖,这个问题困扰我很久了,希望有高人指点下,我到底缺了什么.

我尝试过把遮盖虚框的窗口都枚举出来,然后用SetWindowRgn把他们覆盖我虚框的部分全排除掉,依然没有效果

没什么分,只有这么多了
...全文
131 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fire2fire 2009-04-24
  • 打赏
  • 举报
回复
主窗台已经是topmost了,而且用了SetForegroundWindow
iam68620963 2009-04-21
  • 打赏
  • 举报
回复
这跟程序的Z序有关,建议你先让你的程序置顶了以后现去实现虚框.
实现完虚框了以后记得要还原哦.
fire2fire 2009-04-18
  • 打赏
  • 举报
回复
就是想实现系统那样的虚框,有谁知道关键的地方吗?
fire2fire 2009-04-18
  • 打赏
  • 举报
回复
谢谢帮顶,为什么系统的虚框不会被覆盖呢?
nullw 2009-04-17
  • 打赏
  • 举报
回复
遇到DirectDraw的窗口是没办法了,人家调用层次很低,要不你做显卡的驱动编程。
fire2fire 2009-04-17
  • 打赏
  • 举报
回复
在线等啊等
liliangbao 2009-04-17
  • 打赏
  • 举报
回复
帮顶了!

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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