Leaked source code of windows server 2003
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

//--------------------------------------------------------------------------
//
// 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;
}