1 // TreeItem.cpp : CTreeItem
\82Ì
\83C
\83\93\83v
\83\8a\83\81\83\93\83e
\81[
\83V
\83\87\83\93
3 #include "SeraphyScriptTools.h"
10 /////////////////////////////////////////////////////////////////////////////
13 BOOL CTreeItem::DeleteTreeItemWithData(HWND hWnd, HTREEITEM hItem)
15 HTREEITEM hRoot = hItem;
16 std::list<HTREEITEM> lst;
18 while (!lst.empty()) {
22 HTREEITEM hChild = TreeView_GetChild(hWnd, hItem);
24 //
\8eq
\83O
\83\8b\81[
\83v
\82ð
\8c\9f\8d¸
\82·
\82é
\82æ
\82¤
\82É
\83X
\83^
\83b
\83N
\82·
\82é
25 lst.push_back(hChild);
27 //
\82±
\82Ì
\83A
\83C
\83e
\83\80\82É
\8aÖ
\98A
\82Ã
\82¯
\82ç
\82ê
\82½
\83I
\83u
\83W
\83F
\83N
\83g
\82ð
\89ð
\95ú
\82·
\82é
29 itm.mask = TVIF_PARAM;
31 if (TreeView_GetItem(hWnd, &itm) && itm.lParam) {
32 IUnknown* pUnk = (IUnknown*)itm.lParam;
35 TreeView_SetItem(hWnd, &itm);
37 //
\82Â
\82¬
\82Ì
\83A
\83C
\83e
\83\80\82ð
\92T
\82·
39 //
\8aJ
\8en
\88Ê
\92u
\82Ì
\8cZ
\92í
\82Í
\92T
\82µ
\82Ä
\82Í
\82È
\82ç
\82È
\82¢
43 hItem = TreeView_GetNextSibling(hWnd, hItem);
47 TreeView_DeleteItem(hWnd, hRoot);
52 *
\83c
\83\8a\81[
\83A
\83C
\83e
\83\80\82ð
\95Û
\8e\9d\82·
\82é
\83I
\83u
\83W
\83F
\83N
\83g
\82ð
\90¶
\90¬
\82µ
\82Ä
\95Ô
\82·.
53 * IUnknown
\82Í
\8eQ
\8fÆ
\83J
\83E
\83\93\83g1
\82É
\90Ý
\92è
\82³
\82ê
\82Ä
\82¢
\82é
\82½
\82ß
\81A
\8cÄ
\82Ñ
\8fo
\82µ
\91¤
\82ÅRelease
\82ª
\95K
\97v.
55 HRESULT CTreeItem::CreateTreeItem(HWND hWnd, HTREEITEM hParent, LPCTSTR text, IUnknown **punkVal)
62 //
\83A
\83C
\83e
\83\80\82ª
\95Û
\97L
\82·
\82é
\98A
\91z
\94z
\97ñ
\82ð
\90¶
\90¬
\82·
\82é
66 CComObject<CObjectMap>* pMap = NULL;
67 if (FAILED(hr = CComObject<CObjectMap>::CreateInstance(&pMap))) {
70 CComPtr<IUnknown> pMapUnk;
71 if (FAILED(hr = pMap->QueryInterface(&pMapUnk))) {
76 //
\91}
\93ü
\82·
\82é
\83A
\83C
\83e
\83\80\82Ì
\92è
\8b`
77 ATL::CString tmp(text);
78 TVINSERTSTRUCT is = {0};
80 is.hInsertAfter = TVI_LAST;
81 is.item.mask = TVIF_TEXT | TVIF_PARAM;
82 is.item.pszText = tmp.GetBuffer();
83 is.item.cchTextMax = tmp.GetLength();
85 IUnknown* pUnk = NULL;
86 if (FAILED(hr = pMapUnk.CopyTo(&pUnk))) {
89 is.item.lParam = (LPARAM)pUnk;
91 HTREEITEM hNewItem = TreeView_InsertItem(hWnd, &is);
93 //
\93o
\98^
\82³
\82ê
\82È
\82©
\82Á
\82½
\8fê
\8d\87\82Í
\83^
\83O
\83A
\83C
\83e
\83\80\82É
\8aÖ
\98A
\82Ã
\82¯
\82½pUnk
\82ð
\89ð
\95ú
\82·
\82é
95 return E_FAIL; //
\95s
\96¾
\82È
\83G
\83\89\81[
98 //
\83A
\83C
\83e
\83\80\82Ö
\82Ì
\83I
\83u
\83W
\83F
\83N
\83g
\82ð
\8dì
\90¬
\82·
\82é
99 CComObject<CTreeItem>* pItem = NULL;
100 if (FAILED(hr = CComObject<CTreeItem>::CreateInstance(&pItem))) {
103 pItem->SetParam(hWnd, hNewItem);
105 if (FAILED(hr = pItem->QueryInterface(punkVal))) {
112 STDMETHODIMP CTreeItem::IsValid(BOOL *pResult)
118 *pResult = (m_hItem != NULL) ? VB_TRUE : VB_FALSE;
123 STDMETHODIMP CTreeItem::Sort()
125 HRESULT ret = InitialCheck();
128 TreeView_SortChildren(m_hWnd, m_hItem, 0);
131 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
132 ret = DISP_E_EXCEPTION;
138 STDMETHODIMP CTreeItem::Expand()
140 HRESULT ret = InitialCheck();
143 TreeView_Expand(m_hWnd, m_hItem, TVE_EXPAND);
146 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
147 ret = DISP_E_EXCEPTION;
153 STDMETHODIMP CTreeItem::Select()
155 HRESULT ret = InitialCheck();
158 TreeView_SelectItem(m_hWnd, m_hItem);
161 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
162 ret = DISP_E_EXCEPTION;
168 STDMETHODIMP CTreeItem::Erase()
170 HRESULT ret = InitialCheck();
173 if (DeleteTreeItemWithData(m_hWnd, m_hItem)) {
174 //
\8dí
\8f\9c\82É
\90¬
\8c÷
\82µ
\82½
\82ç
\81A
\82±
\82Ì
\83n
\83\93\83h
\83\8b\82ð
\96³
\8cø
\82É
\82·
\82é
180 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
181 ret = DISP_E_EXCEPTION;
187 STDMETHODIMP CTreeItem::Create(/*[in]*/VARIANT text,/*[out,retval]*/IUnknown** punkVal)
189 //
\83A
\83C
\83e
\83\80\82Ì
\8dì
\90¬
191 HRESULT ret = InitialCheck();
198 ATL::CString mes(_TEXT(""));
199 if (str.ChangeType(VT_BSTR, &text) == S_OK) {
202 CreateTreeItem(m_hWnd, m_hItem, mes, punkVal);
205 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
206 return DISP_E_EXCEPTION;
209 STDMETHODIMP CTreeItem::get_Object(/*[in,optional]*/VARIANT idx, /*[out, retval]*/ VARIANT *pVal)
211 //
\83A
\83C
\83e
\83\80\82É
\8aÖ
\98A
\95t
\82¯
\82ç
\82ê
\82½
\98A
\91z
\94z
\97ñ
\83I
\83u
\83W
\83F
\83N
\83g
\82ð
\8eæ
\93¾
\82·
\82é
213 HRESULT ret = InitialCheck();
215 ret = DISP_E_EXCEPTION;
219 itm.mask = TVIF_PARAM;
221 if (TreeView_GetItem(m_hWnd, &itm)) {
222 IUnknown* pUnk = (IUnknown*)itm.lParam;
225 pVal->vt = VT_UNKNOWN;
226 pVal->punkVal = pUnk;
233 HRESULT CTreeItem::InitialCheck()
235 //
\83E
\83B
\83\93\83h
\83E
\82ª
\97L
\8cø
\82©
\8c\9f\8d¸
\82·
\82é
236 if (m_hWnd && ::IsWindow(m_hWnd)) {
239 return Error(IDS_ERR_TREEERROR);
242 STDMETHODIMP CTreeItem::get_Text(/*[out, retval]*/ BSTR *pVal)
244 //
\83e
\83L
\83X
\83g
\82Ì
\8eæ
\93¾
246 if (FAILED(hr = InitialCheck())) {
250 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
251 return DISP_E_EXCEPTION;
254 TCHAR text[MAX_PATH] = {0};
256 itm.mask = TVIF_TEXT;
259 itm.cchTextMax = MAX_PATH;
260 if (TreeView_GetItem(m_hWnd, &itm)) {
262 *pVal = ret.Detach();
267 STDMETHODIMP CTreeItem::put_Text(/*[in]*/ BSTR newVal)
269 //
\83e
\83L
\83X
\83g
\82Ì
\8f\91\82«
\8a·
\82¦
271 if (FAILED(hr = InitialCheck())) {
275 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
276 return DISP_E_EXCEPTION;
279 ATL::CString tmp(newVal);
281 itm.mask = TVIF_TEXT;
283 itm.pszText = tmp.GetBuffer();
284 itm.cchTextMax = tmp.GetLength(); // Set
\82Ì
\8fê
\8d\87\82Í
\96³
\8e\8b\82³
\82ê
\82é
285 TreeView_SetItem(m_hWnd, &itm);
289 STDMETHODIMP CTreeItem::get_PrevItem(/*[out, retval]*/ IUnknown* *pVal)
291 //
\91O
\82Ì
\83A
\83C
\83e
\83\80
295 if (FAILED(hr = InitialCheck())) {
300 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
301 return DISP_E_EXCEPTION;
304 CComObject<CTreeItem>* pItem = NULL;
305 if (FAILED(hr = CComObject<CTreeItem>::CreateInstance(&pItem))) {
309 HTREEITEM hNewItem = TreeView_GetPrevSibling(m_hWnd, m_hItem);
310 pItem->SetParam(m_hWnd, hNewItem);
312 return pItem->QueryInterface(IID_IUnknown, (void**)pVal);
315 STDMETHODIMP CTreeItem::get_NextItem(/*[out, retval]*/ IUnknown* *pVal)
317 //
\8e\9f\82Ì
\83A
\83C
\83e
\83\80
321 if (FAILED(hr = InitialCheck())) {
326 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
327 return DISP_E_EXCEPTION;
330 CComObject<CTreeItem>* pItem = NULL;
331 if (FAILED(hr = CComObject<CTreeItem>::CreateInstance(&pItem))) {
335 HTREEITEM hNewItem = TreeView_GetNextSibling(m_hWnd, m_hItem);
336 pItem->SetParam(m_hWnd, hNewItem);
338 return pItem->QueryInterface(IID_IUnknown, (void**)pVal);
341 STDMETHODIMP CTreeItem::get_ChildItem(/*[out, retval]*/ IUnknown* *pVal)
343 //
\8eq
\83A
\83C
\83e
\83\80
347 if (FAILED(hr = InitialCheck())) {
352 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
353 return DISP_E_EXCEPTION;
356 CComObject<CTreeItem>* pItem = NULL;
357 if (FAILED(hr = CComObject<CTreeItem>::CreateInstance(&pItem))) {
361 HTREEITEM hNewItem = TreeView_GetChild(m_hWnd, m_hItem);
362 pItem->SetParam(m_hWnd, hNewItem);
364 return pItem->QueryInterface(IID_IUnknown, (void**)pVal);
367 STDMETHODIMP CTreeItem::get_Parent(/*[out, retval]*/ IUnknown* *pVal)
369 //
\90e
\83A
\83C
\83e
\83\80
373 if (FAILED(hr = InitialCheck())) {
378 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
379 return DISP_E_EXCEPTION;
382 CComObject<CTreeItem>* pItem = NULL;
383 if (FAILED(hr = CComObject<CTreeItem>::CreateInstance(&pItem))) {
387 HTREEITEM hNewItem = TreeView_GetParent(m_hWnd, m_hItem);
388 pItem->SetParam(m_hWnd, hNewItem);
390 return pItem->QueryInterface(IID_IUnknown, (void**)pVal);
394 void CTreeItem::SetParam(HWND hWnd, HTREEITEM hItem)