文档章节

CDialogBar上的按钮自动Disable

abing_hu
 abing_hu
发布于 2013/12/25 13:00
字数 527
阅读 431
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

问题描述

刚开始在MainFrame中使用默认的CDialogBar没有任何问题,DialogBar上的按钮响应一切正常。后来由于MainFrame越来越庞大,就想把DialogBar相关的消息响应从MainFrame中移出来,放到单独的CDialogBar继承类的文件中。当这么操作时,诡异的问题就随之而来,DialogBar上的按钮都Disable(直接灰度化,无法点击)了。本来不想多了解MFC的机制的,毕竟感觉UI方面MFC太落后了,不是未来的趋势。无奈工作需要,还是得解决这个问题,得深入了解CDialogBar的相关资料。

资料搜索

网上有一篇文章叫INFO:CDialogBar Button Enabled When Command Handler Present(微软官方文档)。大致的意思是说如果DialogBar上的按钮没有添加消息响应,则按钮会自动地被Disable掉。还有提到,由于CDialogBar对象不在消息路由机制当中,因此像ON_BN_CLICKED()ON_COMMAND()这样的消息响应必须添加在CDialogBar的父窗口中(我这种情况下,就是指MainFrame中)。看到这,额,似乎我想解决的问题,是无解的。

问题解决

后来又在MSDN中查找CDialogBar的相关信息,查找到:

Dialog bar buttons should be updated through the ON_UPDATE_COMMAND_UI handler mechanism. At idle time, the dialog bar will call the ON_UPDATE_COMMAND_UI handler with the command ID of all the buttons that have a ID >= 0x8000 (that is, in the range of command IDs).

抱着试试看的心态,在CDialogBar的继承类中添加重载函数OnUpdateCmdUI,在重载函数中调用相关按钮的EnableWindow(TURE),编译运行,OK!居然好了,按钮正常显示。然后尝试着把按钮的EnableWindow(TRUE)调用删除,按钮也能正常显示,点击消息响应也OK。看来是OnUpdateCmdUI在整个消息路由机制中起作用了。至于具体原因也就不去深究了,反正自己的需求也已经达到了。

© 著作权归作者所有

abing_hu
粉丝 11
博文 29
码字总数 7098
作品 0
杭州
后端工程师
私信 提问
另类的CDialogBar——可停靠对话框的实现方法

本文大部分思路来自于《VISUAL C++ 6.0 MFC 类库参考手册》一书! CDialogBar在MFC中就是提供控制条形式的非模态对话框。 其使用过程很简单: 1.在MainFrame框架中声明变量 2.在MainFrame的O...

晨曦之光
2012/05/23
814
0
10、表单元素(上)

一、表单元素汇总 二、表单元素解析 1、 定义表单 提交 解释:元素主要是定义本身是一组表单。 //使用get提交数据 //丧失自动提示功能 //使用_blank新建目标 2、表示用户输入数据 解释:元素...

余二五
2017/11/14
0
0
聊天窗口,新加的内容直接 往上顶

最新在写聊天需求 ,遇到了个问题,就是当有新消息时,如果把老的消息顶上去。也就是把SCROLL一直在底部 粘出简单的DEMO测试代码 用了JS的mCustomScrollbar插件 下面是相关的文档: mCustomS...

陈映亮
2016/07/15
74
0
ExtJS对类型为xtype:button的按钮进行不可用置灰的设置

在项目中会根据业务需要对页面中的组件进行各种操作,比如隐藏、改变组件显示名称、可用不可用等。今天介绍下如何使用ExtJS对xtype:button的按钮进行可用和不可用的设置。 页面中xtype:butto...

laowang2915
2018/05/31
0
0
Qt自定义按钮及不同状态下图片的切换

好久没有使用Qt了,最近在做窗体时做了一个自定义的钮铵,刚开始是想通过修改其MASK和ICON的方式来实现。确发现效果总是不太如意,如是干脆自已定义了一个XPushButton。也将其实现方式记录发...

renwoxingshen
2018/06/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

web前端入门到实战:图解原生dialog标签(非常详细)

在html5中,新增了很多语义化的标签。如footer、header之类的,今天的主角是dialog标签 顾名思义,就是用来定义对话框的。目前只有Chrome和Safari支持该标签,所以用的不多,不过确实挺好用的...

梦想编程
28分钟前
4
0
一些php常用函数积累

本文链接<?php// id: ecffe70d3af54df9bad97b61918ace7d global $ct_path, $ct_log_path;$log_path = "test_php.txt";// 是否先log到buffer,再通过CT_flush()一次性写入文件$......

一字见心
29分钟前
4
0
IntelliJ idea中 注释代码折叠

visual studio中有#region 可以折叠代码,IntelliJ idea 中也有类似功能 //region 描述代码//endregion

format
29分钟前
5
0
oracle表中更改主键

一、数据表有主键但无主键约束名 先删除之前的主键,后添加主键 ,执行SQL: a. alter table 表名 drop primary key; b. alter table 表名 add primary key(想要更改的字段名称); 二、数据表...

_Somuns
31分钟前
4
0
jQuery AJAX提交表单

我有一个名称为orderproductForm的表单,输入的数量不确定。 我想做某种jQuery.get或ajax或类似的事情,它将通过Ajax调用页面,并发送所有形式为orderproductForm的输入。 我想一种方法是做类...

技术盛宴
36分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部