選單項的禁用變灰解決方法

2021-08-20 21:22:31 字數 951 閱讀 5098

1、問題描述

今天在做基於對話方塊的mfc程式時,根據條件禁用了某一選單項:

測試發現該選單項確實功能無效,但是沒有變灰的效果。

2、解決方法

根據網上資料,對於視**檔類mfc程式,在主框架類cmainframe的建構函式中把成員變數m_bautomenuenable=false就可以解決問題了。

但是基於對話方塊的mfc應用程式沒有m_bautomenuenable變數。

首先,在訊息中加入oninitmenupopup()訊息,

然後,在訊息函式內過載如下:

void c***dlg::oninitmenupopup(cmenu* ppopupmenu, uint nindex, bool bsysmenu)}}

}state.m_nindexmax = ppopupmenu->getmenuitemcount();

for (state.m_nindex = 0; state.m_nindex < state.m_nindexmax;

state.m_nindex++)

state.doupdate(this, true);   // popups are never auto disabled.

}else

// adjust for menu deletions and additions.

uint ncount = ppopupmenu->getmenuitemcount();

if (ncount < state.m_nindexmax)

}state.m_nindexmax = ncount;}}

3、參考資料

MFC 使選單項變灰

一 沒有updatecmdui控制代碼時 mfc中預設的習慣是當沒有updatecmdui控制代碼時程式是使能 enable 選單,選單自動變成使能,只要關掉預設值就可以了,把下面的 加入你的程式 cmainfrm cmainfrm 然後在訊息響應函式中新增如下 cmenu m menu getme...

VC動態生成選單項的實現方法

本例所述為使用vc編寫的乙個可以動態生成選單項的類檔案,這裡展示的是其核心 備有比較詳細的注釋,相對而言理解起來並不複雜。主要功能 如下 include stdafx.h include test.h include testdlg.h ifdef debug define new debug ne...

Win7 右鍵「新建」選單項消失的解決辦法

今天想要寫個文件,結果發現 新建 選單沒了,但是明明安裝了 office 啊,後來去 google,找到解決辦法 開啟登錄檔編輯器,定位 hkey classes root directory background shellex contextmenuhandlers new,如果沒有 new 那...