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聲明為全域變數後,問題就解決了。