DragonNest/Client/EtViewer/TreeCtrlEx.cpp
2024-12-19 09:48:26 +08:00

111 lines
2.5 KiB
C++

// TreeCtrlEx.cpp : implementation file
//
#include "stdafx.h"
#include "TreeCtrlEx.h"
#include "resource.h"
#include "UserMessage.h"
// CTreeCtrlEx
IMPLEMENT_DYNAMIC(CTreeCtrlEx, CXTTreeCtrl)
CTreeCtrlEx::CTreeCtrlEx()
{
m_imageState.Create( IDB_CHECKIMAGE, 16, 1, RGB( 255, 255, 255 ) );
}
CTreeCtrlEx::~CTreeCtrlEx()
{
}
BEGIN_MESSAGE_MAP(CTreeCtrlEx, CXTTreeCtrl)
ON_NOTIFY_REFLECT(NM_CUSTOMDRAW, OnNMCustomdraw)
ON_WM_DRAWITEM()
ON_WM_CREATE()
ON_WM_KEYDOWN()
ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()
// CTreeCtrlEx message handlers
void CTreeCtrlEx::OnNMCustomdraw(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
// TODO: Add your control notification handler code here
*pResult = 0;
}
void CTreeCtrlEx::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct)
{
// TODO: Add your message handler code here and/or call default
CXTTreeCtrl::OnDrawItem(nIDCtl, lpDrawItemStruct);
}
int CTreeCtrlEx::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CXTTreeCtrl::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
return 0;
}
void CTreeCtrlEx::Activate()
{
SetImageList( &m_imageState, TVSIL_STATE );
}
void CTreeCtrlEx::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
if( nChar == VK_SPACE )
{
HTREEITEM hti = GetSelectedItem();
int iImage = GetItemState( hti, TVIS_STATEIMAGEMASK )>>12;
if( iImage == 0 ) return;
SetItemState( hti, INDEXTOSTATEIMAGEMASK(iImage == 1 ? 2 : 1),
TVIS_STATEIMAGEMASK );
BOOL bCheck = ( iImage == 1 ) ? TRUE : FALSE;
GetParent()->SendMessage( UM_TREEEX_UPDATECHECK, (WPARAM)hti, (LPARAM)bCheck );
return;
}
CXTTreeCtrl::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CTreeCtrlEx::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
UINT uFlags=0;
HTREEITEM hti = HitTest(point,&uFlags);
if( uFlags & TVHT_ONITEMSTATEICON )
{
int iImage = GetItemState( hti, TVIS_STATEIMAGEMASK )>>12;
if( iImage == 0 ) return;
SetItemState( hti, INDEXTOSTATEIMAGEMASK(iImage == 1 ? 2 : 1),
TVIS_STATEIMAGEMASK );
BOOL bCheck = ( iImage == 1 ) ? TRUE : FALSE;
GetParent()->SendMessage( UM_TREEEX_UPDATECHECK, (WPARAM)hti, (LPARAM)bCheck );
return;
}
CXTTreeCtrl::OnLButtonDown(nFlags, point);
}
BOOL CTreeCtrlEx::IsItemChecked(HTREEITEM hItem)
{
return GetItemState( hItem, TVIS_STATEIMAGEMASK ) >> 12 == 2;
}