【问题标题】:How could i create a TreeView like Microsoft apps我如何创建像 Microsoft 应用程序一样的 TreeView
【发布时间】:2017-02-06 04:47:21
【问题描述】:

您好,我正在接受开发应用程序的培训,但我想添加具有特定外观的树,我成功地做到了,但我所拥有的外观并不是我的客户想要的,该应用程序是使用 MFC 和 C++ 开发的。

我的应用如下所示:

我希望它看起来像这样:

我正在使用的代码:

CRect rectDummy(0,0,200,600);
//rectDummy.SetRectEmpty();

CTreeCtrl m_wndClassView;

const DWORD dwViewStyle = WS_CHILD | WS_VISIBLE | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;

if (!m_wndClassView.Create(dwViewStyle, rectDummy, &m_wndView, 2))
{
    TRACE0("Failed to create Class View\n");
    return -1;      // fail to create
}


HTREEITEM hRoot = m_wndClassView.InsertItem(_T("System Summary"), 0, 0);
m_wndClassView.SetItemState(hRoot, TVIS_BOLD, TVIS_BOLD);

HTREEITEM hClass = m_wndClassView.InsertItem(_T("Hardwre Resources"), 1, 1, hRoot);
hClass = m_wndClassView.InsertItem(_T("Components"), 1, 1, hRoot);
hClass = m_wndClassView.InsertItem(_T("Software Enviroment"), 1, 1, hRoot);

如果可能,我更喜欢 MFC/C++ 中的解决方案,而不是使用第三方库。

【问题讨论】:

标签: c++ windows winapi mfc window


【解决方案1】:

添加对uxtheme.lib库的依赖,包含<Uxtheme.h>标头,创建控件后调用SetWindowTheme()函数:

SetWindowTheme(hYourTreeviewHandle, L"Explorer", NULL);

这将使您的树形视图控件具有 Windows 资源管理器的外观和感觉。由于您需要提供自己的图像列表并利用TreeView_SetImageList() 宏将图像列表附加到树视图,因此涉及的事情要多得多:

TreeView_SetImageList(hYourTreeviewHandle, hYourImagesHandle, TVSIL_NORMAL);

【讨论】:

  • 嗨,你能告诉我如何删除点以及“元素之间的虚线”
  • @Karim 从您的const DWORD dwViewStyle=... 代码中删除TVS_HASLINESTVS_LINESATROOT 窗口样式。有关树视图样式的更多信息,请访问 MSDN page
【解决方案2】:

你需要做一些事情来获得这个外观:

  1. 确保您的应用程序清单指定 comctl32 v6。
  2. 在创建树视图后添加对SetWindowTheme(hTreeView, L"explorer", NULL) 的调用。这里hTreeView是树视图的窗口句柄。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-03
    • 1970-01-01
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    相关资源
    最近更新 更多