MFC之树控件
2021-02-15 13:24
标签:第一个 info 联系 res icons 事件 app name 定位在 新建MFC应用程序,项目名为TreeCtrl,同样基于对话框。 删除原有控件在右侧工具箱中找到Tree Control。放置到窗口中。如图: 右键属性,找到Has Lines,改为True。则原来的节点和叶之间会出现虚线相连。如图: 同样属性中,找到Has Buttons,改为True,则会出现加号按钮,具体看图: 找到Lines At Root,改为True,则根节点会出现虚线相连,如图: 控件中右键,选择添加变量,访问方式:private,变量名:n_tree。 定位到:类视图--CTreeCtrlDlg--OnInitDialg()中,在其中添加代码。 将图片保存到所在项目res文件夹下: 在资源视图中找到icon,右键添加资源,点击导入,即可添加想要的图片: 添加四张图片后: BOOL Create( int cx, int cy, UINT nFlags, int nInitial, int nGrow ); 返回值:如果成功,则返回非零值,否则为0。 参数: 值 含义 nInitial 图象列表最初包含的图象数。 说明: CImageList* SetImageList( CImageList* pImageList, int nImageListType ); 返回值: 参数: 说明: HTREEITEM InsertItem( LPTVINSERTSTRUCT lpInsertStruct ); HTREEITEM InsertItem( LPCTSTR lpszItem, HTREEITEM InsertItem( LPCTSTR lpszItem, 返回值:如果成功则返回新项的句柄;否则返回NULL。 参数: lpInsertStruct 一个指向用来指定要插入的tree view项的属性的TVINSERTSTRUCT的指针。 说明: 初始化函数中添加代码 执行结果: 此时添加的图片并未显示出来。 上面代码中函数执行完,才去找图片资源,而CImageList list保存在栈中,图片资源后面会被释放掉,必须保存这个集合,写到.h中成为成员属性。所以先注释掉这行。 双击dlg定位到.h文件中。在private中添加CImageList list; 如图所示: 此时执行,结果如下图,图片显示成功: 1.设置默认选项 设置后运行程序,直接定位在子节点1上。 2.不同节点切换时,触发事件。 然后在其中添加想要触发的东西 执行后成功显示。 注意执行的时候,会直接先弹出节点1,因为之前的代码有设置节点1为默认项。相应代码如下: MFC之树控件 标签:第一个 info 联系 res icons 事件 app name 定位在 原文地址:https://www.cnblogs.com/echobiscuit/p/12714575.html初始操作
添加图片资源
CImageList::Create()函数
BOOL Create( UINT nBitmapID, int cx, int nGrow, COLORREF crMask );
BOOL Create( LPCTSTR lpszBitmapID, int cx, int nGrow, COLORREFcrMask );
BOOL Create( CImageList& ImageList1, int nImage1, CImageList& ImageList2, int nImage2, int dx, int dy );
cx 每个图象的尺寸,以像素为单位。
cy 每个图象的尺寸,以像素为单位。
nFlags 确定创建的图象列表类型。此参数可能为以下值的组合,但只能有一个ILC_COLOR值
ILC_COLOR 如果没有其它ILC_COLOR* 标记被确定,则使用缺省行为。典型地,缺省为ILC_COLOR4;但对于旧的显示驱动程序,缺省为ILC_COLORDDB
ILC_COLOR4 使用4位(16色)设备独立位图(DIB)部分作为图象列表的位图
ILC_COLOR8 使用8位DIB部分。彩色表格使用的颜色与半色调调色板的一样
ILC_COLOR16 使用16位(32/64K色)DIB部分
ILC_COLOR24 使用24位DIB部分
ILC_COLOR32 使用32位DIB部分
ILC_COLORDDB 使用设备独立位图
ILC_MASK 使用掩码。图象列表包含两个位图,其中一个是用做掩码的位图。如果不包括此值,图象列表只包含一个位图
nGrow 当系统需要改变列表为新图象准备空间时,图象列表可生成的图象数。此参数替代改变的图象列表所能包含的新图象数。
nBitmapID 与图象列表联系的位图的源ID。
crMask 用于生成一个掩码的颜色。此指定的位图中的颜色的每个像素变为黑色,掩码中相应位设置为1。
lpszBitmapID 包含图象的源ID的字符串。
ImageList1 CImageList对象的参考。
nImage1 第一个存在的图象的索引。
ImageList2 CImageList对象的参考。
nImage2 第二个存在的图象的索引。
dx 每个图象的尺寸,用像素表示。
dy 每个图象的尺寸,用像素表示。
需要两步构造一个CImageList。首先调用构造函数,然后调用Create,创建图象列表并附加给CImageList对象。CTreeCtrl::SetImageList()函数
返回指向先前的图像列表的指针(如果有);否则返回NULL。
pImageList 指向要被分配的图像列表的指针。如果pImageList是NULL,则从tree view控件中删除所有的图像。
nImageListType 要设置的图像列表的类型。图像列表可以是下列值之一:
· TVSIL_NORMAL 获取常规的图像列表,它包含了该tree view项的被选择的和不被选择的图像。
· TVSIL_STATE 获取状态图像列表,它包含了处于用户定义状态的treeview项的图像。
此成员函数用来设置一个tree view控件的常规或状态图像列表,并使用新的图像来重画该tree view项的图像。CTreeCtrl::InsertItem()函数
HTREEITEM InsertItem( UINT nMask,
LPCTSTR lpszItem,
int nImage,
int nSelectedImage,
UINT nState,
UINT nStateMask,
LPARAM lParam,
HTREEITEM hParent,
HTREEITEM hInsertAfter
);
HTREEITEM hParent = TVI_ROOT,
HTREEITEM hInsertAfter = TVI_LAST
);
int nImage,
int nSelectedImage,
HTREEITEM hParent = TVI_ROOT,
HTREEITEM hInsertAfter = TVI_LAST
);
nMask 用来指定要设置的属性的整数。
lpszItem 一个包含项的文本的字符串的地址。
nImage 项的图像在tree view控件的图像列表中的索引。
nSelectedImage 项的被选择图像在tree view控件的图像列表中的索引。
nState 为项的状态指定的值。
nStateMask 指定要设置的状态。
lParam 与此项关联的一个32位的应用程序指定的值。
hParent 要被插入的项的父项的句柄。
hInsertAfter 新项要被插入其后的项的句柄。
此成员函数用来在一个tree view控件中插入一个新项。添加代码
//1.设置图标
//准备HICON图标
HICON icons[4];
icons[0] = AfxGetApp()->LoadIconW(IDI_ICON1);
icons[1] = AfxGetApp()->LoadIconW(IDI_ICON2);
icons[2] = AfxGetApp()->LoadIconW(IDI_ICON3);
icons[3] = AfxGetApp()->LoadIconW(IDI_ICON4);
CImageList list;
//创建图片集合
list.Create(30, 30, ILC_COLOR32, 4, 4);
//添加具体图片
for(int i = 0; i
完善已添加代码
其他一些API以及作用
n_tree.SelectItem(sub1);
回到界面视图中(即Dialog中),右键属性,选择控件事件(图标中闪电状)//切换时,打印当前项内容(切换后的内容)
//获取当前项
HTREEITEM item = n_tree.GetSelectedItem();
CString name = n_tree.GetItemText(item);
MessageBox(name); //弹出内容
//设置默认选项
n_tree.SelectItem(sub1);