1 // TreeItem.h : CTreeItem
\82Ì
\90é
\8c¾
6 #include "resource.h" //
\83\81\83C
\83\93 \83V
\83\93\83{
\83\8b
9 /////////////////////////////////////////////////////////////////////////////
11 class ATL_NO_VTABLE CTreeItem :
12 public CComObjectRootEx<CComSingleThreadModel>,
13 // public CComCoClass<CTreeItem, &CLSID_TreeItem>,
14 public ISupportErrorInfo,
15 public IDispatchImpl<ITreeItem, &IID_ITreeItem, &LIBID_SERAPHYSCRIPTTOOLSLib>
23 static BOOL DeleteTreeItemWithData(HWND hWnd,HTREEITEM hItem);
24 //DECLARE_REGISTRY_RESOURCEID(IDR_TREEITEM)
26 DECLARE_PROTECT_FINAL_CONSTRUCT()
28 BEGIN_COM_MAP(CTreeItem)
29 COM_INTERFACE_ENTRY(ITreeItem)
30 COM_INTERFACE_ENTRY(IDispatch)
31 COM_INTERFACE_ENTRY(ISupportErrorInfo)
35 STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);
39 STDMETHOD(IsValid)(/*[out,retval]*/BOOL* pResult);
40 static void CreateTreeItem(HWND hWnd,HTREEITEM hParent,LPCSTR text,IUnknown** punkVal);
43 HRESULT ret = InitialCheck();
46 TreeView_SortChildren(m_hWnd,m_hItem,0);
49 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
50 ret = DISP_E_EXCEPTION;
57 HRESULT ret = InitialCheck();
60 TreeView_Expand(m_hWnd,m_hItem,TVE_EXPAND);
63 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
64 ret = DISP_E_EXCEPTION;
71 HRESULT ret = InitialCheck();
74 TreeView_SelectItem(m_hWnd,m_hItem);
77 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
78 ret = DISP_E_EXCEPTION;
85 HRESULT ret = InitialCheck();
88 if(DeleteTreeItemWithData(m_hWnd,m_hItem)){
89 //
\8dí
\8f\9c\82É
\90¬
\8c÷
\82µ
\82½
\82ç
\81A
\82±
\82Ì
\83n
\83\93\83h
\83\8b\82ð
\96³
\8cø
\82É
\82·
\82é
95 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
96 ret = DISP_E_EXCEPTION;
101 STDMETHOD(Create)(/*[in]*/VARIANT text,/*[out,retval]*/IUnknown** punkVal)
103 //
\83A
\83C
\83e
\83\80\82Ì
\8dì
\90¬
105 HRESULT ret = InitialCheck();
110 if(str.ChangeType(VT_BSTR,&text) == S_OK){
111 int cnt = WideCharToMultiByte(GetACP(),0,str.bstrVal,-1,mes,MAX_PATH,NULL,NULL);
112 CreateTreeItem(m_hWnd,m_hItem,mes,punkVal);
116 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
117 ret = DISP_E_EXCEPTION;
122 STDMETHOD(get_Object)(/*[in,optional]*/VARIANT idx, /*[out, retval]*/ VARIANT *pVal)
124 //
\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é
126 HRESULT ret = InitialCheck();
128 ret = DISP_E_EXCEPTION;
132 itm.mask = TVIF_PARAM;
134 if(TreeView_GetItem(m_hWnd,&itm)){
135 IUnknown* pUnk = (IUnknown*)itm.lParam;
138 pVal->vt = VT_UNKNOWN;
139 pVal->punkVal = pUnk;
145 HRESULT InitialCheck()
147 //
\83E
\83B
\83\93\83h
\83E
\82ª
\97L
\8cø
\82©
\8c\9f\8d¸
\82·
\82é
148 if(m_hWnd && ::IsWindow(m_hWnd)){
151 ErrorInfo(IDS_ERR_TREEERROR);
152 return DISP_E_EXCEPTION;
154 STDMETHOD(get_Text)(/*[out, retval]*/ BSTR *pVal)
156 //
\83e
\83L
\83X
\83g
\82Ì
\8eæ
\93¾
157 HRESULT ret = InitialCheck();
159 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
160 ret = DISP_E_EXCEPTION;
165 itm.mask = TVIF_TEXT;
168 itm.cchTextMax = MAX_PATH;
169 if(TreeView_GetItem(m_hWnd,&itm)){
170 WCHAR wMes[MAX_PATH] = {0};
171 MultiByteToWideChar(GetACP(),0,text,-1,wMes,MAX_PATH);
172 *pVal = SysAllocString(wMes);
177 STDMETHOD(put_Text)(/*[in]*/ BSTR newVal)
179 //
\83e
\83L
\83X
\83g
\82Ì
\8f\91\82«
\8a·
\82¦
180 HRESULT ret = InitialCheck();
182 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
183 ret = DISP_E_EXCEPTION;
186 CHAR text[MAX_PATH] = {0};
188 itm.mask = TVIF_TEXT;
191 itm.cchTextMax = MAX_PATH;
192 WideCharToMultiByte(GetACP(),0,newVal,-1,text,MAX_PATH,NULL,NULL);
193 TreeView_SetItem(m_hWnd,&itm);
197 STDMETHOD(get_PrevItem)(/*[out, retval]*/ IUnknown* *pVal)
199 //
\91O
\82Ì
\83A
\83C
\83e
\83\80
201 HRESULT ret = InitialCheck();
203 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
204 ret = DISP_E_EXCEPTION;
207 HTREEITEM hNewItem = TreeView_GetPrevSibling(m_hWnd,m_hItem);
208 CComObject<CTreeItem>* pItem = NULL;
209 if(pItem->CreateInstance(&pItem) == S_OK){
210 pItem->SetParam(m_hWnd,hNewItem);
211 ret = pItem->QueryInterface(IID_IUnknown,(void**)pVal);
216 STDMETHOD(get_NextItem)(/*[out, retval]*/ IUnknown* *pVal)
218 //
\8e\9f\82Ì
\83A
\83C
\83e
\83\80
220 HRESULT ret = InitialCheck();
222 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
223 ret = DISP_E_EXCEPTION;
226 HTREEITEM hNewItem = TreeView_GetNextSibling(m_hWnd,m_hItem);
227 CComObject<CTreeItem>* pItem = NULL;
228 if(pItem->CreateInstance(&pItem) == S_OK){
229 pItem->SetParam(m_hWnd,hNewItem);
230 ret = pItem->QueryInterface(IID_IUnknown,(void**)pVal);
235 STDMETHOD(get_ChildItem)(/*[out, retval]*/ IUnknown* *pVal)
237 //
\8eq
\83A
\83C
\83e
\83\80
239 HRESULT ret = InitialCheck();
241 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
242 ret = DISP_E_EXCEPTION;
245 HTREEITEM hNewItem = TreeView_GetChild(m_hWnd,m_hItem);
246 CComObject<CTreeItem>* pItem = NULL;
247 if(pItem->CreateInstance(&pItem) == S_OK){
248 pItem->SetParam(m_hWnd,hNewItem);
249 ret = pItem->QueryInterface(IID_IUnknown,(void**)pVal);
254 STDMETHOD(get_Parent)(/*[out, retval]*/ IUnknown* *pVal)
256 //
\90e
\83A
\83C
\83e
\83\80
258 HRESULT ret = InitialCheck();
260 //
\95s
\90³
\82È
\83A
\83C
\83e
\83\80\82ð
\8eQ
\8fÆ
\82µ
\82Ä
\82¢
\82é
261 ret = DISP_E_EXCEPTION;
264 HTREEITEM hNewItem = TreeView_GetParent(m_hWnd,m_hItem);
265 CComObject<CTreeItem>* pItem = NULL;
266 if(pItem->CreateInstance(&pItem) == S_OK){
267 pItem->SetParam(m_hWnd,hNewItem);
268 ret = pItem->QueryInterface(IID_IUnknown,(void**)pVal);
274 void SetParam(HWND hWnd,HTREEITEM hItem)
284 #endif //__TREEITEM_H_