如:
先获得屏幕DC
HDC hdc = GetDC(NULL);
HPEN hPen = CreatePen();
SelectObject(hdc,hPen);
Rectangle(hdc,x,y,j,z);
...
//一段时间后删除矩形,该怎么做?
...
我观察了spy++,超级屏幕等捕获窗口然后绘制窗口边框,都是通过Rectangle来做的,但删除矩形的时候并没有重绘窗口,应该如何实现了。
附:是不是可以通过光栅操作(SetROP2)来进行绘制和删除,具体应该怎么做了?
先获得屏幕DC
HDC hdc = GetDC(NULL);
HPEN hPen = CreatePen();
SelectObject(hdc,hPen);
Rectangle(hdc,x,y,j,z);
...
//一段时间后删除矩形,该怎么做?
...
我观察了spy++,超级屏幕等捕获窗口然后绘制窗口边框,都是通过Rectangle来做的,但删除矩形的时候并没有重绘窗口,应该如何实现了。
附:是不是可以通过光栅操作(SetROP2)来进行绘制和删除,具体应该怎么做了?
CPen pen(0, 1, XorColor);
pDC->SetROP2(R2_XORPEN);
.....
XOR画笔特点,画一次显示,再画一次擦除,局部更新,不容易控制
这样还是不行!颜色都不能固定了
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 ) ;
}
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);