返回首页


简介
本文介绍如何添加一个浮动/停靠工具栏的对话框。
在MSDN中,有一个样品(dlgcbr32)这是一个固定的工具栏添加到对话框的方式来。我有扩展,例如,创建一个CDialog派生的类,它包含可以是固定的,浮动或隐藏的工具栏。浮动工具栏的作用是通过动态创建一个无模式对话框,其中包含一个固定的工具栏。使用代码
使用代码,您必须执行以下步骤:包括在您的项目ToolbarDialog.h和ToolbarDialog.cpp。来自CToolbarDialog您的对话:#包括"ToolbarDialog.hquot;CTDDlg类:公共CToolbarDialog
也确保你至少通过工具栏资源ID,您要使用的CToolbarDialog构造。这个构造函数有四个参数:前两个是对话框的ID和父(一样CDialog的),第三是工具栏资源ID和第四的是工具栏的初始状态。可能的值有:TS_HIDDEN / /工具栏不显示TS_FLOATING / /工具栏是浮动的在该对话框的左侧大小是固定的TS_LEFT / /工具栏TS_TOP / /工具栏是固定在对话框顶部在该对话框的右侧大小是固定的TS_RIGHT / /工具栏在对话框的底部是固定的TS_BOTTOM / /工具栏
下面是一个例子:CTDDlg:CTDDlg(的CWnd * pParent / *= NULL * /) :CToolbarDialog(CTDDlg:国际直拨电话,pParent,IDR_TOOLBAR1,TS_HIDDEN)在你的类中,声明和实现的功能:
虚拟ToolbarButtonCommand龙(UINT uButtonID);
这个函数接收作为参数的工具栏按钮被按下的ID。通过实施此功能,您可以添加到工具栏按钮的处理程序。
范例:CTDDlg长::ToolbarButtonCommand(UINT uButtonID){ CString的味精; msg.Format("ID为%d在toolbarquot按下按钮,uButtonID); AfxMessageBox(味精); 返回0;}如果你想设置的工具栏的状态是动态的,只需要调用PositionToolbar(DWORD dwPosition)。可以有参数的值是前面描述的。例如,要显示工具栏浮动,只需添加到您的代码下面的函数调用:PositionToolbar(TS_FLOATING);要启用/禁用的工具栏按钮,只需添加UpdateCommandUI处理程序到您的对话框和编辑的方法,你会在每一帧/视图应用程序,。
例如:ON_UPDATE_COMMAND_UI_RANGE(ID_BUTTON32771,ID_BUTTON32775,OnUpdateBtn)无效CTDDlg:OnUpdateBtn(CCmdUI * PCMD){ 如果(PCMD - GT; m_nID == ID_BUTTON32771) PCMD - GT;启用(FALSE);}如果你想拥有的工具栏按钮的工具提示,请按照下列步骤。您现在有一个对话框,支持浮动工具栏。
我已经测试了这个类仅在Windows 2000,但我认为它也将工作在Win9x和WinXP。修订历史版本1.0.0 - 2004年4月7日首次发行。版本1.0.1 - 2004年4月8日固定的臭虫:附加工具栏的右侧或左侧时,没有拖可能通过点击手柄上的(感谢ReorX通知我有关此错误)。固定的臭虫:浮动的工具栏是停靠时,父对话框不接收焦点。版本1.0.2 - 2004年4月9日增加:VC6的兼容性新增:工具提示支持(感谢兰迪更多他的文章在对话框中添加工具提示工具栏)固定的臭虫:UPDATE_COMMAND_UI不起作用(感谢= [阿斌] =通知我有关此错误)致谢克里斯蒂安Teodorescu给我的使用一个动态的浮动工具栏对话框的概念。感谢微软公司为他们的Dlgcbr32样本使用
您可以自由使用任何个人或免费的应用程序软件。如果您使用任何共享软件或商业应用软件,您必须先得到我的许可。如果您对其进行修改或扩展,请考虑张贴新的代码,在这里,供大家分享。这个软件是按"现况"提供,没有明示或暗示保证。我接受业务,该软件可能导致的任何损害或损失不承担任何责任。

回答

评论会员:codeangel 时间:2011/12/02
谢谢你,
为我们提供了这个漂亮的工具栏类。

DF
评论会员:Bumbala 时间:2011/12/02
我开发一个单文档应用程序(已经有一个CFrameWnd的)。我试图使用对话框和UPDATE_COMMAND_UI CToolbarDialog类,在这种情况下不工作。任何想法?
感谢。
"
评论会员:Dangta 时间:2011/12/02
嗨,感谢这个优秀的类,我现在可以在我的对话框的工具栏,我搜查围绕如何使真彩色工具栏上,我发现在代码大师文章:呻/ www.codeguru.com/cpp/controls/imagelist/openfaq/article.php/c9045/

我已经成功地落实到这个类,它的工作原理很精彩,如果你想用这个去使用真彩色工具栏!它的简单取代CTCToolBar CToolBar,然后创建和导入新的工具栏位图,为残疾人士,正常和悬停。添加位图后,只需要添加一个"RESOURCE.H",然后在CSmartToolBar包括:初始化添加一个调用后LoadToolBar LoadTCToolBar,你去那里。
评论会员:ajselvig 时间:2011/12/02
我不知道为什么微软没有把此功能纳入正规的CDialog类,但是这正是我一直在寻找的伟大工程。感谢。

安迪Selvig
系统/空气动力学工程师
古德里奇传感器系统

- 12时41日(星期三)第八年2月,2006年
修改
评论会员:taxtdod 时间:2011/12/02
我只希望它留在上面... ...
评论会员:tim635 时间:2011/12/02
,这似乎很简单
我认为你必须能够自己做到这一点。
给它另一次​​尝试。如果仍然有问题,他们后。

映入眼帘。
评论会员:莫尔塔扎Ghasemi 时间:2011/12/02
当我双击工具栏上的隐藏。为什么呢?和我如何可以修复吗?
  ;
评论会员:卢西恩Barbulescu 时间:2011/12/02
工具栏LBUTTONDOWN和LBUTTONUP消息的反应。在LBUTTONDOWN浮动的工具栏被隐藏和一个矩形显示(这是移动工具栏)。 LBUTTONUP工具栏显示在新的位置。在双击创建以下消息:WM_LBUTTONDOWN,M_LBUTTONUP,WM_LBUTTONDBLCLK,WM_LBUTTONUP。因此,在这一刻,是完全不可能删除双击行为。如果你找到一种方法,请让我知道,所以我可以作出必要的修改

-----------------------------------------{ BR}卢西恩 - Florentin Barbulescu
软件开发
C.S. A.E.I.C. S.A.

"信托是一个弱点" - 上行黑客精英
评论会员:psj699 时间:2011/12/02
我猜的工具栏通常在下列情况下的行为。
起初,附加工具栏移到其它地方,然后在顶部的高度,或在底部...
之后,当双击工具栏,工具栏是不是隐藏的。
我猜是不同的初始设定值。
我想这是要去帮助你找到一种方法。
祝你好运〜〜

- 2:22(星期三)第五,2005年10月
修改
评论会员:?mynh79 时间:2011/12/02
我可以使用这个类有一个以上的"行"的一个工具栏,一样,在雅虎Messenger的表情吧
提前Thankx
评论会员:卢西恩Barbulescu 时间:2011/12/02
您好,我再次
当我试图调用另一个对话框窗口,
它失败了!
请请告诉我如何解决这个问题?
谢谢!



KW -里克斯
评论会员:卢西恩Barbulescu 时间:2011/12/02
我约束对话框菜单的情况,
并从其中调用另一个对话框{七}

KW - 里克斯
评论会员:cungdaus 时间:2011/12/02
我创建了一个对话框dinamicaly,但我没有任何问题。你能告诉我哪些是错误的(如果你也可以发布一些代码,这将有助于我搞清楚如何来解决这个问题)

-----------------------------------------{ BR}卢西恩 - Florentin Barbulescu
软件开发
XTREME软件
www.xts.ro

"信托是一个弱点" - 上行黑客精英
评论会员:卢西恩Barbulescu 时间:2011/12/02
首先,我想说,你的工作是如此之大,谢谢你。
但是当我设置工具栏上的类底部的文本,
似乎不工作!!如下:{BR }******************************************** *****************{ BR} CString的xbtn_Str;
xbtn_Str.LoadString(IDS_STRBTN0);
m_pToolbar - GT; SetButtonText(0,xbtn_Str);
************************************************** ***********{ BR}然后我试图做到这一点:
m_pToolbar - GT; SetSizes中(CSIZE(50,50),CSIZE(32,32));
结果我只看到它的小脑袋底部的文本
我再次试图建立这样的工具栏类:
m_pToolbar - GT; SetHeight(50);
还可以看不到底部的文本
你能告诉我如何解决这个问题,谢谢
^ _ ^ !

KW - 里克斯
评论会员:卢西恩Barbulescu 时间:2011/12/02
添加CSmartToolbar在按钮上的文字:初始化后LoadToolBar(uTemplateID)的函数;
例如:

无效CSmartToolbar:初始化(的CWnd * pParent,UINT uTemplateID)
{
DWORD风格= WS_CHILD | WS_VISIBLE | CBRS_FLYBY | CBRS_GRIPPER | CBRS_SIZE_DYNAMIC | CBRS_TOOLTIPS;

如果(m_bState TS_FIXED)
风格| =(m_bStateTS_FIXED);
ELSE
风格| = TS_TOP; CreateEx(pParent,TBSTYLE_FLAT,风格);
LoadToolBar(uTemplateID);
CString的xbtn_Str;
  ;
xbtn_Str.LoadString(IDS_STRBTN0);  60; SetButtonText(0,xbtn_Str)

CRECT rctButton;
GetItemRect(0,rctButton) SetSizes中(,rctButton.Height CSIZE(rctButton.Width()()),CSIZE(16,15));
}

-----------------------------------------{ BR}卢西恩 - Florentin Barbulescu
软件开发
XTREME软件
www.xts.ro

"信托是一个弱点" - 上行黑客精英
评论会员:卢西恩Barbulescu 时间:2011/12/02
我完成了!非常感谢你! ^ _ ^

KW -里克斯
评论会员:ReorX 时间:2011/12/02
因为建设对话框加载工具栏,所以我知道,我怎么可以加载一个以上的工具栏
回答我尽快possiple
非常感谢。