WIN32 SDK中树形视图与图像列表的配合使用实例(一)

WIN32 SDK中树形视图与图像列表的配合使用实例(一)
2011年04月20日
  树形视图算属于高级控件了,比较特别一点,能够很清晰的反应某种层次关系,日常生活中也比较常见,比如资源管理器左边窗口就正是树形视图。同时,它也不例外的属于窗口,那就可以用CreateWindowEx来创建,需传递一个"SysTreeView32"的类名,特殊之处在于这家伙属于通用控件,因此需要在代码中加入InitCommonControls函数。
  InitCommonControls函数是动态链接库comctl32.dll中的一个函数,只要在您的程序中的任意地方引用了该函数就、会使得WINDOWS的程序加载器PE Loader加载该库。函数InitCommonControls其实只有一条指令"ret",它的唯一目的是为了使得在调用了个该函数的应用程序的可执行文件的PE头中的"引入"段中包含有comctl32.dll,这样无论什么时候该应用程序都会为您加载该库。所以真正初始化的工作是在该库的入口点处做的,在这里会注册所有的通用控件类,然后所有的通用控件就可以在这些类上进行创建,这就象创建其它的子窗口控件一样。
  树形视图风格介绍:
  TVS_HASBUTTONS
  在父亲项目中显示+或-,当点击该符号的时候可以展开或者收起该父亲项目下面的儿子孙子项目,如果想在根目录下也有此符号,就要指定TVS_LINESATROOT的style.
  TVS_HASLINES
  层次之间用线条来连接
  TVS_LINESATROOT 在根目录下也有线条来连接,如果没指定TVS_HASLINES风格,则此风格也会被忽略,MSDN这么说的:
  The TVS_HASLINES style enhances the graphic representation of a tree-view control's hierarchy by drawing lines that link child items to their parent item. This style does not link items at the root of the hierarchy. To do so, you need to combine the TVS_HASLINES and TVS_LINESATROOT styles.
  还有以下三种风格
  The TVS_EDITLABELS style makes it possible for the user to edit the labels of tree-view items. For more information about editing labels, see Tree-View Label Editing.
  The TVS_SHOWSELALWAYS style causes a selected item to remain selected when the tree-view control loses focus.
  The TVS_CHECKBOXES style creates checkboxes next to each item. If you want to use the checkbox style, you must set the TVS_CHECKBOXES style (with SetWindowLong) after you create the tree-view control and before you populate the tree. Otherwise, the checkboxes might appear unchecked, depending on timing issues.
  跟其他通用控件一样,树形视图也是靠消息实现通信的,父窗口发送一系列的消息给树形视图,而树形视图则发送Notification消息给他的父亲窗口。
  当事件发送时,tree view发送一个WM_NOTIFY消息给父窗口,同时在消息中附带了一些信息。 WM_NOTIFY
  wParam ==控件的ID。因为该值不是唯一的,故我们不用它。我们使用NMHDR结构体中的hwndFrom或IDFrom成员变量。
  lParam == 指向NMHDR结构体的指针。有一些控件可能传递一个指向更大一点的结构体的指针。但该结构体必须保证它的第一个成员变量是一个NMHDR型的变量。这样,您在处理lParam变量时,至少可以得到一个NMHDR型的变量。
  下面我们来看NMHDR:
  typedef struct tagNMHDR
  {
  HWND hwndFrom;
  UINT idFrom;
  UINT code;
  }NMHDR;
  hwndFrom是发送WM_NOTIFY消息的控件的窗口句柄。
  idFrom是发送WM_NOTIFY消息的控件的ID。
  code是控件发送给父窗口的数据。
  树型视图发送给父窗口的通知消息以TVN_打头。树型视图接收到的消息以TVM_打头,譬如:TVM_CREATEDRAGIMAGE。树型视图发送TVN_XXX消息时在code变量中放入NMHDR型变量。父窗口发送TVM_消息来控制树型视图。
  添加项目:
  创建树形视图完毕后,可以发送TVM_INSERTITEM消息向里面加入项目。 To send this message, call the SendMessage function as follows. Inserts a new item in a tree-view control. You can send this message explicitly or by using the TreeView_InsertItem macro. Syntax To send this message, call the SendMessage function as follows. lResult = SendMessage( // returns LRESULT in lResult
  (HWND) hWndControl, // handle to destination control
  (UINT) TVM_INSERTITEM, // message ID
  (WPARAM) wParam, // = 0;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值