Visual Studio .NET 2002Visual C++ 7.0Windows 2000Visual C++ 6.0MFCIntermediateDevVisual StudioWindowsC++
CToolbarDialog - 带浮动工具栏的对话框






4.80/5 (18投票s)
2004年4月7日
3分钟阅读

162426

6339
一个派生自 CDialog 的类,其中包含一个浮动工具栏。
引言
本文展示了如何向对话框添加浮动/停靠工具栏。
在 MSDN 中,有一个示例 (dlgcbr32) 展示了向对话框添加固定工具栏的方法。 我扩展了该示例,并创建了一个派生自 CDialog
的类,该类包含一个工具栏,该工具栏可以是固定的、浮动的或隐藏的。 浮动工具栏效果是通过动态创建一个包含固定工具栏的无模式对话框来实现的。
使用代码
要使用此代码,您必须执行以下步骤
- 在您的项目中包含 ToolbarDialog.h 和 ToolbarDialog.cpp。
- 从
CToolbarDialog
派生您的对话框#include "ToolbarDialog.h" class CTDDlg : public CToolbarDialog
另外,请确保至少将您要使用的工具栏资源的 ID 传递给
CToolbarDialog
构造函数。 此构造函数有四个参数:前两个是对话框 ID 和父窗口(就像CDialog
),第三个是工具栏资源的 ID,第四个是工具栏的初始状态。 可能的值是TS_HIDDEN //toolbar is not shown TS_FLOATING //toolbar is floating TS_LEFT //toolbar is fixed in the left size of the dialog TS_TOP //toolbar is fixed at the top of the dialog TS_RIGHT //toolbar is fixed in the right size of the dialog TS_BOTTOM //toolbar is fixed at the bottom of the dialog
这是一个例子。
CTDDlg::CTDDlg(CWnd* pParent /*=NULL*/) :CToolbarDialog(CTDDlg::IDD, pParent,IDR_TOOLBAR1,TS_HIDDEN)
- 在您的类中,声明并实现函数
virtual LONG ToolbarButtonCommand(UINT uButtonID);
此函数接收作为参数的工具栏按钮的 ID,该按钮已被按下。 通过实现此函数,您可以将处理程序添加到工具栏按钮。
示例
LONG CTDDlg::ToolbarButtonCommand(UINT uButtonID) { CString msg; msg.Format("Button with ID %d was pressed in toolbar",uButtonID); AfxMessageBox(msg); return 0; }
- 如果要动态设置工具栏的状态,只需调用
PositionToolbar(DWORD dwPosition)
。 参数可以具有前面描述的值。例如,要显示浮动工具栏,只需在您的代码中添加以下函数调用
PositionToolbar(TS_FLOATING);
- 要启用/禁用工具栏按钮,只需将
UpdateCommandUI
处理程序添加到您的对话框中,并像在每个 Frame/View 应用程序中一样编辑这些方法。例如
ON_UPDATE_COMMAND_UI_RANGE(ID_BUTTON32771,ID_BUTTON32775,OnUpdateBtn) void CTDDlg::OnUpdateBtn(CCmdUI* pCmd) { if(pCmd->m_nID == ID_BUTTON32771) pCmd->Enable(FALSE); }
- 如果您希望工具栏按钮有工具提示,请按照 Randy More 的文章 中描述的步骤进行操作。
您现在有了一个支持浮动工具栏的对话框。
我只在 Windows 2000 上测试过这个类,但我想它也适用于 Win9x 和 WinXP。
修订历史
版本 1.0.0 - 2004 年 4 月 7 日
- 首次发布。
版本 1.0.1 - 2004 年 4 月 8 日
- 修复错误:当工具栏附加到右侧或左侧时,无法通过单击手柄进行拖动(感谢 ReorX 告知我此错误)。
- 修复错误:当浮动工具栏停靠时,父对话框未接收焦点。
版本 1.0.2 - 2004 年 4 月 9 日
- 添加:VC6 兼容性
- 添加:工具提示支持(感谢 Randy More 撰写关于在对话框中添加工具栏工具提示的文章)
- 修复错误:
UPDATE_COMMAND_UI
不起作用(感谢 =[ Abin ]= 告知我此错误)
致谢
- 感谢 Cristian Teodorescu 给了我使用动态对话框实现浮动工具栏的想法。
- 感谢 Microsoft 公司提供的 Dlgcbr32 示例
用法
您可以免费在任何个人或免费软件应用程序中使用此软件。 如果您在任何共享软件或商业应用程序中使用此软件,您必须首先获得我的许可。 如果您修改或扩展它,请考虑在此处发布新代码,供大家分享。 本软件按“原样”提供,不提供任何明示或暗示的保证。 对于本软件可能造成的任何损害或业务损失,我不承担任何责任。