MFC下OpenGL編程入門遇到的幾個問題總結[1]

來源:互聯網
上載者:User

1、CSplitterWnd建立分割表單,子表單style需要為child,否則會拋出“建立空文檔失敗”等錯誤。

 

2、對話方塊可視化設計中,設計完以後可以修改Tab鍵順序,選中對話方塊,然後功能表列:格式-〉Tab鍵順序。

 

3、使使用者不可調整視窗大小。

BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs)
{
if( !CFrameWndEx::PreCreateWindow(cs) )
return FALSE;
// TODO: 在此處通過修改
// CREATESTRUCT cs 來修改視窗類別或樣式
cs.style -= WS_SIZEBOX + WS_MAXIMIZEBOX;
return TRUE;
}

 

4、CSplitterWnd建立兩個視圖區的視窗重繪問題。

問題:移動一次視窗,視圖區變成白幕,再移動一次,恢複正常。

解決辦法一:

在主視窗的架構C*View類中加入WM_OnEraseBkgnd訊息處理函數,直接返回TRUE。

BOOL Cft001View::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加訊息處理常式代碼和/或調用預設值
//return CView::OnEraseBkgnd(pDC);
return TRUE;
}

這樣做以後出現了新問題,就是移動一次視窗,視圖區不變白,但是不再接受操作響應。此時最小化然後還原就會發現,視圖區仍然是白色。再移動一次,恢複正常。

解決辦法二:

?待解決

 

5、OpenGL模式設為啟用貼圖後,若不進行貼圖,則畫的映像顯示不出來。

glEnable(GL_TEXTURE_2D);

//貼圖畫圖語句

glDisable(GL_TEXTURE_2D);

 

6、OnDraw和OnPaint

WM_PAINT訊息是為了繪製螢幕而出現的,因此,在OnPaint中,我們只能存取螢幕DC,進行繪製,常見的代碼是:
void MyWnd::OnPaint()

{

       CPaintDC dc(this);

     //draw code here

}

這裡的CPaintDC的建構函式會自動調用BeginPaint,獲得一個螢幕DC,並附加在dc對象上。當dc對象析構時,系統自動調用EndPaint並使invalidated rectangle變成validated狀態,從而結束繪製。(注意,重複建立CPaintDC執行個體會失敗也因為如此)

如果我們在OnPaint中繪製,那麼在印表機上繪製我們就需要再寫一個OnPrint函數,重新繪製。這樣,程式設計者就需要維護兩套代碼。為了簡化操作,MFC架構把大部分繪製操作都放在OnDraw中,OnPaint和OnPrint只構造相應的DC,然後分別調用OnDraw.也就是說,OnDraw適用於所有的裝置,而OnPaint只適用於螢幕。

大家在設計過程中必須注意:OnDraw是被基類的OnPaint主動調用的,如果你繼承了OnPaint,你應該要麼調用基類的OnPaint(此前不得建立CPaintDC執行個體,也不得調用BeginPaint),要麼自己建立CPaintDC執行個體,並調用OnDraw.

參見這裡OnDraw和OnPaint 。

 

7、程式運行時記憶體佔用量逐漸增大。

經分析,可能是每次畫圖時都初始化一次HDC所致。

HWND hWnd = GetSafeHwnd();

HDC hdc= ::GetDC(hWnd);

將hdc聲明為全域變數後,問題就解決了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.