65.9K
CodeProject 正在变化。 阅读更多。
Home

CToolbarDialog - 带浮动工具栏的对话框

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.80/5 (18投票s)

2004年4月7日

3分钟阅读

viewsIcon

162426

downloadIcon

6339

一个派生自 CDialog 的类,其中包含一个浮动工具栏。

Sample Image - toolbardialog.jpg

引言

本文展示了如何向对话框添加浮动/停靠工具栏。

在 MSDN 中,有一个示例 (dlgcbr32) 展示了向对话框添加固定工具栏的方法。 我扩展了该示例,并创建了一个派生自 CDialog 的类,该类包含一个工具栏,该工具栏可以是固定的、浮动的或隐藏的。 浮动工具栏效果是通过动态创建一个包含固定工具栏的无模式对话框来实现的。

使用代码

要使用此代码,您必须执行以下步骤

  1. 在您的项目中包含 ToolbarDialog.hToolbarDialog.cpp
  2. 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)
  3. 在您的类中,声明并实现函数

    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;
    }
  4. 如果要动态设置工具栏的状态,只需调用 PositionToolbar(DWORD dwPosition)。 参数可以具有前面描述的值。

    例如,要显示浮动工具栏,只需在您的代码中添加以下函数调用

    PositionToolbar(TS_FLOATING);
  5. 要启用/禁用工具栏按钮,只需将 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);
    }
  6. 如果您希望工具栏按钮有工具提示,请按照 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 示例

用法

您可以免费在任何个人或免费软件应用程序中使用此软件。 如果您在任何共享软件或商业应用程序中使用此软件,您必须首先获得我的许可。 如果您修改或扩展它,请考虑在此处发布新代码,供大家分享。 本软件按“原样”提供,不提供任何明示或暗示的保证。 对于本软件可能造成的任何损害或业务损失,我不承担任何责任。

© . All rights reserved.