2014-10-20 26 views
0

我必須製作一個包含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初學者,而且我之前沒有做過這麼大的項目。

如果有人可以向我解釋做什麼,給我發一條道路,或者說我很愚蠢,解決方案很簡單,我會非常感激。

回答

0

在您發佈的代碼段中,您使用的是原生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