ToolBoxCtrl






4.93/5 (10投票s)
表示为命令按钮树的常规工具栏的控件。
引言
该控件类似于一个普通的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::Draw
和ToolBoxCtrl::IRecalc
接口共同定义了控件的外观,并且它们的实现可以被称为样式。ToolBoxCtrl.cpp/ToolBoxCtrl.h文件包含四个预定义的样式类:ToolBoxCtrlStyle_base_system
、ToolBoxCtrlStyle_classic_system
、ToolBoxCtrlStyle_base_orange
和ToolBoxCtrlStyle_classic_orange
。前两个类使用系统颜色绘制ToolBoxCtrl
。如果您只使用一种样式,那么请使用模板类ToolBoxCtrlEx
。样式的类名作为模板参数指定,例如
ToolBoxCtrlEx<ToolBoxCtrlStyle_base_system> m_ToolBox;
用户可以通过两种方式使用ToolBoxCtrl
- 当您将
ActivateModeClick
值传递给ToolBoxCtrl::SetActivateMode
函数时,树形项目就像普通按钮一样。当您单击它们时,会调用Notify::OnClickItem
函数。 - 使用
ActivateModeDrag
值时,必须用鼠标拖动树形项目,例如,拖动到它旁边的编辑器区域中。在拖动开始时,会调用Notify::OnDragItemStart
函数。有关此机制在您的程序中的可能实现方式,请参阅位于Dialog.cpp文件中的OnDragItemStart
、OnMouseMove
、OnLButtonUp
、OnCaptureChanged
函数。
树形元素可以被选中和/或禁用。您可以通过调用ToolBoxCtrl::CheckItem
和ToolBoxCtrl::EnableItem
随时执行此操作。此外,控件本身能够发送请求以更新其中项目的状态。为此,它以短间隔调用Notify::OnUpdateItemState
函数。通过调用ToolBoxCtrl::EnableDynamicItemsUpdate(true)
启用此模式。可以为树中的每个可见项目单独调用Notify::OnUpdateItemState
函数,也可以一次为所有项目调用。这由传递给ToolBoxCtrl::SetUpdateMode
函数的值确定。
更改其状态、属性或其中的组和元素数量后,控件需要调用ToolBoxCtrl::Update()
。
祝您好运!
历史
- 2021年4月14日:初始版本