330 lines
9.7 KiB
C++
330 lines
9.7 KiB
C++
// Copyright (c) 1997-2001 Microsoft Corporation, All Rights Reserved
|
|
//***************************************************************************
|
|
//
|
|
// (c) 1996, 1997 by Microsoft Corporation
|
|
//
|
|
// hmmvctl.h
|
|
//
|
|
// This file contains the implementation of the main view container as well
|
|
// as the generic view.
|
|
//
|
|
//
|
|
// a-larryf 17-Sept-96 Created.
|
|
//
|
|
//***************************************************************************
|
|
|
|
#ifndef _HmmvCtl_h
|
|
#define _HmmvCtl_h
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CWBEMViewContainerCtrl : See HmmvCtl.cpp for implementation.
|
|
|
|
#include <afxcmn.h>
|
|
#include <afxwin.h>
|
|
|
|
#include "notify.h"
|
|
#include "utils.h"
|
|
|
|
class CTitleBar;
|
|
class CIcon;
|
|
class CWBEMViewContainerCtrl;
|
|
class CViewStack;
|
|
class CIconSource;
|
|
|
|
class CMultiView;
|
|
class CSingleView;
|
|
class CPolyView;
|
|
class CDlgHelpBox;
|
|
|
|
|
|
#define CX_ICON 32
|
|
#define CY_ICON 32
|
|
#define CX_SMALL_ICON 16
|
|
#define CY_SMALL_ICON 16
|
|
|
|
#define CY_FONT 15
|
|
|
|
class CHmmvTab;
|
|
|
|
|
|
#define PROPFILTER_SYSTEM 1
|
|
#define PROPFILTER_INHERITED 2
|
|
#define PROPFILTER_LOCAL 4
|
|
|
|
|
|
class CContainerContext
|
|
{
|
|
public:
|
|
BOOL m_bIsShowingMultiView;
|
|
BOOL m_bObjectIsNewlyCreated;
|
|
BOOL m_bEmptyContainer;
|
|
HWND m_hwndFocus;
|
|
};
|
|
|
|
|
|
|
|
|
|
class CGenericViewContext
|
|
{
|
|
public:
|
|
CGenericViewContext(CSingleView* psv) {m_lContextHandle = NULL; }
|
|
~CGenericViewContext();
|
|
long m_lContextHandle;
|
|
|
|
private:
|
|
CSingleView* m_psv;
|
|
};
|
|
|
|
enum IconSize;
|
|
|
|
class CWBEMViewContainerCtrl : public COleControl
|
|
{
|
|
DECLARE_DYNCREATE(CWBEMViewContainerCtrl)
|
|
|
|
// Constructor
|
|
public:
|
|
CWBEMViewContainerCtrl();
|
|
// void TestShowInstances();
|
|
CWnd* ReestablishFocus();
|
|
|
|
|
|
///////////////////////////////////////////////////////////
|
|
// These methods implement polymorphism for the views.
|
|
//
|
|
|
|
|
|
void RequestUIActive();
|
|
virtual DWORD GetActivationPolicy( );
|
|
virtual DWORD GetControlFlags( );
|
|
void SelectView(long lPosition);
|
|
|
|
CPolyView* GetView() {return m_pview; }
|
|
void Notify(LONG lEvent);
|
|
// void SetPropertyFilters(long lPropFilters);
|
|
// long GetPropertyFilters() {return m_lPropFilters; }
|
|
|
|
long PublicSaveState(BOOL bPromptUser, UINT nType);
|
|
|
|
// virtual BOOL PreTranslateMessage(MSG* pMsg);
|
|
void NotifyDataChange();
|
|
LPTSTR MessageBuffer() {return m_szMessageBuffer; }
|
|
void Clear(BOOL bRedrawWindow=TRUE);
|
|
SCODE JumpToObjectPathFromMultiview(LPCTSTR szObjectPath, BOOL bSetMultiviewClass, BOOL bAddToHistory=TRUE);
|
|
SCODE JumpToObjectPath(BSTR bstrObjectPath, BOOL bSetMultiviewClass, BOOL bAddToHistory=TRUE);
|
|
BOOL InStudioMode() {return m_bInStudioMode; }
|
|
SCODE NotifyInstanceDeleted(COleVariant& varObjectPath) { return S_OK; }
|
|
void NotifyContainerOfSelectionChange();
|
|
BOOL CustomViewIsRegistered(CLSID& clsid, DWORD dwVersionMS, DWORD dwVersionLS);
|
|
void PassThroughChangeRootOrNamespace(LPCTSTR szRootOrNamespace, long bChangeNamespace, long bEchoSelectObject) {FireNOTIFYChangeRootOrNamespace(szRootOrNamespace, bChangeNamespace, bEchoSelectObject); }
|
|
void PassThroughGetIHmmServices(LPCTSTR lpctstrNamespace, VARIANT FAR* pvarUpdatePointer, VARIANT FAR* pvarServices, VARIANT FAR* pvarSC, VARIANT FAR* pvarUserCancel);
|
|
|
|
CFont& GetFont() {return m_font; }
|
|
void MultiViewButtonClicked();
|
|
void InvalidateControlRect(CRect* prc);
|
|
BOOL ShowMultiView(BOOL bShowMultiView, BOOL bAddToHistory);
|
|
BOOL ShowSingleView(BOOL bShowSingleView, BOOL bAddToHistory) {return ShowMultiView(!bShowSingleView, bAddToHistory); }
|
|
BOOL m_bPathIsClass;
|
|
void CreateInstance();
|
|
void DeleteInstance();
|
|
void GetWbemServices(LPCTSTR szNamespace, VARIANT FAR* pvarUpdatePointer, VARIANT FAR* pvarServices, VARIANT FAR* pvarSc, VARIANT FAR* pvarUserCancel);
|
|
|
|
|
|
|
|
|
|
// Context stack api.
|
|
void PushView();
|
|
void UpdateViewContext();
|
|
SCODE ContextForward();
|
|
SCODE ContextBack();
|
|
BOOL QueryCanContextForward();
|
|
BOOL QueryCanContextBack();
|
|
void UpdateCreateDeleteButtonState();
|
|
void GetContainerContext(CContainerContext& ctx);
|
|
SCODE SetContainerContextPrologue(CContainerContext& ctx);
|
|
SCODE SetContainerContextEpilogue(CContainerContext& ctx);
|
|
void ClearGenericView() {Clear(); }
|
|
BOOL ObjectIsNewlyCreated(SCODE& sc);
|
|
|
|
|
|
|
|
void PublicShowInstances(LPCTSTR pszTitle, const VARIANT FAR& varPathArray){ShowInstances(pszTitle, varPathArray); }
|
|
void UpdateToolbar();
|
|
void OnDrawPreCreate(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid);
|
|
void InvokeHelp();
|
|
void Query();
|
|
BOOL IsEmptyContainer(){return m_bEmptyContainer; }
|
|
|
|
// Overrides
|
|
// ClassWizard generated virtual function overrides
|
|
//{{AFX_VIRTUAL(CWBEMViewContainerCtrl)
|
|
public:
|
|
virtual void OnDraw(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid);
|
|
virtual void DoPropExchange(CPropExchange* pPX);
|
|
virtual void OnResetState();
|
|
virtual BOOL Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext = NULL);
|
|
virtual BOOL PreTranslateMessage(MSG* pMsg);
|
|
protected:
|
|
virtual void DoDataExchange(CDataExchange* pDX);
|
|
virtual LRESULT WindowProc(UINT message, WPARAM wParam, LPARAM lParam);
|
|
//}}AFX_VIRTUAL
|
|
|
|
// Implementation
|
|
protected:
|
|
// afx_msg void OnContextMenu(CWnd*, CPoint point);
|
|
BOOL m_bCreationFinished;
|
|
|
|
~CWBEMViewContainerCtrl();
|
|
|
|
DECLARE_OLECREATE_EX(CWBEMViewContainerCtrl) // Class factory and guid
|
|
DECLARE_OLETYPELIB(CWBEMViewContainerCtrl) // GetTypeInfo
|
|
DECLARE_PROPPAGEIDS(CWBEMViewContainerCtrl) // Property page IDs
|
|
DECLARE_OLECTLTYPE(CWBEMViewContainerCtrl) // Type name and misc status
|
|
|
|
// Message maps
|
|
//{{AFX_MSG(CWBEMViewContainerCtrl)
|
|
afx_msg void OnSize(UINT nType, int cx, int cy);
|
|
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
|
|
afx_msg void OnDestroy();
|
|
afx_msg void OnCmdShowObjectAttributes();
|
|
afx_msg void OnSetFocus(CWnd* pOldWnd);
|
|
afx_msg void OnKillFocus(CWnd* pNewWnd);
|
|
afx_msg BOOL OnEraseBkgnd(CDC* pDC);
|
|
//}}AFX_MSG
|
|
DECLARE_MESSAGE_MAP()
|
|
public:
|
|
// Dispatch maps
|
|
//{{AFX_DISPATCH(CWBEMViewContainerCtrl)
|
|
long m_sc;
|
|
afx_msg void OnStatusCodeChanged();
|
|
afx_msg VARIANT GetObjectPath();
|
|
afx_msg void SetObjectPath(const VARIANT FAR& newValue);
|
|
afx_msg BSTR GetNameSpace();
|
|
afx_msg void SetNameSpace(LPCTSTR lpszNewValue);
|
|
afx_msg long GetStudioModeEnabled();
|
|
afx_msg void SetStudioModeEnabled(long nNewValue);
|
|
afx_msg long GetPropertyFilter();
|
|
afx_msg void SetPropertyFilter(long nNewValue);
|
|
afx_msg void ShowInstances(LPCTSTR szTitle, const VARIANT FAR& varPathArray);
|
|
afx_msg long SaveState(long bPromptUser, long bUserCanCancel);
|
|
afx_msg void QueryViewInstances(LPCTSTR pLabel, LPCTSTR pQueryType, LPCTSTR pQuery, LPCTSTR pClass);
|
|
//}}AFX_DISPATCH
|
|
DECLARE_DISPATCH_MAP()
|
|
protected:
|
|
// Event maps
|
|
//{{AFX_EVENT(CWBEMViewContainerCtrl)
|
|
void FireGetIWbemServices(LPCTSTR szNamespace, VARIANT FAR* pvarUpdatePointer, VARIANT FAR* pvarServices, VARIANT FAR* pvarSc, VARIANT FAR* pvarUserCancel)
|
|
{FireEvent(eventidGetIWbemServices,EVENT_PARAM(VTS_BSTR VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT VTS_PVARIANT), szNamespace, pvarUpdatePointer, pvarServices, pvarSc, pvarUserCancel);}
|
|
void FireNOTIFYChangeRootOrNamespace(LPCTSTR szRootOrNamespace, long bChangeNamespace, long bEchoSelectObject)
|
|
{FireEvent(eventidNOTIFYChangeRootOrNamespace,EVENT_PARAM(VTS_BSTR VTS_I4 VTS_I4), szRootOrNamespace, bChangeNamespace, bEchoSelectObject);}
|
|
void FireRequestUIActive()
|
|
{FireEvent(eventidRequestUIActive,EVENT_PARAM(VTS_NONE));}
|
|
//}}AFX_EVENT
|
|
DECLARE_EVENT_MAP()
|
|
|
|
// Dispatch and event IDs
|
|
public:
|
|
enum {
|
|
//{{AFX_DISP_ID(CWBEMViewContainerCtrl)
|
|
dispidObjectPath = 2L,
|
|
dispidStatusCode = 1L,
|
|
dispidNameSpace = 3L,
|
|
dispidStudioModeEnabled = 4L,
|
|
dispidPropertyFilter = 5L,
|
|
dispidShowInstances = 6L,
|
|
dispidSaveState = 7L,
|
|
dispidQueryViewInstances = 8L,
|
|
eventidGetIWbemServices = 1L,
|
|
eventidNOTIFYChangeRootOrNamespace = 2L,
|
|
eventidRequestUIActive = 3L,
|
|
//}}AFX_DISP_ID
|
|
};
|
|
|
|
|
|
public:
|
|
void DrawBackground(CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid);
|
|
void CalcViewRect(CRect& rcView);
|
|
void CalcTitleRect(CRect& rcTitle);
|
|
BOOL IsInSchemaStudioMode() {return TRUE; }
|
|
|
|
// void GetObjectByPath(IHmmServices * pProv);
|
|
COleVariant m_varObjectPath;
|
|
|
|
SCODE m_scResult;
|
|
CString m_sTitle;
|
|
CFont m_font;
|
|
BOOL m_bDidInitialDraw;
|
|
CTitleBar* m_pTitleBar;
|
|
|
|
// Generic view
|
|
// void UseClonedObject(IHmmClassObject* pcoClone);
|
|
|
|
|
|
int m_cxViewLeftMargin;
|
|
int m_cxViewRightMargin;
|
|
int m_cyViewTopMargin;
|
|
int m_cyViewBottomMargin;
|
|
|
|
|
|
private:
|
|
|
|
void GetHmomWorkingDirectory();
|
|
inline BOOL IsValidWindowPtr(CWnd* pwnd);
|
|
HINSTANCE m_htmlHelpInst;
|
|
void OnHelp();
|
|
|
|
|
|
SCODE GetCurrentClass(COleVariant& varClassName);
|
|
|
|
|
|
// Common message buffer scratch area for user messages
|
|
TCHAR m_szMessageBuffer[1024];
|
|
|
|
CString m_sNameSpace;
|
|
CViewStack* m_pViewStack;
|
|
CString m_sNewInstClassPath;
|
|
BOOL m_bObjectIsNewlyCreated;
|
|
BOOL m_bInStudioMode;
|
|
CDlgHelpBox* m_pdlgHelpBox;
|
|
|
|
friend class CViewStack;
|
|
|
|
CPolyView* m_pview;
|
|
BOOL m_bFiredReadyStateChange;
|
|
BOOL m_bUIActive;
|
|
long m_lPropFilters;
|
|
BOOL m_bSingleViewNeedsRefresh;
|
|
BOOL m_bEmptyContainer;
|
|
BOOL m_bDelayToolbarUpdate;
|
|
BOOL m_bDeadObject;
|
|
|
|
};
|
|
|
|
|
|
//***********************************************************
|
|
// CWBEMViewContainerCtrl::IsValidWindowPtr
|
|
//
|
|
// Check to see if the window pointer is valid (not NULL and
|
|
// has a valid m_hWnd).
|
|
//
|
|
// Parameters:
|
|
// CWnd* pwnd
|
|
//
|
|
// Returns:
|
|
// TRUE if the window pointer is valid, FALSE otherwise.
|
|
//
|
|
//**********************************************************
|
|
BOOL CWBEMViewContainerCtrl::IsValidWindowPtr(CWnd* pwnd)
|
|
{
|
|
if (pwnd!=NULL && pwnd->m_hWnd!=NULL) {
|
|
return TRUE;
|
|
}
|
|
else {
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
#endif //_HmmvCtl_h
|