MainFrame 去除边框的方法

用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();
}

你可能感兴趣的:(MainFrame 去除边框的方法)