天天看點

MFC學習點滴二:MFC中的菜單路由

所謂路由即是點選菜單某一項時,程式響應的順序。

1     一般情況下。最先捕捉到菜單點選消息的是Frame類,(在Frame類中可以直接使用GetMenu() ,

        而在View類中,要使用GetParent()->GetMenu()來擷取系統菜單的指針。)但Frame類并不作出相應,

        它會交給View類來處理,如果View類中有相應處理函數,則處理,路由結束。

        否則View類會把消息交給Doc文檔類來處理,如果文檔類有相應的處理,則結束。

        否則文檔類會重新遞交給View類,View類再交給Frame類,這時如果Frame類中有相應處理,則結束

        否則會接着給到程式類App類中,如果App類中還沒有處理,則交給作業系統。

2     也可以截斷這種預設的路由,直接由Frame類來截獲消息并執行。由于Frame類中的OnCommand是個

       虛函數,如果我們重寫它,并不再調用基類的OnCommand,那麼路由隻是在Frame中這裡就結束了。

MFC學習點滴二:MFC中的菜單路由

BOOL CMainFrame::OnCommand(WPARAM wParam  , LPARAM lParam)

MFC學習點滴二:MFC中的菜單路由
MFC學習點滴二:MFC中的菜單路由

... {

MFC學習點滴二:MFC中的菜單路由

               //我們可以設定一個int來接受wParam,以此判斷相應的是哪一個ID項

MFC學習點滴二:MFC中的菜單路由

       int    nID   =   LOWORD(wParam);

MFC學習點滴二:MFC中的菜單路由

              //如果nID是我們菜單的ID值,比如  nID == ID_FILE_NEW  那麼做出相應的處理

MFC學習點滴二:MFC中的菜單路由

       if(nID  ==  ID_FILE_NEW)

MFC學習點滴二:MFC中的菜單路由
MFC學習點滴二:MFC中的菜單路由

              ...{

MFC學習點滴二:MFC中的菜單路由

                          // Do something

MFC學習點滴二:MFC中的菜單路由

              } 

MFC學習點滴二:MFC中的菜單路由

              //當然也可以用switch來進行多項選擇

MFC學習點滴二:MFC中的菜單路由
MFC學習點滴二:MFC中的菜單路由

}