轉:http://blog.csdn.net/schlafenhamster/article/details/8121174
用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, int cx, int cy)
{
CFrameWnd::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
// Create a rgn without 3 pixels border
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();
}