在对话框中添加工具栏按钮的问题。
我在对话框中添加了工具栏,菜单栏。工具栏是我用代码生成的。给工具栏添加了几个按钮,现在问题是比如我的工具栏按钮中有退出这个按钮,我如何把工具栏这个退出按钮和我的菜单栏中退...
我在对话框中添加了工具栏,菜单栏。工具栏是我用代码生成的。给工具栏添加了几个按钮,现在问题是比如我的工具栏按钮中有退出这个按钮,我如何把工具栏这个退出按钮 和我的菜单栏中退出按钮功能实现相连。因为在对话框中代码添加的工具栏并没有ID号,那位高手解答一下啊,谢谢!
m_imagelist.Create(24,24,ILC_COLOR24|ILC_MASK,1,1);
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON4));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON5));
UINT array[5];
for(int i=0;i<5;i++)
array[i] = 5000+i;
m_toolbar.Create(this); m_toolbar.SetButtons(array,5); m_toolbar.SetButtonText(0,"查询");
m_toolbar.SetButtonText(1,"修改");
m_toolbar.SetButtonText(2,"添加");
m_toolbar.SetButtonText(3,"用户");
m_toolbar.SetButtonText(4,"退出");
m_toolbar.GetToolBarCtrl().SetButtonWidth(60,120); m_toolbar.GetToolBarCtrl().SetImageList(&m_imagelist); m_toolbar.SetSizes(CSize(70,60),CSize(28,40)); RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);//显示工具栏
这个是我创建工具栏的代码,如何获取工具栏的ID并与我创建的菜单栏ID号相连啊? 展开
m_imagelist.Create(24,24,ILC_COLOR24|ILC_MASK,1,1);
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON1));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON2));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON3));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON4));
m_imagelist.Add(AfxGetApp()->LoadIcon(IDI_ICON5));
UINT array[5];
for(int i=0;i<5;i++)
array[i] = 5000+i;
m_toolbar.Create(this); m_toolbar.SetButtons(array,5); m_toolbar.SetButtonText(0,"查询");
m_toolbar.SetButtonText(1,"修改");
m_toolbar.SetButtonText(2,"添加");
m_toolbar.SetButtonText(3,"用户");
m_toolbar.SetButtonText(4,"退出");
m_toolbar.GetToolBarCtrl().SetButtonWidth(60,120); m_toolbar.GetToolBarCtrl().SetImageList(&m_imagelist); m_toolbar.SetSizes(CSize(70,60),CSize(28,40)); RepositionBars(AFX_IDW_CONTROLBAR_FIRST,AFX_IDW_CONTROLBAR_LAST,0);//显示工具栏
这个是我创建工具栏的代码,如何获取工具栏的ID并与我创建的菜单栏ID号相连啊? 展开
1个回答
展开全部
楼主是如何添加工具栏的呢?按理工具栏上的按钮都是有 ID 的。
如果是 MFC 的话,有超多的方法可以获取 ID ,当然所有这些方法,都需要我们提供按钮在工具栏上的位置索引。
譬如要知道第一个按钮的 ID :
extern CToolBar tb;
UINT id;
//1
id = tb.GetItemID(0);
//2
UINT style;
int image;
tb.GetButtonInfo(0, id, style, image);
//3
CToolBarCtrl& tbc = tb.GetToolBarCtrl();
TBBUTTON btn;
BOOL bRet = tbc.GetButton(0, &btn);
if (bRet) {
id = btn.idCommand;
}
与工具栏有关的很重要的一个数据结构是 TBBUTTON , MFC 很多函数都是围绕该结构进行包装的。如果是纯 WIN32 编程的话,也是围绕 TBBUTTON 写代码直接操纵该数据结构来改变工具栏按钮的外观和行为的。
如果是 MFC 的话,有超多的方法可以获取 ID ,当然所有这些方法,都需要我们提供按钮在工具栏上的位置索引。
譬如要知道第一个按钮的 ID :
extern CToolBar tb;
UINT id;
//1
id = tb.GetItemID(0);
//2
UINT style;
int image;
tb.GetButtonInfo(0, id, style, image);
//3
CToolBarCtrl& tbc = tb.GetToolBarCtrl();
TBBUTTON btn;
BOOL bRet = tbc.GetButton(0, &btn);
if (bRet) {
id = btn.idCommand;
}
与工具栏有关的很重要的一个数据结构是 TBBUTTON , MFC 很多函数都是围绕该结构进行包装的。如果是纯 WIN32 编程的话,也是围绕 TBBUTTON 写代码直接操纵该数据结构来改变工具栏按钮的外观和行为的。
追问
代码我贴上去了,如何关联,能不能用代码说说,谢谢!
追答
添加菜单项“修改”(假设ID 为1001)的命令响应函数得到(VS向导自动生成):
OnModify(...){...}
在这一句
m_toolbar.SetButtonText(1,"修改");
之后添加:
UINT id;
UINT style;
int image;
m_toolbar.GetButtonInfo(1, id, style, image);
m_toolbar.SetButtonInfo(1, 1001, style, image);
也可以:
CToolBarCtrl& tbc = m_toolbar.GetToolBarCtrl();
tbc.SetCmdID(1, 1001);
完成后,当点击工具栏 “修改”按钮,OnModify 函数在消息路由的指引下被调用。
还是那句话,无论 MFC 怎么包装,最终操作的就是两步:1 根据索引获得按钮的数据结构 TBBUTTON 2 填写该数据结构,重新写回到这个按钮中,使按钮的外观和行为生效。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询