用MFC创建的SDI程序,在默认情况下是带 Caption 标题栏的,这样标题栏的外面有个 3 个 pixels 的边框。这个边框很不容易去除。
下面的代码可以做到:
void CMainFrame::ActivateFrame(int nCmdShow)
{
// Do not put it in "OnCreate()" !, where 'wrc' is wrong.
// wrc {top=174 bottom=701 left=132 right=900}
static BOOL Done=FALSE;
CFrameWnd::ActivateFrame(nCmdShow);
//
if(!Done)
{// Create a rgn without 3 pixels border
Done=TRUE;
CRect wrc;
GetWindowRect(&wrc);
// we got right wrc {top=58 bottom=453 left=44 right=530}
wrc.OffsetRect(-wrc.left,-wrc.top);
wrc.DeflateRect(3,3);
//
CRgn rgn;
BOOL bl=rgn.CreateRectRgnIndirect(&wrc);
if(bl) SetWindowRgn(rgn,TRUE);
rgn.Detach();
}
}
经过测试,在窗口最大化和最小后,会有问题。代码移动到 onsize 中就可以了:
void CMainFrame::OnSize(UINT nType