为什么我设置了消息响应函数,toolbar的按钮还是灰色的?
我再切分窗口的其中一个窗口A内创建一个工具条,当我点另一个窗口B让窗口A失去焦点时,窗口A内的工具条的按钮也变灰了,如果窗口A获得焦点,这个工具条也正常了。我怎么样才能让工具条始终处于使能状态?另外为什么我创建的工具条顶端总有一条分割线?怎么去掉它呢? 问题点数:30、回复次数:5Top
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所在的区域绘图,会遮挡住部分绘制的结果,如果使输出文本,会少一行