rendered paste body//------------------------------------------------------- treeselect.h
#pragma once
#include "Platform.h"
typedef struct tagTREESELECT
{
//in:
WCHAR wszTitle[32];
LPSAFEARRAY lpArray;
//out:
long lSelected;
} TREESELECT, *LPTREESELECT;
BOOL TreeSelect(LPTREESELECT);
//------------------------------------------------------- treeselect.c
#include "Platform.h"
#include "App.h"
#include "TreeSelect.h"
INT_PTR CALLBACK TreeSelectDlgProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
static LPTREESELECT lpParam;
static HWND hTree;
switch(uMsg)
{
case WM_INITDIALOG:
{
HTREEITEM *lpItems;
LONG lColsCount;
LONG lRowsCount;
TVITEM tvi;
TVINSERTSTRUCT tvins;
BOOL bNeedInsert = TRUE;
LONG i, j;
hTree = GetDlgItem(hWnd, IDC_TREE);
lpParam = (LPTREESELECT)lParam;
SetWindowText(hWnd, lpParam->wszTitle);
SafeArrayGetUBound(lpParam->lpArray, 1, &lColsCount);
lColsCount ++;
SafeArrayGetUBound(lpParam->lpArray, 2, &lRowsCount);
lRowsCount ++;
lpItems = GlobalAlloc(LPTR, sizeof(HTREEITEM)*lRowsCount);
while(bNeedInsert)
{
bNeedInsert = FALSE;
for(i = 0; i < lRowsCount; i++)
{
if(!lpItems[i])
{
tvi.mask = TVIF_TEXT | TVIF_PARAM;
tvi.cchTextMax = 256;
tvins.item = tvi;
tvins.hInsertAfter = TVI_LAST;
tvi.pszText = L"TEST";//((VARIANT*)lpParam->lpArray->pvData)[i*lColsCount + 2].bstrVal;
tvi.lParam = (LPARAM)i;
tvins.hParent = TVI_ROOT;
lpItems[i] = TreeView_InsertItem(hTree, &tvins);
bNeedInsert = TRUE;
}
continue;
}
}
GlobalFree(lpItems);
return 0;
}
case WM_COMMAND:
{
switch(LOWORD(wParam))
{
case IDOK:
{
EndDialog(hWnd, IDOK);
return 0;
}
case IDC_CLEAR:
{
lpParam->lSelected = -1;
EndDialog(hWnd, IDOK);
return 0;
}
case IDCANCEL:
{
EndDialog(hWnd, IDCANCEL);
return 0;
}
}
return -1;
}
}
return 0;
}
BOOL TreeSelect(LPTREESELECT lpParam)
{
return DialogBoxParam(lpApp->hInstance, MAKEINTRESOURCE(IDD_TREE_SELECT), GetActiveWindow(), (DLGPROC)TreeSelectDlgProc, (LPARAM)lpParam) == IDOK;
}