16,471
社区成员
发帖
与我相关
我的任务
分享
void CxxxxDlg::DrawFoundWindow(HWND hWnd)
{
// int xBorder=GetSystemMetrics(SM_CXBORDER);
int yBorder=GetSystemMetrics(SM_CYBORDER);
int xFrame=GetSystemMetrics(SM_CXFRAME);
int yFrame=GetSystemMetrics(SM_CYFRAME);
int xScreen=GetSystemMetrics(SM_CXSCREEN);
int yScreen=GetSystemMetrics(SM_CYSCREEN);
//Windows will restrict your drawing to the client and non-client areas.
HDC dc=::GetWindowDC(hWnd);// not 0 !
//Create an inverse pen that is the size of a window border.
// SetROP2(dc,R2_NOT);
// HPEN newPen=CreatePen(PS_INSIDEFRAME,3*yBorder,0);
//Or real color is "pink"
SetROP2(dc,R2_XORPEN);//R2_NOT);
HPEN newPen=CreatePen(PS_INSIDEFRAME,3*yBorder,RGB(0,255,0));
//
HPEN oldPen=(HPEN)SelectObject(dc,newPen);
//Rectangle() will not fill in the interior.
HBRUSH nullBrush=(HBRUSH)GetStockObject(NULL_BRUSH);
HBRUSH oldBrush=(HBRUSH)SelectObject(dc,nullBrush);
//
HRGN recvRgn=CreateRectRgn(0,0,0,0);
if(::GetWindowRgn(hWnd,recvRgn)==RGN_ERROR)
{//=0 no rgn
RECT rc;
::GetWindowRect(hWnd,&rc);
if(::IsZoomed(hWnd))
{// zoomed=maximized.
Rectangle(dc,xFrame,yFrame,xScreen+xFrame,yScreen+yFrame);
}
else
{// not zoomed
Rectangle(dc,0,0,rc.right-rc.left,rc.bottom-rc.top);
}
}
else //CRgn::CreateFromPath
{//!=0, has rgn.
HBRUSH hatchBrush=CreateHatchBrush(HS_DIAGCROSS,GetSysColor(COLOR_WINDOWFRAME));
FrameRgn(dc,recvRgn,hatchBrush,xFrame,yFrame);
DeleteObject(hatchBrush);
}
// Clean
DeleteObject(recvRgn);
//
SelectObject(dc,oldBrush);
SelectObject(dc,oldPen);
//
::ReleaseDC(hWnd,dc);
//
DeleteObject(newPen);
}