⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wmsnodeservice.cpp

📁 ftpserver very good sample
💻 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 + -