//==============================================================; // // This source code is only intended as a supplement to // existing Microsoft documentation. // // // // // THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY // KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE // IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR // PURPOSE. // // Copyright (C) 1999 Microsoft Corporation. All Rights Reserved. // // // //==============================================================; #include #include "People.h" #include // for vb component //#include "vb\mmcsample.h" const GUID CPeoplePoweredVehicle::thisGuid = { 0x2974380d, 0x4c4b, 0x11d2, { 0x89, 0xd8, 0x0, 0x0, 0x21, 0x47, 0x31, 0x28 } }; const GUID CPerson::thisGuid = { 0xd41ef043, 0x8bc5, 0x11d2, { 0x8a, 0xb, 0x0, 0x0, 0x21, 0x47, 0x31, 0x28 } }; //============================================================== // // CPeoplePoweredVehicle implementation // // CPeoplePoweredVehicle::CPeoplePoweredVehicle(CComponentData *pComponentData) { m_pComponentData = pComponentData; for (int n = 0; n < NUMBER_OF_CHILDREN; n++) { children[n] = new CPerson(n, pComponentData); children[n]->Initialize(_T("Fred"), 6, 2, 115, n % 2 == 0 ? TRUE : FALSE); } } CPeoplePoweredVehicle::~CPeoplePoweredVehicle() { for (int n = 0; n < NUMBER_OF_CHILDREN; n++) if (children[n]) { delete children[n]; } } HRESULT CPeoplePoweredVehicle::Expand(IConsoleNameSpace *pConsoleNameSpace, IConsole *pConsole, HSCOPEITEM parent) { SCOPEDATAITEM sdi; if (!bExpanded) { // create the child nodes, then expand them for (int n = 0; n < NUMBER_OF_CHILDREN; n++) { 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_CHILDREN; sdi.relativeID = (HSCOPEITEM)parent; sdi.nImage = children[n]->GetBitmapIndex(); sdi.nOpenImage = children[n]->GetBitmapIndex(); sdi.displayname = MMC_CALLBACK; sdi.lParam = (LPARAM)children[n]; // The cookie sdi.cChildren = 0; HRESULT hr = pConsoleNameSpace->InsertItem( &sdi ); _ASSERT( SUCCEEDED(hr) ); } } return S_OK; } //============================================================== // // CPeopleVehicle::CPerson implementation // // CPerson::CPerson(int id, CComponentData *pComponentData) : m_id(id) { m_pComponentData = pComponentData; m_pUnknown = NULL; szName = NULL; lSpeed = 0; lHeight = 0; lWeight = 0; fAnimating = FALSE; } CPerson::~CPerson() { if (szName) delete [] szName; if (m_pUnknown) m_pUnknown->Release(); } void CPerson::Initialize(_TCHAR *szName, LONG lSpeed, LONG lHeight, LONG lWeight, BOOL fAnimating) { if (szName) { this->szName = new _TCHAR[_tcslen(szName) + 20]; _tcscpy(this->szName, szName); _tcscat(this->szName, _T(" ")); if (m_id % 2) _tcscat(this->szName, _T("(new control)")); else _tcscat(this->szName, _T("(share control)")); } this->lSpeed = lSpeed; this->lHeight = lHeight; this->lWeight = lWeight; this->fAnimating = fAnimating; return; } const _TCHAR *CPerson::GetDisplayName(int nCol) { static _TCHAR buf[128]; switch (nCol) { case 0: _tcscpy(buf, szName ? szName : _T("")); break; case 1: _stprintf(buf, _T("%ld m/s"), lSpeed); break; case 2: _stprintf(buf, _T("%ld meters"), lHeight); break; case 3: _stprintf(buf, _T("%ld kilos"), lWeight); break; } return buf; } HRESULT CPerson::GetResultViewType(LPOLESTR *ppViewType, long *pViewOptions) { // for vb component // LPOLESTR lpOleStr; // HRESULT hr = StringFromCLSID(CLSID_VBComponent, &lpOleStr); // *ppViewType = lpOleStr; // for atl component LPOLESTR lpOleStr = L"{9A12FB62-C754-11D2-952C-00C04FB92EC2}"; *ppViewType = static_cast(CoTaskMemAlloc((wcslen(lpOleStr) + 1) * sizeof(WCHAR))); wcscpy(*ppViewType, lpOleStr); if (m_id % 2) { // create new control *pViewOptions = MMC_VIEW_OPTIONS_CREATENEW; } else { // share control *pViewOptions = MMC_VIEW_OPTIONS_NONE; } return S_OK; } HRESULT CPerson::ShowContextHelp(IConsole *pConsole, IDisplayHelp *m_ipDisplayHelp, LPOLESTR helpFile) { HRESULT hr = S_OK; IUnknown *pUnk = NULL; if (SUCCEEDED(hr = pConsole->QueryResultView(&pUnk))) { IDispatch *pDispatch = NULL; if (SUCCEEDED(hr = pUnk->QueryInterface(IID_IDispatch, (void **)&pDispatch))) { DISPID dispID; DISPPARAMS dispparamsNoArgs = {NULL, NULL, 0, 0}; EXCEPINFO exInfo; OLECHAR *pszName = L"DoHelp"; UINT uErr; hr = pDispatch->GetIDsOfNames(IID_NULL, &pszName, 1, LOCALE_SYSTEM_DEFAULT, &dispID); if (SUCCEEDED(hr)) { hr = pDispatch->Invoke( dispID, IID_NULL, LOCALE_USER_DEFAULT, DISPATCH_METHOD, &dispparamsNoArgs, NULL, &exInfo, &uErr); } pDispatch->Release(); } pUnk->Release(); } _ASSERT(SUCCEEDED(hr)); return hr; }