📄 wmsnodeservice.cpp
字号:
#include "StdAfx.h"#include "WarMmcSnapin.h"#include "WmsNodeService.h" // class implemented#include "WarCollector.h"#include "WarIfServer.h"#include "WmsNodeManagement.h"#include "WmsNodeServersFolder.h"#include "PropPageOptions.h"#include "PropPageNtStartup.h"/////////////////////////////// PUBLIC ///////////////////////////////////////// {B8480B39-40C6-433c-A625-F4BDD89F7118}const GUID WmsNodeService::thisGuid = { 0xb8480b39, 0x40c6, 0x433c, { 0xa6, 0x25, 0xf4, 0xbd, 0xd8, 0x9f, 0x71, 0x18 } };WmsNodeService::WmsNodeService(war_if_server_ptr_t& rSvrPtr): mServicePtr(rSvrPtr){}WmsNodeService::~WmsNodeService(){}//============================= LIFECYCLE ====================================//============================= OPERATORS ====================================//============================= OPERATIONS ===================================//============================= CALLBACK ===================================HRESULT WmsNodeService::OnExpand(IConsoleNameSpace *pConsoleNameSpace, IConsole *pConsole, HSCOPEITEM parent){ if (GetHandle() == NULL) SetHandle((HANDLE)parent); if (!bExpanded) { // create the child nodes, then expand them for(int i = 0; i < 2; i++) { CDelegationBase *pnew_node; SCOPEDATAITEM sdi; switch(i) { case 0: pnew_node = new WmsNodeManagement(mServicePtr); break; case 1: pnew_node = new WmsNodeServersFolder(mServicePtr); break; } ZeroMemory(&sdi, sizeof(SCOPEDATAITEM)); sdi.mask = SDI_STR| // Displayname is valid SDI_PARAM | // lParam is valid SDI_IMAGE | // nImage is valid SDI_OPENIMAGE | // nOpenImage is valid SDI_PARENT; sdi.relativeID = (HSCOPEITEM)parent; sdi.nImage = pnew_node->GetBitmapIndex(); sdi.nOpenImage = pnew_node->GetBitmapIndex(); sdi.displayname = MMC_CALLBACK; sdi.lParam = (LPARAM)pnew_node; // The cookie HRESULT hr = pConsoleNameSpace->InsertItem(&sdi); _ASSERT( SUCCEEDED(hr) ); pnew_node->SetHandle((HANDLE)sdi.ID); } } return S_OK;}HRESULT WmsNodeService::OnSelect(IConsole *pConsole, BOOL bScope, BOOL bSelect){ IConsoleVerb *pConsoleVerb; HRESULT hr = pConsole->QueryConsoleVerb(&pConsoleVerb); _ASSERT(SUCCEEDED(hr)); //hr = pConsoleVerb->SetVerbState(MMC_VERB_RENAME, ENABLED, TRUE); // can't get to properties (via the standard methods) unless // we tell MMC to display the Properties menu item and // toolbar button, this wil give the user a visual cue that // there's "something" to do hr = pConsoleVerb->SetVerbState(MMC_VERB_PROPERTIES, ENABLED, TRUE); pConsoleVerb->Release(); return S_OK;}HRESULT WmsNodeService::CreatePropertyPages(IPropertySheetCallback *lpProvider, LONG_PTR handle){ AFX_MANAGE_STATE(AfxGetStaticModuleState()); CPropertyPage *pprop_page = NULL; pprop_page = new CPropPageNtStartup(mServicePtr); HRESULT hr = MMCPropPageCallback(&pprop_page->m_psp); if (SUCCEEDED(hr)) { PROPSHEETPAGE psp; memset(&psp, 0, sizeof(psp)); memcpy(&psp, &pprop_page->m_psp, sizeof(pprop_page->m_psp)); psp.dwFlags = PSP_DEFAULT | PSP_USECALLBACK; HPROPSHEETPAGE hpage = CreatePropertySheetPage(&psp); if (NULL == hpage) return E_UNEXPECTED; lpProvider->AddPage(hpage); } pprop_page = new CPropPageOptions(mServicePtr->GetOptions(), WarOption::OL_SERVER); hr = MMCPropPageCallback(&pprop_page->m_psp); if (SUCCEEDED(hr)) { PROPSHEETPAGE psp; memset(&psp, 0, sizeof(psp)); memcpy(&psp, &pprop_page->m_psp, sizeof(pprop_page->m_psp)); psp.dwFlags = PSP_DEFAULT | PSP_USECALLBACK; HPROPSHEETPAGE hpage = CreatePropertySheetPage(&psp); if (NULL == hpage) return E_UNEXPECTED; lpProvider->AddPage(hpage); } return S_OK;}HRESULT WmsNodeService::OnSetToolbar(CComponent *pComponent, IControlbar *pControlbar, IToolbar *pToolbar, BOOL bScope, BOOL bSelect){ HRESULT hr = S_OK; if (bSelect) { // Always make sure the menuButton is attached hr = pControlbar->Attach(TOOLBAR, pToolbar); hr = OnUpdateToolbar(pComponent); } else { // Always make sure the toolbar is detached hr = pControlbar->Detach(pToolbar); } return hr;}HRESULT WmsNodeService::OnToolbarCommand(CComponent *pComponent, IConsole *pConsole, MMC_CONSOLE_VERB verb){ AFX_MANAGE_STATE(AfxGetStaticModuleState()); try { switch(verb) { case ID_START_SERVICE: mServicePtr->StartService(); break; case ID_PAUSE_SERVICE: mServicePtr->PauseService(); break; case ID_STOP_SERVICE: mServicePtr->StopService(); break; } } catch(WarException& ex) { WarCollector<TCHAR> msg; msg << "Failed to execute command.\r\n" << ex.Explain(); AfxMessageBox(msg.GetValue().c_str()); } OnUpdateToolbar(pComponent); return S_OK;}HRESULT WmsNodeService::OnUpdateToolbar(CComponent *pComponent){ bool start_pressed = false, start_ok = false, pause_pressed = false, pause_ok = false, stop_pressed = false, stop_ok = false; try { SERVICE_STATUS ss; mServicePtr->GetNtServiceStatus(ss); switch(ss.dwCurrentState) { case SERVICE_STOPPED: start_ok = true; break; case SERVICE_START_PENDING: start_pressed = true; break; case SERVICE_STOP_PENDING: stop_pressed = true; break; case SERVICE_RUNNING: stop_ok = true; pause_ok = true; break; case SERVICE_CONTINUE_PENDING: start_pressed = true; break; case SERVICE_PAUSE_PENDING: pause_pressed = true; break; case SERVICE_PAUSED: pause_pressed = true; start_ok = true; stop_ok = true; break; } } catch(WarException) { } pComponent->GetToolbar()->SetButtonState(ID_START_SERVICE, BUTTONPRESSED, start_pressed); pComponent->GetToolbar()->SetButtonState(ID_START_SERVICE, ENABLED, start_ok); pComponent->GetToolbar()->SetButtonState(ID_PAUSE_SERVICE, BUTTONPRESSED, pause_pressed); pComponent->GetToolbar()->SetButtonState(ID_PAUSE_SERVICE, ENABLED, pause_ok); pComponent->GetToolbar()->SetButtonState(ID_STOP_SERVICE, BUTTONPRESSED, stop_pressed); pComponent->GetToolbar()->SetButtonState(ID_STOP_SERVICE, ENABLED, stop_ok); return S_OK;}//============================= ACCESS ===================================//============================= INQUIRY ===================================const int WmsNodeService::GetBitmapIndex(){ return NICON_SERVICE;}const _TCHAR *WmsNodeService::GetDisplayName(int nCol){ return mServicePtr->GetName();}const GUID & WmsNodeService::getNodeType(){ return thisGuid; }/////////////////////////////// PROTECTED ////////////////////////////////////////////////////////////////// PRIVATE ///////////////////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -