windows-nt/Source/XPSP1/NT/printscan/wia/test/propview/treeviewwnd.h
2020-09-26 16:20:57 +08:00

137 lines
4.2 KiB
C++

#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