使用本机 C++ 进行 windows vista 开发(3)

http://www.sina.com.cn 2008年06月13日 10:45  新浪科技

  树视图控件

  windows 开发人员经过努力,最终为树视图控件引进了扩展样式。图 3 显示了某些使用中的新的树视图控件样式和主题。

使用本机C++进行windowsvista开发(3)

图 3 树视图

  提供 TVM_GETEXTENDEDSTYLE 和 TVM_SETEXTENDEDSTYLE 消息以获取和设置扩展样式的位掩码。TreeView_GetExtendedStyle 宏可包含 TVM_GETEXTENDEDSTYLE 消息,该宏的使用方法如下:

  DWORD style = TreeView_GetExtendedStyle(m_treeView);

  但是,通常您不必获取扩展样式,因为 TVM_SETEXTENDEDSTYLE 消息允许您更新使用位掩码的样式标记子集。例如,利用包含 TVM_SETEXTENDEDSTYLE 消息的 TreeView_SetExtendedStyle 宏,您可以在添加 TVS_EX_AUTOHSCROLL 扩展样式的同时删除 TVS_EX_MULTISELECT 扩展样式,具体代码如下所示:

  TreeView_SetExtendedStyle(m_treeView, TVS_EX_AUTOHSCROLL, TVS_EX_AUTOHSCROLL | TVS_EX_MULTISELECT);

  毋庸置疑,对树视图控件的改进中,最令人兴奋的莫过于使控件能够支持多种选择。最终,开发人员在进行多种选择时可以抛弃所有代码,而只需使用 TVS_EX_MULTISELECT 扩展样式,让系统来完成其余处理。当然,您会希望枚举所选项目。通过为 TVM_GETNEXTITEM 消息引入新标记,枚举所选项目是可以实现的。首先像以往一样使用 TVGN_CARET 标记获取当前所选项目,然后使用 TVGN_NEXTSELECTED 标记获取剩余的所选项目。下面是使用 windows Template Library CTreeViewCtrlEx 和 CTreeItem 类的一个简单示例:

  for (CTreeItem item = m_treeView.GetSelectedItem(); 0 != item; item = item.GetNext(TVGN_NEXTSELECTED)) { CString text; item.GetText(text); TRACE(L”%s\n”, text); }

  CTreeViewCtrlEx 的 GetSelectedItem 方法发送带有 TVGN_CARET 标记的 TVM_GETNEXTITEM 消息以获取第一个所选项目,而 CTreeItem 的 GetNext 方法再次发送带有指定标记和树项目句柄的 TVM_GETNEXTITEM 消息来提供消息上下文。

  如果您只想知道所选项目的数目,利用 TVM_GETSELECTEDCOUNT 消息实现。关联的 TreeView_GetSelectedCount 宏可包含该消息,该宏的使用方法如下:

  DWORD count = TreeView_GetSelectedCount(m_treeView);

  还有几个扩展样式值得一试。TVS_EX_DOUBLEBUFFER 扩展样式可“告诉”控件通过双缓冲进行绘制。这样可避免在重新调整控件大小时出现闪烁。TVS_EX_AUTOHSCROLL 扩展样式允许控件自动将所选的树项目显示到视图中。这通常与 TVS_NOHSCROLL 样式结合使用,后者可隐藏水平滚动条。以下是一个简单示例:

  DWORD treeViewStyle = m_treeView.GetStyle(); treeViewStyle |= TVS_NOHSCROLL; m_treeView.SetWindowLong(GWL_STYLE, treeViewStyle); TreeView_SetExtendedStyle(m_treeView, TVS_EX_AUTOHSCROLL, TVS_EX_AUTOHSCROLL);

  尽管默认行为通常已经足够,但您可以使用 TVM_SETAUTOSCROLLINFO 消息控制自动滚动动画特性。

  您还可能已注意到:Windows vista 上的 windows 资源管理器现在支持新的具有淡入淡出效果的“expando”按钮,使用新的箭头位图代替了原有的加/减框。要切换到箭头,您需要使用 SetWindowTheme 函数以指示 windows 对指定控件使用与 windows 资源管理器一致的可视样式:

  COM_VERIFY(::SetWindowTheme(m_treeView, L”explorer”, 0));

  使用 TVS_EX_FADEINOUTEXPANDOS 扩展样式实现淡入淡出效果。

本文导航:
·前言
·按钮控件
·树视图控件
·标头控件和列表视图控件
·关于 .NET

发表评论 _COUNT_条
Powered By Google
不支持Flash
·城市对话改革30年 ·新浪城市同心联动 ·诚招合作伙伴 ·企业邮箱畅通无阻
不支持Flash