[!if=(FileExists, "FALSE")] #include "stdafx.h" #include "[!ProjectName].h" #include "[!HeaderName]" [!else] [!AddIncludeFile(TargetFile, "stdafx.h")] [!AddStringToSymbol(ProjectName.h, ProjectName, ".h")] [!AddIncludeFile(TargetFile, ProjectName.h)] [!AddIncludeFile(TargetFile, HeaderName)] [!endif] [!crlf] ///////////////////////////////////////////////////////////////////////////// // [!ClassName]ComponentData [!if=(IComponentData, "TRUE")] static const GUID [!ClassName]GUID_NODETYPE = [!SnapInNodeType_GUIDFMT]; const GUID* [!ClassName]Data::m_NODETYPE = &[!ClassName]GUID_NODETYPE; const OLECHAR* [!ClassName]Data::m_SZNODETYPE = OLESTR("[!SnapInNodeType]"); const OLECHAR* [!ClassName]Data::m_SZDISPLAY_NAME = OLESTR("[!ShortName]"); const CLSID* [!ClassName]Data::m_SNAPIN_CLASSID = &CLSID_[!CoClassName]; [!crlf] [!endif] [!if=(EXTENSIONSNAPIN, "TRUE")] static const GUID [!ClassName]ExtGUID_NODETYPE = [!EXTENDSNODE_GUIDFMT]; const GUID* [!ClassName]ExtData::m_NODETYPE = &[!ClassName]ExtGUID_NODETYPE; const OLECHAR* [!ClassName]ExtData::m_SZNODETYPE = OLESTR("[!EXTENDSNODE]"); const OLECHAR* [!ClassName]ExtData::m_SZDISPLAY_NAME = OLESTR("[!ShortName]"); const CLSID* [!ClassName]ExtData::m_SNAPIN_CLASSID = &CLSID_[!CoClassName]; [!endif] [!if=(IComponentData, "TRUE")] [!if=(IExtendPropertySheet, "TRUE)] HRESULT [!ClassName]Data::CreatePropertyPages(LPPROPERTYSHEETCALLBACK lpProvider, long handle, IUnknown* pUnk, DATA_OBJECT_TYPES type) { if (type == CCT_SCOPE || type == CCT_RESULT) { [!ClassName]Page* pPage = new [!ClassName]Page(handle, true, _T("[!ShortName]")); lpProvider->AddPage(pPage->Create()); // The second parameter to the property page class constructor // should be true for only one page. [!crlf] // TODO : Add code here to add additional pages return S_OK; } return E_UNEXPECTED; } [!crlf] [!endif] HRESULT [!ClassName]Data::GetScopePaneInfo(SCOPEDATAITEM *pScopeDataItem) { if (pScopeDataItem->mask & SDI_STR) pScopeDataItem->displayname = m_bstrDisplayName; if (pScopeDataItem->mask & SDI_IMAGE) pScopeDataItem->nImage = m_scopeDataItem.nImage; if (pScopeDataItem->mask & SDI_OPENIMAGE) pScopeDataItem->nOpenImage = m_scopeDataItem.nOpenImage; if (pScopeDataItem->mask & SDI_PARAM) pScopeDataItem->lParam = m_scopeDataItem.lParam; if (pScopeDataItem->mask & SDI_STATE ) pScopeDataItem->nState = m_scopeDataItem.nState; [!crlf] // TODO : Add code for SDI_CHILDREN return S_OK; } [!crlf] HRESULT [!ClassName]Data::GetResultPaneInfo(RESULTDATAITEM *pResultDataItem) { if (pResultDataItem->bScopeItem) { if (pResultDataItem->mask & RDI_STR) { pResultDataItem->str = GetResultPaneColInfo(pResultDataItem->nCol); } if (pResultDataItem->mask & RDI_IMAGE) { pResultDataItem->nImage = m_scopeDataItem.nImage; } if (pResultDataItem->mask & RDI_PARAM) { pResultDataItem->lParam = m_scopeDataItem.lParam; } [!crlf] return S_OK; } [!crlf] if (pResultDataItem->mask & RDI_STR) { pResultDataItem->str = GetResultPaneColInfo(pResultDataItem->nCol); } if (pResultDataItem->mask & RDI_IMAGE) { pResultDataItem->nImage = m_resultDataItem.nImage; } if (pResultDataItem->mask & RDI_PARAM) { pResultDataItem->lParam = m_resultDataItem.lParam; } if (pResultDataItem->mask & RDI_INDEX) { pResultDataItem->nIndex = m_resultDataItem.nIndex; } [!crlf] return S_OK; } [!crlf] HRESULT [!ClassName]Data::Notify( MMC_NOTIFY_TYPE event, long arg, long param, IComponentData* pComponentData, IComponent* pComponent, DATA_OBJECT_TYPES type) { // Add code to handle the different notifications. // Handle MMCN_SHOW and MMCN_EXPAND to enumerate children items. // In response to MMCN_SHOW you have to enumerate both the scope // and result pane items. // For MMCN_EXPAND you only need to enumerate the scope items // Use IConsoleNameSpace::InsertItem to insert scope pane items // Use IResultData::InsertItem to insert result pane item. HRESULT hr = E_NOTIMPL; [!crlf] _ASSERTE(pComponentData != NULL || pComponent != NULL); [!crlf] CComPtr spConsole; CComQIPtr spHeader; if (pComponentData != NULL) spConsole = (([!ClassName]*)pComponentData)->m_spConsole; else { spConsole = (([!ClassName]Component*)pComponent)->m_spConsole; spHeader = spConsole; } [!crlf] switch (event) { case MMCN_SHOW: { CComQIPtr spResultData(spConsole); // TODO : Enumerate the result pane items hr = S_OK; break; } case MMCN_EXPAND: { CComQIPtr spConsoleNameSpace(spConsole); // TODO : Enumerate scope pane items hr = S_OK; break; } case MMCN_ADD_IMAGES: { // Add Images IImageList* pImageList = (IImageList*) arg; hr = E_FAIL; // Load bitmaps associated with the scope pane // and add them to the image list // Loads the default bitmaps generated by the wizard // Change as required HBITMAP hBitmap16 = LoadBitmap(_Module.GetResourceInstance(), MAKEINTRESOURCE([!IDB_SNAPIN16])); if (hBitmap16 != NULL) { HBITMAP hBitmap32 = LoadBitmap(_Module.GetResourceInstance(), MAKEINTRESOURCE([!IDB_SNAPIN32])); if (hBitmap32 != NULL) { hr = pImageList->ImageListSetStrip((long*)hBitmap16, (long*)hBitmap32, 0, RGB(0, 128, 128)); if (FAILED(hr)) ATLTRACE(_T("IImageList::ImageListSetStrip failed\n")); } } break; } } return hr; } [!crlf] LPOLESTR [!ClassName]Data::GetResultPaneColInfo(int nCol) { if (nCol == 0) return m_bstrDisplayName; // TODO : Return the text for other columns return OLESTR("Override GetResultPaneColInfo"); } [!crlf] [!endif] [!if=(EXTENSIONSNAPIN, "TRUE")] [!if=(IExtendPropertySheet, "TRUE)] HRESULT [!ClassName]ExtData::CreatePropertyPages(LPPROPERTYSHEETCALLBACK lpProvider, long handle, IUnknown* pUnk, DATA_OBJECT_TYPES type) { if (type == CCT_SCOPE || type == CCT_RESULT) { [!ClassName]Page* pPage = new [!ClassName]Page(handle, true, _T("[!ShortName]")); lpProvider->AddPage(pPage->Create()); // The second parameter to the property page class constructor // should be true for only one page. [!crlf] // TODO : Add code here to add additional pages return S_OK; } return E_UNEXPECTED; } [!crlf] [!endif] [!endif] [!if=(IComponentData, "TRUE")] HRESULT [!ClassName]::Initialize(LPUNKNOWN pUnknown) { HRESULT hr = IComponentDataImpl<[!ClassName], [!ClassName]Component >::Initialize(pUnknown); if (FAILED(hr)) return hr; [!crlf] CComPtr spImageList; [!crlf] if (m_spConsole->QueryScopeImageList(&spImageList) != S_OK) { ATLTRACE(_T("IConsole::QueryScopeImageList failed\n")); return E_UNEXPECTED; } [!crlf] // Load bitmaps associated with the scope pane // and add them to the image list // Loads the default bitmaps generated by the wizard // Change as required HBITMAP hBitmap16 = LoadBitmap(_Module.GetResourceInstance(), MAKEINTRESOURCE([!IDB_SNAPIN16])); if (hBitmap16 == NULL) return S_OK; [!crlf] HBITMAP hBitmap32 = LoadBitmap(_Module.GetResourceInstance(), MAKEINTRESOURCE([!IDB_SNAPIN32])); if (hBitmap32 == NULL) return S_OK; [!crlf] if (spImageList->ImageListSetStrip((long*)hBitmap16, (long*)hBitmap32, 0, RGB(0, 128, 128)) != S_OK) { ATLTRACE(_T("IImageList::ImageListSetStrip failed\n")); return E_UNEXPECTED; } return S_OK; } [!endif]