|
|
#ifndef _TREEVIEWWINDOW
#define _TREEVIEWWINDOW
#include "stdafx.h"
#include "CWindow.h"
extern WNDPROC gTreeViewWndSysWndProc;
class CTreeViewWnd { private:
public: HWND m_hWnd;
//
// Revisit this in the future!, static variable here, would be better than
// using a global, to store the OldWindowProc value.
//
// static WNDPROC OldWindowProc;
CTreeViewWnd( HWND hWnd ) : m_hWnd(hWnd) { }
~CTreeViewWnd(void) {
}
static BOOL RegisterClass( HINSTANCE hInstance, LPCTSTR pszClassName) { WNDCLASSEX wcex; ZeroMemory(&wcex,sizeof(wcex)); wcex.cbSize = sizeof(wcex); if (!GetClassInfoEx( hInstance, pszClassName, &wcex )) { ZeroMemory(&wcex,sizeof(wcex)); wcex.cbSize = sizeof(wcex); wcex.style = 0; wcex.lpfnWndProc = TreeViewWndProc; wcex.cbClsExtra = 0; wcex.cbWndExtra = 0; wcex.hInstance = hInstance; wcex.hIcon = 0; wcex.hCursor = ::LoadCursor(NULL, IDC_ARROW); wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1); wcex.lpszMenuName = NULL; wcex.lpszClassName = pszClassName; wcex.hIconSm = 0; if (!::RegisterClassEx(&wcex)) { return FALSE; } return TRUE; } return TRUE; }
static HWND Create( LPCTSTR lpWindowName, LPCTSTR lpWindowClassName, DWORD dwStyle, DWORD dwExStyle, int x, int y, int nWidth, int nHeight, HWND hWndParent, HMENU hMenu, HINSTANCE hInstance) {
//
// register the window class
//
if (RegisterClass( hInstance, lpWindowClassName)) { HWND hWnd = CreateWindowEx(dwExStyle, lpWindowClassName, lpWindowName, dwStyle, x, y, nWidth, nHeight, hWndParent, hMenu, hInstance, NULL ); SetWindowLongPtr(hWnd,GWLP_USERDATA,NULL);
gTreeViewWndSysWndProc = (WNDPROC)SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG)(LONG_PTR)TreeViewWndProc); return hWnd;
} else { Trace(TEXT("RegisterClass failed, GetLastError() reported %d"),GetLastError()); return NULL; } }
//
// Public members
//
VOID SetWindowHandle(HWND hWnd); HTREEITEM InsertItem (LPTVINSERTSTRUCT lpInsertStruct ); HIMAGELIST SetImageList(HIMAGELIST hImageList, INT iImage);
//
// windows message handlers
//
LRESULT OnPaint ( WPARAM wParam, LPARAM lParam ); LRESULT OnDestroy ( WPARAM wParam, LPARAM lParam ); LRESULT OnCreate ( WPARAM wParam, LPARAM lParam ); LPARAM OnSize ( WPARAM wParam, LPARAM lParam ); LRESULT OnSizing ( WPARAM wParam, LPARAM lParam ); LPARAM OnSetFocus( WPARAM wParam, LPARAM lParam ); LRESULT OnCommand ( WPARAM wParam, LPARAM lParam ); LRESULT OnRButtonDown(WPARAM wParam, LPARAM lParam); LRESULT OnParentResize(WPARAM wParam, LPARAM lParam);
static LRESULT CALLBACK TreeViewWndProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { //Trace(TEXT("Messages to TreeViewWnd\nhWnd = %p, uMsg = %d, wParam = %x, lParam = %x"), hWnd, uMsg, wParam, lParam);
SC_BEGIN_MESSAGE_HANDLERS(CTreeViewWnd) { SC_HANDLE_MESSAGE( WM_RBUTTONDOWN, OnRButtonDown); SC_HANDLE_MESSAGE(WM_PARENT_WM_SIZE, OnParentResize); SC_HANDLE_MESSAGE_DEFAULT_TREEVIEW(); } SC_END_MESSAGE_HANDLERS(); } };
#endif
|