MFC應用程式中enable或disable選單項

2021-06-16 18:54:31 字數 909 閱讀 3208

在mfc應用程式中需要enable或disable選單項時,在主選單中呼叫 cmenu::enablemenuitem不起作用......如何disable選單項?

根據以往的經驗,要解決這種問題,似乎應該有乙個象enablemenuitem之類的api函式,它的功能就是enable或disable選單項。windows中確實有這樣的函式-但不是在mfc的應用中(經測試不能達到想要的效果)。實際上,在mfc裡enable或disable選單項是通過使用on_ update_command_ui實現的。

一般情況下,使用者介面的狀態指的是按鈕,選單項等任何反映程式狀態的東西。例如,如果剪貼簿沒有內容(一種狀態),那麼選單中的貼上(paste)命令應該是disable的。所以說通常的使用者介面(ui)指的就是程式表現的狀態,同時,程式狀態的改變應該在程式的選單中反映出來。 

mfc提供乙個ui更新機制來實現這種狀態的改變,其基本思路為:當使用者呼叫乙個選單的時候,windows傳送乙個wm_initmenupopup訊息。mfc建立乙個暫時的ccmdui物件處理這個訊息,為每乙個選單項做連續初始化並將它傳遞到應用程式中的物件。mfc為此呼叫on_update_command_ui訊息處理器更新使用者介面: 

on_update_command_ui(id_foo, onupdatefoo)  ;

只要使用者進入包含foo的選單項,mfc就會呼叫onupdatefoo函式。典型的處理方法如下:

void cmainframe::onupdatefoo(ccmdui* pcmdui)

{pcmdui->setcheck(1);    //1為enable, 0為disable;

3dview選單的子選單項disable後的效果如下:

MFC應用程式執行流程

extern c int winapi twinmain hinstance hinstance,hinstance hprevinstance,lptstr lpcmdline,int ncmdshow 這一下清楚了,mfc中的winmain函式其實什麼也沒做,只是呼叫了乙個函式afxwinmai...

MFC應用程式框架分析

一.sdk應用程式與mfc應用程式執行過程的對比 程式執行都要有入口函式,在之前的 c 教程中都是main函式,而 windows應用程式的入口函式是winmain函式 mfc程式也是從winmain函式開始的 下面雞啄公尺就給出用 windows sdk寫的 helloworld 程式,與mfc應...

MFC應用程式執行流程

cmainframe 框架視窗 ctestview 子視窗 ctestdoc 資料文件 vc 下的mfc應用程式執行流程 然後進入到 twinmain hinstance hinstance hinstance hprevinstance,lpstr lpcmdline int ncmdshow 再...