mirror of
https://github.com/jpd002/Play-.git
synced 2025-04-29 14:07:58 +03:00
164 lines
3.7 KiB
C++
164 lines
3.7 KiB
C++
#include "OptionWnd.h"
|
|
#include "PtrMacro.h"
|
|
#include "win32/LayoutWindow.h"
|
|
#include "win32/MDIChild.h"
|
|
|
|
#define CLSNAME _T("OptionWindow")
|
|
#define WNDSTYLE (WS_THICKFRAME | WS_CAPTION | WS_SYSMENU | WS_CHILD | WS_MAXIMIZEBOX | WS_CLIPCHILDREN)
|
|
|
|
using namespace Framework;
|
|
|
|
template <typename T>
|
|
COptionWnd<T>::COptionWnd(HWND hParent, const TCHAR* sTitle)
|
|
{
|
|
RECT rc;
|
|
|
|
if(!DoesWindowClassExist(CLSNAME))
|
|
{
|
|
WNDCLASSEX wc;
|
|
memset(&wc, 0, sizeof(WNDCLASSEX));
|
|
wc.cbSize = sizeof(WNDCLASSEX);
|
|
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
|
wc.hbrBackground = (HBRUSH)(COLOR_WINDOW);
|
|
wc.hInstance = GetModuleHandle(NULL);
|
|
wc.lpszClassName = CLSNAME;
|
|
wc.lpfnWndProc = CWindow::WndProc;
|
|
RegisterClassEx(&wc);
|
|
}
|
|
|
|
SetRect(&rc, 0, 0, 640, 480);
|
|
|
|
Create(NULL, CLSNAME, sTitle, WNDSTYLE, &rc, hParent, NULL);
|
|
SetClassPtr();
|
|
|
|
SetRect(&rc, 0, 0, 1, 1);
|
|
|
|
m_pTreeView = NULL;
|
|
m_pTreeView = new Win32::CTreeView(m_hWnd, &rc, TVS_LINESATROOT | TVS_HASBUTTONS | TVS_SHOWSELALWAYS | TVS_HASLINES);
|
|
m_pContainer = new Win32::CStatic(m_hWnd, &rc);
|
|
|
|
m_pLayout = CHorizontalLayout::Create();
|
|
m_pLayout->InsertObject(Win32::CLayoutWindow::CreateCustomBehavior(25, 20, 1, 0, m_pTreeView, false));
|
|
m_pLayout->InsertObject(Win32::CLayoutWindow::CreateCustomBehavior(75, 20, 3, 0, m_pContainer));
|
|
|
|
RefreshLayout();
|
|
}
|
|
|
|
template <typename T>
|
|
COptionWnd<T>::~COptionWnd()
|
|
{
|
|
|
|
}
|
|
|
|
template <typename T>
|
|
long COptionWnd<T>::OnNotify(WPARAM wParam, NMHDR* pH)
|
|
{
|
|
if(m_pTreeView != NULL)
|
|
{
|
|
if(pH->hwndFrom == m_pTreeView->m_hWnd)
|
|
{
|
|
NMTREEVIEW* pN;
|
|
pN = (NMTREEVIEW*)pH;
|
|
switch(pN->hdr.code)
|
|
{
|
|
case TVN_SELCHANGED:
|
|
UpdatePanel(&pN->itemNew, &pN->itemOld);
|
|
return FALSE;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
template <typename T>
|
|
long COptionWnd<T>::OnSize(unsigned int nType, unsigned int nX, unsigned int nY)
|
|
{
|
|
RefreshLayout();
|
|
return TRUE;
|
|
}
|
|
|
|
template <typename T>
|
|
Win32::CWindow* COptionWnd<T>::GetContainer()
|
|
{
|
|
return m_pContainer;
|
|
}
|
|
|
|
template <typename T>
|
|
Win32::CTreeView* COptionWnd<T>::GetTreeView()
|
|
{
|
|
return m_pTreeView;
|
|
}
|
|
|
|
template <typename T>
|
|
void COptionWnd<T>::RefreshLayout()
|
|
{
|
|
TVITEM it;
|
|
HTREEITEM hItem;
|
|
RECT rc;
|
|
GetClientRect(&rc);
|
|
|
|
m_pLayout->SetRect(rc.left, rc.top, rc.right, rc.bottom);
|
|
m_pLayout->RefreshGeometry();
|
|
|
|
hItem = m_pTreeView->GetSelection();
|
|
if(hItem != NULL)
|
|
{
|
|
it.mask = TVIF_PARAM;
|
|
m_pTreeView->GetItem(hItem, &it);
|
|
ResizePanel((HWND)it.lParam);
|
|
}
|
|
|
|
Redraw();
|
|
}
|
|
|
|
template <typename T>
|
|
void COptionWnd<T>::ResizePanel(HWND hPanel)
|
|
{
|
|
RECT rc;
|
|
if(hPanel == NULL) return;
|
|
m_pContainer->GetClientRect(&rc);
|
|
SetWindowPos(hPanel, NULL, 0, 0, rc.right, rc.bottom, SWP_NOMOVE | SWP_NOZORDER);
|
|
UpdateWindow(hPanel);
|
|
}
|
|
|
|
template <typename T>
|
|
void COptionWnd<T>::UpdatePanel(TVITEM* pNew, TVITEM* pOld)
|
|
{
|
|
HWND hNew, hOld;
|
|
hNew = (HWND)pNew->lParam;
|
|
hOld = (HWND)pOld->lParam;
|
|
if(hOld != NULL)
|
|
{
|
|
ShowWindow(hOld, SW_HIDE);
|
|
EnableWindow(hOld, FALSE);
|
|
}
|
|
if(hNew != NULL)
|
|
{
|
|
ResizePanel(hNew);
|
|
EnableWindow(hNew, TRUE);
|
|
ShowWindow(hNew, SW_SHOW);
|
|
}
|
|
}
|
|
|
|
template <typename T>
|
|
HTREEITEM COptionWnd<T>::InsertOption(HTREEITEM hParent, const TCHAR* sName, HWND hWnd)
|
|
{
|
|
TVINSERTSTRUCT s;
|
|
s.hParent = hParent;
|
|
s.hInsertAfter = TVI_LAST;
|
|
s.item.pszText = (LPTSTR)sName;
|
|
s.item.lParam = (LPARAM)hWnd;
|
|
s.item.mask = TVIF_TEXT | TVIF_PARAM;
|
|
return m_pTreeView->InsertItem(&s);
|
|
}
|
|
|
|
template <typename T>
|
|
void COptionWnd<T>::DeleteAllOptions()
|
|
{
|
|
m_pTreeView->DeleteAllItems();
|
|
}
|
|
|
|
template class COptionWnd<Framework::Win32::CWindow>;
|
|
template class COptionWnd<Framework::Win32::CMDIChild>;
|