轉:MainFrame 去除邊框的方法

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章