您好,有个问题困扰我很久了,希望您能指点一下,谢谢.关键代码: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把他们覆盖我虚框的部分全排除掉,依然没有效果
{
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把他们覆盖我虚框的部分全排除掉,依然没有效果
低4位的大致含义是:0表示该消息来自系统菜单
2表示拖动标题栏对于SC_SIZE
低4位的大致含义是:
拖动的位置4 | 3 | 5
----------------
1 | | 2
----------------
7 | 6 | 8
看来还是不要自己实现了,用系统的算了