CDialogBar上的按钮自动Disable

问题描述

刚开始在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中)。看到这,额,彷佛我想解决的问题,是无解的。code

问题解决

后来又在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在整个消息路由机制中起做用了。至于具体缘由也就不去深究了,反正本身的需求也已经达到了。ci

相关文章
相关标签/搜索