如:
先获得屏幕DC
HDC hdc = GetDC(NULL);
HPEN hPen = CreatePen();
SelectObject(hdc,hPen);
Rectangle(hdc,x,y,j,z);
...
//一段时间后删除矩形,该怎么做?
...
我观察了spy++,超级屏幕等捕获窗口然后绘制窗口边框,都是通过Rectangle来做的,但删除矩形的时候并没有重绘窗口,应该如何实现了。
附:是不是可以通过光栅操作(SetROP2)来进行绘制和删除,具体应该怎么做了?

解决方案 »

  1.   

    用XOR画
    CPen pen(0, 1, XorColor);
    pDC->SetROP2(R2_XORPEN);
    .....
    XOR画笔特点,画一次显示,再画一次擦除,局部更新,不容易控制
      

  2.   

    to:zhaogaojian(蜜柑年成) 
    这样还是不行!颜色都不能固定了
      

  3.   

    hWnd控件句柄
    nWidth画的边框宽度
    Mode绘制模式
    DrawBorder(HWND hWnd, int nWidth=10, int Mode=R2_NOT)
    {
    HPEN hPen ,* hOldPen ;

    // 得到指定控件的矩形
    RECT rect ;
    HDC hdc = ::GetWindowDC( hWnd ) ;
    ::GetWindowRect( hWnd , &rect ) ;

    // 调整矩形
    rect.bottom -= rect.top ;
    rect.right -= rect.left ;
    rect.left  = rect.top = 0 ;
    // 设定绘制模式
    SetROP2( hdc , Mode ) ; // 选择画笔开始绘制
    hPen = CreatePen ( PS_SOLID , nWidth , RGB( 0 , 0 , 0 ) ) ;
    hOldPen = ( HPEN * )SelectObject( hdc , hPen ) ;

    // 选择刷子为空,使矩形不填充内部
    SelectObject ( hdc ,GetStockObject ( NULL_BRUSH ) ) ; Rectangle ( hdc , rect.left , rect.top , rect.right ,rect.bottom ) ;
    // 销毁对象
    SelectObject( hdc , &hOldPen ) ;
    DeleteObject( hPen ) ;
    ::ReleaseDC ( hWnd , hdc ) ;
    }
      

  4.   

    HWND hwndItem; // 控件的句柄
    RECT rect;
    HDC hdc;
    hdc = GetDC(hwndItem);
    ::GetWindowRect(hwndItem, &rect);
    OffsetRect(&rect, -rect.left, -rect.top);
    for (int i = 0; i < 6; i++)
    {
    if (!IsRectEmpty(&rect))
    {
    PatBlt(hdc, rect.left, rect.top, rect.right 
    - rect.left, 3,  DSTINVERT);
    PatBlt(hdc, rect.left, rect.bottom - 3, 
    3, -(rect.bottom - rect.top - 2 * 3), DSTINVERT);
    PatBlt(hdc, rect.right - 3, rect.top + 3, 
    3, rect.bottom - rect.top - 2 * 3, DSTINVERT);
    PatBlt(hdc, rect.right, rect.bottom - 3, 
    -(rect.right - rect.left), 3, DSTINVERT);
    }
    }ReleaseDC(hwndItem, hdc);
    DeleteObject(hdc);