牵着老婆满街逛

严以律己,宽以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

导航

<2013年9月>
25262728293031
1234567
891011121314
15161718192021
22232425262728
293012345

统计

公告

言论:
1.每日自省;
2.享受人生;
3.尽力而为;
4.坚持不懈;
5.切莫急躁;
6.慎言敏行;
7.动心忍性;
8.上善若水。

常用链接

留言簿(11)

随笔分类(466)

随笔档案(1513)

文章分类(46)

文章档案(45)

相册

收藏夹(39)

工具官网

技术网站

开源网站

其他窝点

收藏网站

银行官网

友情链接

资源共享

搜索

积分与排名

最新评论

阅读排行榜

CDialogBar中按钮为灰色不可用的解决办法

做一个编辑器,里面用到了CDialogBar作ToolBar,但是很奇怪的是,放在里面的按钮居然是灰色不可用的。如下图所示:

寻思半天都不得其解,后来搜索了下相关问题,结果这个的确是一个问题。具体是怎么样的,我也没有去深究,总之想找到一个简单的解决办法。
原来只需要重载CDialogBar::OnUpdateCmdUI这个方法就可以了,代码如下:

void CToolBarDlg::OnUpdateCmdUI(CFrameWnd* pTarget, BOOL bDisableIfNoHandler)
{
    bDisableIfNoHandler 
= FALSE;
    CDialogBar::OnUpdateCmdUI(pTarget, FALSE);
}



如上图所示,已经不是灰色的了,添加了一个事件处理程序,放了一个MessageBox进去,可以响应了。

 

我的编译环境是:VS2005+SP1。

posted on 2008-06-02 23:21 杨粼波 阅读(3876) 评论(5)  编辑 收藏 引用

评论

# re: CDialogBar中按钮为灰色不可用的解决办法 2008-06-03 16:10 Sunny

刚放进去的按钮是灰色的,但是当你为他添加了响应函数后,他就可以用了,不必重载OnUpdateCmdUI吧  回复  更多评论   

# re: CDialogBar中按钮为灰色不可用的解决办法 2008-06-03 16:16 Sunny

哦,我知道了,如果按钮的消息处理是在CMainFrame中的就不用OnUpdateCmdUI,在其他类的话还是要重载OnUpdateCmdUI的。3Q呵呵  回复  更多评论   

# re: CDialogBar中按钮为灰色不可用的解决办法[未登录] 2008-06-03 19:49 杨粼波

具体我没有去深究个缘由,等有时间会去看看究竟内部的。
俺就晓得OnUpdateCmdUI是处理的WM_UI_UPDATE()这个消息的。
等我搞清楚了,就在后面把原理加上去。  回复  更多评论   

# re: CDialogBar中按钮为灰色不可用的解决办法 2009-02-17 23:36 hxy

另外请教一个问题,在VC中的CDialogBar中加入一个VB控件,该控件含有OnClick()事件,当点击该控件时,在CMainFrame中如何实现OnClick()事件响应。如果是VC自己的一个按钮,双击它,然后就可以添加事件代码,框架便会响应该事件。  回复  更多评论   

# re: CDialogBar中按钮为灰色不可用的解决办法 2009-04-21 10:10 Sunshine Alike

刚刚遇上了这个问题,下面是找到的答案
A button in a CDialogBar object is disabled automatically if the command routing does not contain a command handler function for the button.
To enable a button in a CDialogBar object, the command routing must include a command handler for the button.

NOTE: Because the CDialogBar object is not included in the routing scheme, the ON_BN_CLICKED() or ON_COMMAND() handler must be placed in one of the objects mentioned above that is in the routing scheme and not in the CDialogBar class.

from:http://support.microsoft.com/default.aspx?scid=kb;en-us;98198  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理