消息的處理流程

mfc控件消息,已經是封裝好的東西了,消息類型分爲多種,有WM開頭的windows消息,還有自己通過添加的ON_COMMAND消息等等;
添加消息,如果是WM消息,就實現相應的虛函數,若是ON_COMMAND消息就建立相應的消息映射

菜單消息,工具欄消息都是命令消息,mfc中命令消息的處理流程如下:

(下面的每個類中都可以定義相關的消息和消息處理函數,而處理過程就是箭頭所指過程。mfc程序是按此順序處理命令消息的)

1.單文檔程序: view-->doc-->MainFrame-->app

2.多文檔程序:

文檔沒有打開:MainFrame-->app

文檔打開:view-->doc-->childFrame->app-->MainFrame


在CEditView的子類中重載虛函數onDraw並進行繪圖操作,但是運行後沒起作用的原因。

onDraw中設置斷點,運行後發現並沒有進入斷點。原因如下:WM_PAINT消息導致調用相關的onpaint消息響應函數,如果是從CView類中派生的類,其調用CView::OnPaint(){

CPaintDC dc(this);

OnPrepareDC(&dc);

OnDraw(&dc);

}

 但是對於從CEditView類中繼承的類來說,由於CEditView繼承自CCtrlView,而CCtrlView的OnPaint實現如下:CCtrlView::OnPaint(){

//this is done to avoid CView :: OnPaint

Default();

}可見其並沒有調用OnDraw虛函數。

因此想在CEditView的派生類中繪圖,需要重載OnPaint函數!


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