MFC中,通過preCreateWindow函數無法設置視圖樣式(包括窗口的大小)


  開發環境: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 }    
View Code

  但是實際在運行時無法改變框架的尺寸,網友給出了一下的原因和解決方案:

  因為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 }
View Code
 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 }
View Code

 

引用來源:http://blog.sina.com.cn/s/blog_62f521600100ml2l.html 

       http://hyhvi.iteye.com/blog/1513942


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM