MFC中添加的菜单项为什么始终是灰色的

我新建一个类,在BEGIN_NESSAGE_MAP中添加了ON_COMMAND消息,菜单项的ID也没有问题,加了响应函数,编译通过,可是运行的时候菜单项总是灰色的,请问还... 我新建一个类,在BEGIN_NESSAGE_MAP中添加了ON_COMMAND消息,菜单项的ID也没有问题,加了响应函数,编译通过,可是运行的时候菜单项总是灰色的,请问还需要什么东西。
消息处理函数好像就是用BEGIN_NESSAGE_MAP来指定的吧,我已经指定好了。
那个BEGIN_NESSAGE_MAP好像在MainFrm里指定就不是灰色的,但我想放在别的类里面要怎么做呢,说清楚点,谢谢
展开
 我来答
du瓶邪
推荐于2016-11-30 · TA获得超过2.4万个赞
知道大有可为答主
回答量:1.7万
采纳率:100%
帮助的人:2403万
展开全部

建立了一个函数:
void CISODATADlg::UpMenu()
{
if (m_bImportData)
{
(CButton*)GetDlgItem(IDC_BUTTON_DEL)->EnableWindow(TRUE);
(CButton*)GetDlgItem(IDC_BUTTON_EDIT)->EnableWindow(TRUE);
(CButton*)GetDlgItem(IDC_BUTTON_ISODATA)->EnableWindow(TRUE);
GetMenu()->CheckMenuItem(ID_SETTING,MF_BYCOMMAND   |   MF_CHECKED);
GetMenu()->EnableMenuItem(1,MF_ENABLED|MF_BYPOSITION);
GetMenu()->CheckMenuItem(ID_FILE_SAVE,MF_BYCOMMAND   |   MF_CHECKED);
GetMenu()->EnableMenuItem(2,MF_ENABLED|MF_BYPOSITION);

}
else
{
GetMenu()->CheckMenuItem(1,MF_BYCOMMAND   |   MF_CHECKED);
GetMenu()->EnableMenuItem(1,MF_GRAYED|MF_BYPOSITION);
GetMenu()->CheckMenuItem(2,MF_BYCOMMAND   |   MF_CHECKED);
GetMenu()->EnableMenuItem(2,MF_GRAYED|MF_BYPOSITION);
(CButton*)GetDlgItem(IDC_BUTTON_DEL)->EnableWindow(FALSE);
(CButton*)GetDlgItem(IDC_BUTTON_EDIT)->EnableWindow(FALSE);
(CButton*)GetDlgItem(IDC_BUTTON_ISODATA)->EnableWindow(FALSE);
}

}

在OnInitDialog()中插入了UpMenu();
在打开文件后,按钮和菜单可以使用,但是在OnOpenFile中调用UpMenu()的,这时候菜单还是灰色的,必须点一下才变亮。

百度网友87b4f1c69
2009-07-25 · TA获得超过1218个赞
知道小有建树答主
回答量:760
采纳率:0%
帮助的人:943万
展开全部
添加相应的消息处理函数,就不是灰色的了

最好不要手动添加,用类向导多方便呀,“Ctrl+W”唤出类向导对话框进行消息关联
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lz3272
推荐于2016-02-12 · TA获得超过333个赞
知道小有建树答主
回答量:258
采纳率:0%
帮助的人:342万
展开全部
应该是新建的额类没有获得菜单消息,菜单的消息响应应该放在主框架里面

// Generated message map functions
protected:
//{{AFX_MSG(CMainFrame)
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
afx_msg void OnMenu1();/、定义菜单
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)
//{{AFX_MSG_MAP(CMainFrame)
ON_WM_CREATE()
ON_COMMAND(IDC_MENU1, OnMenu1)//映射菜单
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

void CMainFrame::OnMenu1()
{
// TODO: Add your command handler code here
//菜单功能
CA a;//定义其他类的对象
a.rade();//其他类的函数实现
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式