如何填充资源脚本中的TreeView

问题描述:

我必须制作一个包含TreeView的C++ VSPackage。我在工具箱窗口的项目资源脚本(* .rc)的默认对话窗口中添加了一个。问题是我不知道如何添加项目。如何填充资源脚本中的TreeView

我看了很多网站,但他们有C#或其他类型的项目的代码。

我发现了一个由Song Ho Ahn制作的项目,也可以在本网站的底部找到TreeView的源代码。

我试图去TreeView属性窗口,看看是否有东西,所以我可以添加项目,然后找到一种方法来取代它们,但没有。我试图用他编写的代码来帮助我找到解决问题的方法,但我找不到它。也许这是“处理程序”和“父母”,我不知道如何使用。

void set(HWND parent, int id, bool visible=true) 
    { 
     this->parent = parent; 
     handle = GetDlgItem(parent, id); 
     if(!visible) disable(); 
    } 

我想提一提的是,我是一名VSPackage初学者,而且我之前没有做过这么大的项目。

如果有人可以向我解释做什么,给我发一条道路,或者说我很愚蠢,解决方案很简单,我会非常感激。

在您发布的代码段中,您使用的是原生WIN32 API。因此,您可以查看TVM_INSERTITEM消息的文档。

这里是一个小片段,以单个条目添加到TreeView控件(无论是否由资源脚本或CreateWindow的(的呼叫..)创建):

TVITEM tvi; 
TVINSERTSTRUCT tvins; 
HTREEITEM hItem; 

/* setup new item */ 
tvi.mask = TVIF_TEXT; // just text 
tvi.pszText = "Hello TreeView!"; 
tvi.cchTextMax = 0; // ignored if creating the item 

/* setup insertion structure of item */ 
tvins.hParent = TVI_ROOT; // insert item at root level 
tvins.item = tvi;   // item description setup above 
tvins.hInsertAfter = NULL; // instert on top of the tree view 
hItem = (HTREEITEM)SendMessage(GetDlgItem(hWnd, IDC_TREEVIEW), // update parameters of GetDlgItem(..) according to your code 
           TVM_INSERTITEM, 
           0, 
           (LPARAM)(LPTVINSERTSTRUCT)&tvins); 
if (hItem == NULL) 
{ 
    /* something went wrong */ 
} 
+0

谢谢你的回复。我得到了2个问题,并设法只解决了1.我解决的问题是,我无法使用您在“MyToolWindow.h”中提供的代码示例,必须为其创建一个新的Header文件(简单解决方案)。第二个问题是我试图给“GerDlgItem”给其他变量,如'HWND hItemWnd = GetDlgItem(hWndCtl,IDC_RESULTS_TREE); ”。问题是“hItemWnd”没有改变(在调试中看到)。是不是不使用“GetDlgItem”的其他方式?谢谢你,祝你有美好的一天。 – Flavius 2014-10-21 14:11:08

+0

函数GetDlgItem(..)返回给定ID的子窗口句柄。因此,HWND必须是包含TreeView的窗口的HWND。如果GetDlgItem(..)返回NULL,则会发生错误(通常是错误的输入数据,特别是错误的HWND)。您能否提供更多代码?有点难以“想象”你的问题...... ;-) – 2014-10-21 18:02:24

+0

问题是这是一个大的VSPackage,所以我只能给你工具窗口的代码和我从先生使用的代码。宋浩安恩网站。您可以从这里下载文件:[link](https://www.dropbox.com/sh/crx3xjck1886ys0/AABQXHGi9_L0XmjbmQleCZqpa?dl=0)。如果你想我可以授予你在BitBucket上读取访问权限。 – Flavius 2014-10-21 19:57:05