開發環境:vs2010
在開發基於單文檔的MFC項目時,我需要在程序的初始化時,設置框架的大小,應在CMainFrame::PreCreateWindow(CREATESTRUCT& cs)中設定設置cs,包括框架窗口的樣式以及大小等。
如下為將框架窗口設置為長寬為100和300時的代碼:

1 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 2 { 3 if(!CFrameWnd::PreCreateWindow(cs)) 4 { 5 return FALSE; 6 } 7 8 cs.style &= ~WS_OVERLAPPED 9 cs.cy = 300; 10 cs.cx = 100; 11 12 return TRUE; 13 }
但是實際在運行時無法改變框架的尺寸,網友給出了一下的原因和解決方案:
因為VS2010會將一些信息寫入注冊表,這個和之前VS2005,VS2008(SP1除外)不太一樣,默認的SDI和MDI是帶的BCG的一些東西。
你要修改窗口大小,可以直接在App類的InitInstance中ShowWindow();UpdateWindow()之前修改窗口大小,例如 m_pMainWnd->MoveWindow(CRect(100, 100, 600, 400), FALSE);
我采用的方法是先在App類的初始化實例時調用CleanState(),清除注冊表的狀態信息,然后在框架類中設置窗口大小和樣式,具體代碼如下:

1 int CImageQuality02App::ExitInstance() 2 { 3 // TODO: 在此添加專用代碼和/或調用基類 4 AfxOleTerm(FALSE); 5 CleanState();//清除程序在注冊表寫入的狀態信息 6 7 return CWinAppEx::ExitInstance(); 8 }

1 BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) 2 { 3 if( !CFrameWndEx::PreCreateWindow(cs) ) 4 return FALSE; 5 // TODO: 在此處通過修改 6 // CREATESTRUCT cs 來修改窗口類或樣式 7 cs.cx = 1200; 8 cs.cy = 600; 9 cs.lpszClass = AfxRegisterWndClass(0); 10 11 return TRUE; 12 }
引用來源:http://blog.sina.com.cn/s/blog_62f521600100ml2l.html
http://hyhvi.iteye.com/blog/1513942