toolbar的按钮还是灰色的

在MFC应用中,当切换窗口导致toolbar失去焦点时,其按钮会变灰。通过在CMainFrame对象中保存各窗口指针并重载OnCmdMsg函数,可以解决按钮状态问题。此外,工具条顶部的分割线可能是样式设置导致,可尝试调整创建工具条的风格参数。对于工具条显示延迟的问题,可能与RedrawWindow函数的使用有关。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么我设置了消息响应函数,toolbar的按钮还是灰色的?

楼主cmoth(容量够大) 2003-04-04 11:49:36 在 VC/MFC / 界面 提问

我再切分窗口的其中一个窗口A内创建一个工具条,当我点另一个窗口B让窗口A失去焦点时,窗口A内的工具条的按钮也变灰了,如果窗口A获得焦点,这个工具条也正常了。我怎么样才能让工具条始终处于使能状态?另外为什么我创建的工具条顶端总有一条分割线?怎么去掉它呢? 问题点数:30、回复次数:5Top

src="res://ieframe.dll/http_404.htm" frameborder="0" scrolling="no">

1 楼cmoth(容量够大)回复于 2003-04-04 13:18:17 得分 0

????????Top

2 楼TNSW(木头)回复于 2003-04-04 14:31:21 得分 30

在你点击另外一个窗口的时候,主窗口CMainFrame的Ative   view也被重新设置。  
  MFC框架在刷新工具条的状态时会调用CMainFrame::OnCmdMsg(...)函数(好像是这个函数名称吧^_^).这个函数首先会获取当前活动的视。  
  上面你的操作,已经使得当前活动的视改变,所以只有A和B只有其中的一个的工具条能有效。  
  解决办法:  
  在CMainFrame的对象中保存窗口A的指针m_pViewA和窗口B的指针m_pViewB.  
  重载CMainFrame::OnCmdMsg(...)函数并把该函数改写如下:  
  if(   m_pViewA->OnCmdMsg(...)   )  
        return   true;  
  if(   m_pViewB->OnCmdMsg(...)   )  
        return   true;  
  return   CMainFrame::OnCmdMsg(...);  
  唉,好久没有写字了,怎么手这么酸啊。。。  
   
  关于工具条顶端总有一条分割线,可能是你创建工具的风格设置的问题,请尝试其他的风格参数。  
  Top

3 楼cmoth(容量够大)回复于 2003-04-04 15:15:07 得分 0

谢谢木头兄,现在第一个问题已经没啦,我想再请教你一个问题:有时候工具条显示不出来,如果这时鼠标在工具条上移动,那按钮就会一个一个的显示出来,这大概是是什么原因呢?Top

4 楼Tue(星期二)回复于 2003-04-29 08:21:01 得分 0

期待中,我有的时候也显示不出来。Top

5 楼Tue(星期二)回复于 2003-05-04 03:29:27 得分 0

因为ToolBar在分割窗口的客户区,大概调用了下列函数,使ToolBar被擦除  
  BOOL   RedrawWindow(   LPCRECT   lpRectUpdate   =   NULL,   CRgn*   prgnUpdate   =   NULL,   UINT   flags   =   RDW_INVALIDATE   |   RDW_UPDATENOW   |   RDW_ERASE   );    
   
  第一个和第二个参数不要都为空,使rect或Rgn不包含ToolBar的部分,调用时就不会擦ToolBar了。  
  有帖子提供了m_wndToolBar.RedrawWindow(),的方法,但是好象还是有一部分显示不出来。  
  另外,在ToolBar所在的区域绘图,会遮挡住部分绘制的结果,如果使输出文本,会少一行 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值