You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
180 lines
4.5 KiB
180 lines
4.5 KiB
//--------------------------------------------------------------------------
|
|
//
|
|
// treeview.cpp
|
|
//
|
|
//--------------------------------------------------------------------------
|
|
|
|
#include <windows.h>
|
|
#include <commctrl.h>
|
|
#include "resource.h"
|
|
#include "treeview.h"
|
|
#include <stdlib.h>
|
|
|
|
extern HINSTANCE g_hInst;
|
|
extern int g_InsSettingsOpen, g_InsSettingsClose, g_InsLeafItem, g_PolicyOpen, g_PolicyClose;
|
|
|
|
CTreeView::CTreeView()
|
|
{
|
|
InitCommonControls();
|
|
}
|
|
|
|
CTreeView::~CTreeView()
|
|
{
|
|
|
|
}
|
|
|
|
void CTreeView::Create(HWND hwndParent, int x, int y, int nWidth, int nHeight)
|
|
{
|
|
hTreeView = CreateWindowEx(WS_EX_CLIENTEDGE , WC_TREEVIEW, TEXT("Tree View"),
|
|
WS_VISIBLE | WS_CHILD | WS_BORDER | WS_TABSTOP | TVS_HASLINES | TVS_LINESATROOT | TVS_HASBUTTONS | TVS_SHOWSELALWAYS,
|
|
x, y, nWidth, nHeight, hwndParent, NULL, g_hInst, NULL);
|
|
}
|
|
|
|
HTREEITEM CTreeView::AddItem(LPTSTR lpszItem, HTREEITEM hParentItem)
|
|
{
|
|
TV_ITEM tvi;
|
|
TV_INSERTSTRUCT tvins;
|
|
char szTmp[MAX_PATH];
|
|
HTREEITEM hItem;
|
|
|
|
tvi.mask = TVIF_TEXT;
|
|
|
|
tvi.pszText = lpszItem;
|
|
tvi.cchTextMax = lstrlen(lpszItem);
|
|
tvins.item = tvi;
|
|
tvins.hInsertAfter = TVI_LAST;
|
|
|
|
if(hParentItem == NULL)
|
|
{
|
|
tvins.item.mask |= TVIF_STATE | TVIF_IMAGE | TVIF_SELECTEDIMAGE;
|
|
tvins.item.stateMask = tvins.item.state = TVIS_BOLD;
|
|
if(lstrcmp(lpszItem, TEXT("Ins Settings")) == 0)
|
|
{
|
|
tvins.item.iImage = tvins.item.iSelectedImage = g_InsSettingsClose;
|
|
}
|
|
else
|
|
{
|
|
tvins.item.iImage = tvins.item.iSelectedImage = g_PolicyClose;
|
|
}
|
|
tvins.hParent = TVI_ROOT;
|
|
}
|
|
else
|
|
{
|
|
tvins.item.mask |= TVIF_IMAGE | TVIF_SELECTEDIMAGE;
|
|
tvins.hParent = hParentItem;
|
|
tvins.item.iImage = tvins.item.iSelectedImage = g_InsLeafItem;
|
|
}
|
|
|
|
hItem = (HTREEITEM) SendMessage(hTreeView, TVM_INSERTITEM, 0,
|
|
(LPARAM)(LPTV_INSERTSTRUCT) &tvins);
|
|
|
|
return hItem;
|
|
}
|
|
|
|
void CTreeView::MoveWindow(int x, int y, int nWidth, int nHeight)
|
|
{
|
|
::MoveWindow(hTreeView, x, y, nWidth, nHeight, TRUE);
|
|
}
|
|
|
|
void CTreeView::SetSel(HTREEITEM hItem)
|
|
{
|
|
SendMessage(hTreeView, TVM_SELECTITEM, (WPARAM) TVGN_CARET,
|
|
(LPARAM) hItem);
|
|
}
|
|
|
|
HTREEITEM CTreeView::GetSel()
|
|
{
|
|
return TreeView_GetSelection(hTreeView);
|
|
}
|
|
|
|
void CTreeView::GetItemText(HTREEITEM hItem, LPTSTR szItemText, int nSize)
|
|
{
|
|
TV_ITEM item;
|
|
|
|
item.mask = TVIF_TEXT;
|
|
item.pszText = szItemText;
|
|
item.cchTextMax = nSize;
|
|
item.hItem = hItem;
|
|
|
|
SendMessage(hTreeView, TVM_GETITEM, 0, (LPARAM) &item);
|
|
}
|
|
|
|
HWND CTreeView::GetHandle()
|
|
{
|
|
return hTreeView;
|
|
}
|
|
|
|
void CTreeView::DeleteNodes(HTREEITEM hParentItem)
|
|
{
|
|
HTREEITEM hItem = TreeView_GetChild(hTreeView, hParentItem);
|
|
HTREEITEM hNextItem = NULL;
|
|
|
|
while(hItem != NULL) // if items present
|
|
{
|
|
hNextItem = TreeView_GetNextSibling(hTreeView, hItem); // get next item
|
|
TreeView_DeleteItem(hTreeView, hItem);
|
|
hItem = hNextItem;
|
|
}
|
|
}
|
|
|
|
void CTreeView::CollapseChildNodes(HTREEITEM hParentItem)
|
|
{
|
|
NMTREEVIEW NMTreeView;
|
|
HTREEITEM hItem;
|
|
TVITEM tvitem;
|
|
|
|
ZeroMemory(&NMTreeView, sizeof(NMTreeView));
|
|
NMTreeView.hdr.hwndFrom = hTreeView;
|
|
NMTreeView.hdr.code = TVN_ITEMEXPANDED;
|
|
NMTreeView.action = TVE_COLLAPSE;
|
|
|
|
hItem = (hParentItem != NULL) ? TreeView_GetChild(hTreeView, hParentItem) :
|
|
TreeView_GetRoot(hTreeView);
|
|
while (hItem != NULL)
|
|
{
|
|
NMTreeView.itemNew.hItem = hItem;
|
|
|
|
TreeView_Expand(hTreeView, hItem, TVE_COLLAPSE);
|
|
SendMessage(GetParent(hTreeView), WM_NOTIFY, 0, (LPARAM)&NMTreeView);
|
|
|
|
hItem = TreeView_GetNextSibling(hTreeView, hItem); // get next item
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------------------------------
|
|
// CStatusWindow member functions
|
|
|
|
CStatusWindow::CStatusWindow()
|
|
{
|
|
hStatusWindow = NULL;
|
|
nHeight = 0;
|
|
}
|
|
|
|
CStatusWindow::~CStatusWindow()
|
|
{
|
|
}
|
|
|
|
void CStatusWindow::Create(HWND hwndParent, int nCtlID)
|
|
{
|
|
RECT r;
|
|
|
|
hStatusWindow = CreateStatusWindow(WS_CHILD | WS_VISIBLE,TEXT("Ready"), hwndParent, nCtlID);
|
|
|
|
GetWindowRect(hStatusWindow, &r);
|
|
nHeight = r.bottom - r.top;
|
|
}
|
|
|
|
void CStatusWindow::Size(int nWidth)
|
|
{
|
|
SendMessage(hStatusWindow, WM_SIZE, 0, MAKELPARAM(nWidth, nHeight));
|
|
}
|
|
|
|
void CStatusWindow::SetText(LPTSTR szText)
|
|
{
|
|
SendMessage(hStatusWindow, WM_SETTEXT, 0, (LPARAM) szText);
|
|
}
|
|
|
|
int CStatusWindow::Height() const
|
|
{
|
|
return nHeight;
|
|
}
|