MFC學習筆記( )

2021-05-21 19:23:31 字數 2276 閱讀 6474

選單響應順序 : view類 文件類 框架類 應用程式類

訊息分類

標準訊息

除wm_command之外,所有以wm_開頭的訊息。

從cwnd派生的類,都可以接收到這類訊息。

命令訊息

來自選單、加速鍵或工具欄按鈕的訊息。這類訊息都以wm_command呈現。在mfc中,通過選單項的標識(id)來區分不同的命令訊息;在sdk中,通過訊息的wparam引數識別。

從ccmdtarget派生的類,都可以接收到這類訊息。

通告訊息

由控制項產生的訊息,例如,按鈕的單擊,列表框的選擇等均產生此類訊息,為的是向其父視窗(通常是對話方塊)通知事件的發生。這類訊息也是以wm_command形式呈現。

從ccmdtarget派生的類,都可以接收到這類訊息。

標記選單

1.getmenu()->getsubmenu(0)->checkmenuitem(id_file_new,mf_bycommand|mf_checked);

2.getmenu()->getsubmenu(0)->checkmenuitem(0,mf_byposition|mf_checked);

圖形標記選單

m_bitmap.loadbitmapw(idb_bitmap1);

getmenu()->getsubmenu(0)->setmenuitembitmaps(0,mf_byposition,&m_bitmap,&m_bitmap);

str.format(l"x=%d,y=%d",getsystemmetrics(sm_cxmenucheck),getsystemmetrics(sm_cymenucheck));

預設選單

1.getmenu()->getsubmenu(0)->setdefaultitem(1,true);

2.getmenu()->getsubmenu(0)->setdefaultitem(id_file_new);

*選單分隔符是佔索引 位置的 

選單項禁用

首先在cmainframe建構函式中設定m_bautomenuenabl=false

getmenu()->getsubmenu(0)->enablemenuitem(1,mf_byposition | mf_disabled | mf_grayed);

一般的方法是利用命令更新機制 給選單選項新增 update_command_ui事件

然後用ccmdui的成員函式enble來控制

*要注意區域性變數生命週期問題

setmenu(null); //刪除整個選單

cmenu menu;

menu.loadmenu(idr_mainframe);  //新增選單

setmenu(&menu);

menu.detach();

右鍵選單新增

建立乙個menu資源idr_menu1  id為idr_popmenu

在onrbuttondown函式下實現

cmenu menu;

menu.loadmenu(idr_menu1);

cmenu*ppopup=menu.getsubmenu(0);

clienttoscreen(&point);

ppopup->trackpopupmenu(tpm_leftalign|tpm_rightbutton, point.x, point.y,getparent()); //getparent()可以讓cmainframe響應

手動新增 選單項事件響應

1.在resource.h中新增選單項id

2.在所在類標頭檔案中寫響應函式原型

例:afx_msg void onhello();

3.訊息對映

對於命令訊息 通過on_command巨集來完成

在begin_message_map(cmainframe, cframewnd)

on_wm_create()

end_message_map()

中間加入on_command(idm_hello,onhello)

然後在下面寫響應函式實現  

*選單屬於框架類 不屬於view類  在view類中getparent()->getmenu()->...

getparent()->drawmenubar();是在view類裡進行選單的重繪  

*cstring::find()  類似與c語言中strchr

*getactiveview獲取當前view類指標

在cmainframe中呼叫view類中的成員用到了這個函式

這時候要在前面include上view類的標頭檔案

MFC學習筆記

1.oncreate函式目前來看只執行了一次 2.對於隱藏的this指標,不是類中的函式成員。當在類的非靜態成員函式中訪問類的非靜態成員的時候,編譯器會自動將物件本身的位址作為乙個隱含引數傳遞給函式 也就是說,即使你沒有寫上this指標,編譯器在編譯的時候也是加上this的,它作為非靜態成員函式的隱...

MFC 學習筆記

作業 用單文件檢視完成左鍵使圓圈變小,右鍵使圓圈變大,按住ctrl的同時移動滑鼠使圓圈跟著移動。document處理頁面的資料 view呈現和互動。on wm lbuttonup等滑鼠訊息帶著uint nflags 掩碼 引數,記錄滑鼠訊息的同時的附加資訊 比如ctrl或shift鍵 在initin...

MFC學習筆記

最近因為要做乙個專案所以必須要學習mfc,那麼以下就是我覺得mfc裡面非常重要的東西。當然,都是入門級的.1.作業系統把他所能夠完成的功能以函式的形式提供給應用程式使用,應用程式對這些函式的呼叫就叫做系統呼叫。2.作業系統是靠訊息機制將感知到的事件傳遞給應用程式的。作業系統將每個事件都包裝成乙個稱為...