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

ToolBoxCtrl

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.93/5 (10投票s)

2021 年 4 月 14 日

公共领域

3分钟阅读

viewsIcon

6791

downloadIcon

734

表示为命令按钮树的常规工具栏的控件。

引言

该控件类似于一个普通的ToolBar。它代表一棵树。命令按钮位于树的各个分支中,您可以检查和禁用它们。

该控件有多种用途。例如,作为侧边栏用于选择主程序窗口的内容或设置窗口中的当前页面。此外,该控件在不同的编辑器中使用时也很方便,用于选择一个工作工具或组件,该工具或组件可以用鼠标拖动到编辑器字段中。

该控件派生自CWnd,是一个基于MFC的通用控件。它可以放置在任何窗口上:主框架、对话框等。

Using the Code

要创建控件并向其添加元素,请执行以下操作

#include "ToolBoxCtrl.h"

ToolBoxCtrlEx<ToolBoxCtrlStyle_base_system> m_ToolBox;

...

if( !m_ToolBox.Create(this, WS_VISIBLE, CRect(10,10,100,200), ID_ToolBoxCtrl) )
  return -1;    // error

// Load images for groups
m_ToolBox.CreateImages(ToolBoxCtrl::ImageGroup,NULL,ID_PNG_GROUP_IMAGES,true,11);
// Load images for items
m_ToolBox.CreateImages(ToolBoxCtrl::ImageItem,NULL,ID_PNG_ITEM_IMAGES,true,16);

// Add groups and items
m_ToolBox.AddGroup(_T("Group 1"));
  m_ToolBox.AddItem(0, 1, _T("Item 1.1"),_T("Description for 'Item 1.1'"),0);
  m_ToolBox.AddItem(0, 2, _T("Item 1.2"),_T("Description for 'Item 1.2'"),1);
m_ToolBox.AddGroup(_T("Group 2");
  m_ToolBox.AddItem(1, 3, _T("Item 2.1"),_T("Description for 'Item 2.1'"),-1);
  m_ToolBox.AddItem(1, 4, _T("Item 2.2"),_T("Description for 'Item 2.2'"),2);
  m_ToolBox.AddItem(1, 5, _T("Item 2.3"),_T("Description for 'Item 2.3'"),3);

// Load state from registry.
if( !m_ToolBox.LoadState(AfxGetApp(),_T("ToolBoxCtrl"),_T("State")) )
  m_ToolBox.CollapseGroup(1);   // some default state

m_ToolBox.Update(true);

ToolBoxCtrl不执行任何渲染。为了绘制它,它调用ToolBoxCtrl::Draw接口的函数。要绘制ToolBoxCtrl,您需要创建一个从ToolBoxCtrl::Draw类继承的对象,实现其函数,并将ToolBoxCtrl::Draw指针传递给ToolBoxCtrl,使用ToolBoxCtrl::SetDrawManager函数调用。类似地,ToolBoxCtrl::IRecalc接口用于指定ToolBoxCtrl区域之间的间距。ToolBoxCtrl::ToolTip接口将帮助您为项目创建工具提示。还有一个ToolBoxCtrl::Notify类,用于通知ToolBoxCtrl中的事件。这四个接口中的任何一个的实现都必须在控件运行的整个过程中存在。

ToolBoxCtrl::DrawToolBoxCtrl::IRecalc接口共同定义了控件的外观,并且它们的实现可以被称为样式。ToolBoxCtrl.cpp/ToolBoxCtrl.h文件包含四个预定义的样式类:ToolBoxCtrlStyle_base_systemToolBoxCtrlStyle_classic_systemToolBoxCtrlStyle_base_orangeToolBoxCtrlStyle_classic_orange。前两个类使用系统颜色绘制ToolBoxCtrl。如果您只使用一种样式,那么请使用模板类ToolBoxCtrlEx。样式的类名作为模板参数指定,例如

ToolBoxCtrlEx<ToolBoxCtrlStyle_base_system> m_ToolBox;

用户可以通过两种方式使用ToolBoxCtrl

  • 当您将ActivateModeClick值传递给ToolBoxCtrl::SetActivateMode函数时,树形项目就像普通按钮一样。当您单击它们时,会调用Notify::OnClickItem函数。
  • 使用ActivateModeDrag值时,必须用鼠标拖动树形项目,例如,拖动到它旁边的编辑器区域中。在拖动开始时,会调用Notify::OnDragItemStart函数。有关此机制在您的程序中的可能实现方式,请参阅位于Dialog.cpp文件中的OnDragItemStartOnMouseMoveOnLButtonUpOnCaptureChanged函数。

树形元素可以被选中和/或禁用。您可以通过调用ToolBoxCtrl::CheckItemToolBoxCtrl::EnableItem随时执行此操作。此外,控件本身能够发送请求以更新其中项目的状态。为此,它以短间隔调用Notify::OnUpdateItemState函数。通过调用ToolBoxCtrl::EnableDynamicItemsUpdate(true)启用此模式。可以为树中的每个可见项目单独调用Notify::OnUpdateItemState函数,也可以一次为所有项目调用。这由传递给ToolBoxCtrl::SetUpdateMode函数的值确定。

更改其状态、属性或其中的组和元素数量后,控件需要调用ToolBoxCtrl::Update()

祝您好运!

历史

  • 2021年4月14日:初始版本
© . All rights reserved.