MFC中CToolBar中的按钮无法启用?

马少华 2017-07-14 02:06:52
我新建了一个mfc规则dll的工程,写了一个控件CMyImage继承自CStatic,并声明为可导出的类,显示图片用的,CMyImage里面创建了一个toolbar;toolbar里面有几个按钮,
这几个按钮都是CToolBar::setbuttons设置的,并不是用CButton创建出来的。

生成好dll后,这个dll在别的对话框工程里面使用正常。
但是用在文档视图结构的程序就出问题。

视图里创建这个控件后,CToolBar上的按钮处于禁用状态。
代码中调用CToolBar::GetToolBarCtrl()->EnableButtons()方法也无法启用按钮。


请用过的朋友指点一二。
...全文
385 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
worldy 2017-07-24
  • 打赏
  • 举报
回复
应该是CMyimage整个控件没有使能吧
马少华 2017-07-24
  • 打赏
  • 举报
回复
引用 10 楼 worldy 的回复:
你必须给dll里的窗口ID设置一个映射
你的意思是将CMyimage里面的按钮重新映射到新的程序中,还是将CMyImage这个类的某个消息映射到新程序中?
worldy 2017-07-20
  • 打赏
  • 举报
回复
你必须给dll里的窗口ID设置一个映射
马少华 2017-07-20
  • 打赏
  • 举报
回复
引用 7 楼 zhujinqiang 的回复:
最简单方法 添加消息映射 并给工具栏按钮id使用和对应的菜单项相同的id 然后在主框架窗口的消息映射表里面,将id映射为OnBarCheck 和OnUpdateControlBarMenu
引用 8 楼 worldy 的回复:
你必须将按钮映射到一个处理程序才能激活
我在CMyImage类里面给这一组按钮添加了ON_COMMAND_RANGE 这个消息不行吗?是不是一定要给每个按钮添加ON_COMMAND消息?
worldy 2017-07-19
  • 打赏
  • 举报
回复
你必须将按钮映射到一个处理程序才能激活
zhujinqiang 2017-07-19
  • 打赏
  • 举报
回复
最简单方法 添加消息映射 并给工具栏按钮id使用和对应的菜单项相同的id 然后在主框架窗口的消息映射表里面,将id映射为OnBarCheck 和OnUpdateControlBarMenu
schlafenhamster 2017-07-19
  • 打赏
  • 举报
回复
因为单文档的框架 会在 OnIdle 中调用 void CMainFrame::OnUpdateXXXX(CCmdUI* pCmdUI) 不妨 在Dll中响应OnUpdateXXXX 使用 pCmdUI->Enable(TRUE);
马少华 2017-07-17
  • 打赏
  • 举报
回复
引用 4 楼 zgl7903 的回复:
CFrameWnd::InitialUpdateFrame 会触发 WM_INITIALUPDATE 消息, 而 CControlBar::OnInitialUpdate 会触发 UpdateDialogControls CCmdTarget::OnCmdMsg 中会从消息映射表查找 ON_COMMAND 的消息映射,如果没有就会禁止(灰化) Toolbar / 菜单
看了这位朋友的回复,又在网上找了一下相关资料,对这些原理机制什么的还不太明白。 问题也总算"解决"了,在视图类里为每个按钮加上消息映射,但自己感觉这个方法也不太科学。不知道有没有其它更专业的方法来解决这个问题?
zgl7903 2017-07-14
  • 打赏
  • 举报
回复
CFrameWnd::InitialUpdateFrame 会触发 WM_INITIALUPDATE 消息, 而 CControlBar::OnInitialUpdate 会触发 UpdateDialogControls CCmdTarget::OnCmdMsg 中会从消息映射表查找 ON_COMMAND 的消息映射,如果没有就会禁止(灰化) Toolbar / 菜单
马少华 2017-07-14
  • 打赏
  • 举报
回复
引用 2 楼 zgl7903 的回复:
需要添加消息映射 ON_COMMAND 或者 处理 OnCmdMsg
CMyImage这个类里面有添加消息映射 ON_COMMAND_RANGE,并没有为每个按钮单独添加消息映射。是这个原因吗? 那为什么对话框程序里面可以正常运行?
zgl7903 2017-07-14
  • 打赏
  • 举报
回复
需要添加消息映射 ON_COMMAND 或者 处理 OnCmdMsg
马少华 2017-07-14
  • 打赏
  • 举报
回复


16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧