home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2002 November
/
Chip_2002-11_cd1.bin
/
zkuste
/
vbasic
/
Data
/
Utils
/
WME71SDK.exe
/
RCDATA
/
CABINET
/
encoderview.h
< prev
next >
Wrap
C/C++ Source or Header
|
2001-03-02
|
11KB
|
341 lines
// EncoderView.h : Declaration of the CEncoderView
#ifndef __ENCODERVIEW_H_
#define __ENCODERVIEW_H_
#include "resource.h" // main symbols
#include <atlctl.h>
using namespace std;
/////////////////////////////////////////////////////////////////////////////
// CEncoderView
class ATL_NO_VTABLE CEncoderView :
public CComObjectRootEx<CComSingleThreadModel>,
public CStockPropImpl<CEncoderView, IEncoderView, &IID_IEncoderView, &LIBID_ENCVIEWLib>,
public CComCompositeControl<CEncoderView>,
public IPersistStreamInitImpl<CEncoderView>,
public IOleControlImpl<CEncoderView>,
public IOleObjectImpl<CEncoderView>,
public IOleInPlaceActiveObjectImpl<CEncoderView>,
public IViewObjectExImpl<CEncoderView>,
public IOleInPlaceObjectWindowlessImpl<CEncoderView>,
public IPersistStorageImpl<CEncoderView>,
public ISpecifyPropertyPagesImpl<CEncoderView>,
public IQuickActivateImpl<CEncoderView>,
public IDataObjectImpl<CEncoderView>,
public IProvideClassInfo2Impl<&CLSID_EncoderView, NULL, &LIBID_ENCVIEWLib>,
public CComCoClass<CEncoderView, &CLSID_EncoderView>
{
public:
CEncoderView();
HRESULT FinalConstruct();
void FinalRelease();
DECLARE_REGISTRY_RESOURCEID(IDR_ENCODERVIEW)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CEncoderView)
COM_INTERFACE_ENTRY(IEncoderView)
COM_INTERFACE_ENTRY(IDispatch)
COM_INTERFACE_ENTRY(IViewObjectEx)
COM_INTERFACE_ENTRY(IViewObject2)
COM_INTERFACE_ENTRY(IViewObject)
COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY(IOleInPlaceObject)
COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless)
COM_INTERFACE_ENTRY(IOleInPlaceActiveObject)
COM_INTERFACE_ENTRY(IOleControl)
COM_INTERFACE_ENTRY(IOleObject)
COM_INTERFACE_ENTRY(IPersistStreamInit)
COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit)
COM_INTERFACE_ENTRY(ISpecifyPropertyPages)
COM_INTERFACE_ENTRY(IQuickActivate)
COM_INTERFACE_ENTRY(IPersistStorage)
COM_INTERFACE_ENTRY(IDataObject)
COM_INTERFACE_ENTRY(IProvideClassInfo)
COM_INTERFACE_ENTRY(IProvideClassInfo2)
END_COM_MAP()
BEGIN_PROP_MAP(CEncoderView)
PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
PROP_ENTRY("AutoSize", DISPID_AUTOSIZE, CLSID_NULL)
PROP_ENTRY("BackColor", DISPID_BACKCOLOR, CLSID_StockColorPage)
PROP_ENTRY("Caption", DISPID_CAPTION, CLSID_NULL)
PROP_ENTRY("Enabled", DISPID_ENABLED, CLSID_NULL)
PROP_ENTRY("MouseIcon", DISPID_MOUSEICON, CLSID_StockPicturePage)
// Example entries
// PROP_ENTRY("Property Description", dispid, clsid)
// PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()
BEGIN_MSG_MAP(CEncoderView)
CHAIN_MSG_MAP(CComCompositeControl<CEncoderView>)
MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
NOTIFY_CODE_HANDLER(TVN_ITEMEXPANDING, OnItemexpandingTree_encoder)
NOTIFY_CODE_HANDLER(NM_RCLICK, OnContextMenu)
NOTIFY_HANDLER(IDC_TREE_ENCODER, TVN_DELETEITEM, OnDeleteitemTree_encoder)
NOTIFY_HANDLER(IDC_TREE_ENCODER, NM_OUTOFMEMORY, OnOutofmemoryTree_encoder)
NOTIFY_HANDLER(IDC_TREE_ENCODER, NM_RCLICK, OnRclickTree_encoder)
MESSAGE_HANDLER(WM_ENCODER_EVENT, OnEncoderEvent)
NOTIFY_HANDLER(IDC_TREE_ENCODER, TVN_BEGINDRAG, OnBegindragTree_encoder)
MESSAGE_HANDLER(WM_LBUTTONUP, OnLButtonUP)
MESSAGE_HANDLER(WM_MOUSEMOVE, OnMouseMove)
MESSAGE_HANDLER(WM_COMMAND, OnCommand)
END_MSG_MAP()
// Handler prototypes:
// LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
// LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
// LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
BEGIN_SINK_MAP(CEncoderView)
//Make sure the Event Handlers have __stdcall calling convention
END_SINK_MAP()
STDMETHOD(OnAmbientPropertyChange)(DISPID dispid)
{
if (dispid == DISPID_AMBIENT_BACKCOLOR)
{
SetBackgroundColorFromAmbient();
FireViewChange();
}
return IOleControlImpl<CEncoderView>::OnAmbientPropertyChange(dispid);
}
// IViewObjectEx
DECLARE_VIEW_STATUS(0)
// IEncoderView
public:
STDMETHOD(AddMachine)(/*[in]*/ BSTR bstrMachineName);
STDMETHOD(Refresh)();
STDMETHOD(get_Root)(/*[out, retval]*/ IDispatch* *pVal);
STDMETHOD(put_Root)(/*[in]*/ IDispatch* newVal);
OLE_COLOR m_clrBackColor;
CComBSTR m_bstrCaption;
BOOL m_bEnabled;
CComPtr<IPictureDisp> m_pMouseIcon;
// Root, can be encoder or agent
CComPtr<IDispatch> m_pRoot;
CComBSTR m_bstrMachine;
vector<CString> m_vecMachines;
CTreeViewCtrlEx m_Tree;
HICON m_iNormalIcon, m_iSelectedIcon;
CImageList m_ImageList; // needed for drag-drop operation
bool m_bDragging;
HTREEITEM m_hDragItem;
enum { IDD = IDD_ENCODERVIEW };
LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
protected:
HRESULT InitTreeView();
void DeleteChildren(HTREEITEM hItem);
void GetNormalAndSelectedIcons(LPITEMIDLIST lpifq,LPTV_ITEM lptvitem);
LRESULT OnItemexpandingTree_encoder(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnDeleteitemTree_encoder(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
HRESULT GetSelectedEncoder(IWMEncoder** pEnc);
protected:
HRESULT DisplayEncoder(IWMEncoder* pEnc, HTREEITEM hParent);
HRESULT ShowEncoderDetails(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowMachineDetails(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowSGCDetails(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowSrcPlInfoMgr(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowTrPlInfoMgr(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowDisplayInfo(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowAttributes(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowBroadcast(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowFile(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowStatistics(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowProfileCollection(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowSGDetails(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowSrcDetails(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowProfile(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowAudienceCollection(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowGroupTransformCollection(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowTransformDetails(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowPreviewCollection(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowPostviewCollection(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowPreOrPostViewCollection(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowWMFOutputStats(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowNetConnectionStats(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowFileArchiveStats(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowIndexerStats(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowSrcPlInfo(HTREEITEM hParent, IUnknown* pUnk);
// ewent showing functions
HRESULT ShowArchiveStateEvents(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowClientConnectEvents(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowClientDisconnectEvents(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowConfigEvents(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowErrorEvents(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowIndexerStateEvents(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowSourceStateEvents(HTREEITEM hItem,IUnknown* pUnk);
HRESULT ShowStateEvents(HTREEITEM hItem,IUnknown* pUnk);
template<class T, class I>
HRESULT InsertProperty(HRESULT (__stdcall I::*fp)(T*), I* p, HTREEITEM hParent, CString strName
,std::map<T,CString>& m)
{
HRESULT hr = NOERROR;
T Val;
hr = (p->*fp)(&Val);
CString strRes;
if(FAILED(hr))
{
strRes = GetError();
}
else
{
strRes = m[Val];
}
strName += strRes;
m_Tree.InsertItem(strName,hParent,TVI_LAST);
return hr;
}
// works on data types long , short etc
template<class T, class I>
HRESULT InsertProperty(HRESULT (__stdcall I::*fp)(T*), I* p, HTREEITEM hParent,
CString strName )
{
HRESULT hr = NOERROR;
T Val;
hr = (p->*fp)(&Val);
CString strRes;
if(FAILED(hr))
{
strRes = GetError();
}
else
{
strRes.Format(_T("%d"),Val);;
}
strName += strRes;
m_Tree.InsertItem(strName,hParent,TVI_LAST);
return hr;
}
// works on string properties
template<class T, class I>
HRESULT InsertPropertyBSTR(HRESULT (__stdcall I::*fp)(T*), I* p, HTREEITEM hParent,
CString strName )
{
HRESULT hr = NOERROR;
CComBSTR Val;
hr = (p->*fp)(&Val);
CString strRes;
if(FAILED(hr))
{
strRes = GetError();
}
else
{
USES_CONVERSION;
strRes = W2T(Val);
}
strName += strRes;
m_Tree.InsertItem(strName,hParent,TVI_LAST);
return hr;
}
// this one inserts a nocde given a function to get the interface pointer
template<class T, class I>
HTREEITEM InsertNode(HTREEITEM hParent, CString strText,
HRESULT (__stdcall I::*fp)(T**), I* p
, LPFNDISPLAY pfn)
{
CComPtr<T> pT;
HRESULT hr = NOERROR;
hr = (p->*fp)(&pT);
if(FAILED(hr))
return NULL;
CComPtr<IUnknown> pUnk;
hr = pT.QueryInterface(&pUnk);
return InsertNode(hParent, strText, (LPUNKNOWN)pUnk.p,pfn);
}
template<class Coll, class Item>
HRESULT ShowCollection( HTREEITEM hParent, Coll* pCol, HRESULT (CEncoderView::*fp)(HTREEITEM, IUnknown*),
Item* pUnused = NULL )
{
HRESULT hr = NOERROR;
if(!pCol)
return E_POINTER;
_ASSERT(m_Tree.IsWindow());
long lCount =0 ;
hr = pCol->get_Count(&lCount);
HR_TEST(hr);
USES_CONVERSION;
for(long l=0; l<lCount; l++)
{
CComPtr<Item> pItem;
hr = pCol->Item(l,&pItem);
if(FAILED(hr))
continue;
CString strName;
CComBSTR bstrName;
hr = pItem->get_Name(&bstrName);
if(FAILED(hr))
continue;
strName = W2T(bstrName);
InsertNode(hParent, strName, (LPUNKNOWN)pItem.p, fp);
}
return hr;
}
HTREEITEM InsertNode(HTREEITEM hParent, CString strText, LPUNKNOWN pUnk, LPFNDISPLAY pfn);
HTREEITEM InsertNode(HTREEITEM hParent, CString strText, TREEDATA* pData);
UINT GetItemIndex(CTreeItem& DragItem);
HRESULT Move(HTREEITEM hDragItem,HTREEITEM hHitItem);
HRESULT MoveTreeItems(HTREEITEM hDragItem,HTREEITEM hHitItem);
long GetEventType(CEncoderEventSink* pSink);
HTREEITEM GetEventTreeNode(HTREEITEM hParent, long lEventID);
LRESULT OnOutofmemoryTree_encoder(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
{
// TODO : Add Code for control notification handler.
return 0;
}
LRESULT OnRclickTree_encoder(int idCtrl, LPNMHDR pnmh, BOOL& bHandled)
{
// TODO : Add Code for control notification handler.
return 0;
}
LRESULT OnEncoderEvent(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnBegindragTree_encoder(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnLButtonUP(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnMouseMove(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnContextMenu(int , LPNMHDR pnmh, BOOL& );
};
#endif //__ENCODERVIEW_H_