如何得到CToolBar上按钮的CButton类指针?

astral 2004-04-21 10:22:36
如题,顺便问问,在CMainFrame的Oncreate里面创建并dock一个DialogBar时非法是什么原因?程序段如下:

if(!m_dlgBar.Create(this,IDD_DIALOGBAR,WS_CHILD,0))
return -1;
m_dlgBar.EnableDocking(CBRS_ALIGN_BOTTOM);
DockControlBar(&m_dlgBar);

MSDN里面说创建dialogbar时除了WS_CHILD属性外什么都不要设,俺就是这么做的丫,郁闷
...全文
93 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
菜牛 2004-04-21
  • 打赏
  • 举报
回复
CToolBar里的按钮不是Button,甚至不是CWnd继承的,ToolBar内部实现绘制按钮和处理点击消息,所以不能得到CButton。
快乐鹦鹉 2004-04-21
  • 打赏
  • 举报
回复
应该调用 EnableDocking(CBRS_ALIGN_ANY);
而不仅仅是m_dlgBar.EnableDocking(CBRS_ALIGN_BOTTOM);
astral 2004-04-21
  • 打赏
  • 举报
回复
出现问题是在CFrameWnd::DockControlBar里面

pDockBar = (CDockBar*)GetControlBar(dwDockBarMap[i][0]);
ASSERT(pDockBar != NULL);
这个断言失败。后面有注释

// assert fails when initial CBRS_ of bar does not
// match available docking sites, as set by EnableDocking()

好像是说停靠方式同EnableDocking里的设置不符,可我调用EnableDocking(CBRS_ALIGN_ANY)
也还是不行
快乐鹦鹉 2004-04-21
  • 打赏
  • 举报
回复
第一个是模板ID,第二个是控件ID。可以这样:(MSDN例子)
if (!m_wndDlgBar.Create(this, IDD_VIEWSELECT,
CBRS_LEFT|CBRS_TOOLTIPS|CBRS_FLYBY, IDD_VIEWSELECT))
{
TRACE0("Failed to create DlgBar\n");
return -1; // Fail to create.
}
两个ID用同样的就可以了
astral 2004-04-21
  • 打赏
  • 举报
回复
最后一句DockControlBar造成的。
CDialogBar的Create带有两个参数是ID,请问第二个是什么意思?
快乐鹦鹉 2004-04-21
  • 打赏
  • 举报
回复
好像不能直接获取CButton指针。但可以修改这个按钮的属性。可以通过CToolBarCtrl类修改很多内容。
非法是哪一句造成的?
astral 2004-04-21
  • 打赏
  • 举报
回复
酱紫哦?谢谢楼上的 ^^
非法总算弄没了,再次感谢提供帮助的各位

15,976

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧