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

📄 pcdmcommander.h

📁 《Windows CE 权威指南》(作者:(美)CHRIS MUENCH
💻 H
字号:
// PCDMCommander.h : Declaration of the CPCDMCommander

#ifndef __PCDMCOMMANDER_H_
#define __PCDMCOMMANDER_H_

#include "resource.h"       // main symbols
#include <atlctl.h>
#include "PCDMUICP.h"

// <BOOK_ADDON Step3: Chapter 7.2.2> ***************************************
#define CMDBAR		0
#define CMDBAND		1
#define MAXBANDS	5
// </BOOK_ADDON Step3: Chapter 7.2.2> ***************************************
// <BOOK_ADDON Step2: Chapter 7.1.2> ***************************************
#define MAXMENUS	5
#define MAXBUTTONS	15
#define MAXCOMBOS	3
typedef struct tagCOMBOHANDLE
{
      HWND	hWnd;		// Combo Handle
	UINT	ID;			// Combo ID
	TCHAR	Text[255];	// Combo Text
} COMBOHANDLE;

typedef struct tagCOMBOSTUFF
{
	int			curCnt;	// Combo Counter
	COMBOHANDLE	handle[MAXCOMBOS];
} COMBOSTUFF;
// </BOOK_ADDON Step2: Chapter 7.1.2> ***************************************

/////////////////////////////////////////////////////////////////////////////
// CPCDMCommander
class ATL_NO_VTABLE CPCDMCommander : 
	public CComObjectRootEx<CComSingleThreadModel>,
	public IDispatchImpl<IPCDMCommander, &IID_IPCDMCommander, &LIBID_PCDMUILib>,
	public CComControl<CPCDMCommander>,
	public IPersistStreamInitImpl<CPCDMCommander>,
	public IOleControlImpl<CPCDMCommander>,
	public IOleObjectImpl<CPCDMCommander>,
	public IOleInPlaceActiveObjectImpl<CPCDMCommander>,
	public IViewObjectExImpl<CPCDMCommander>,
	public IOleInPlaceObjectWindowlessImpl<CPCDMCommander>,
	public IConnectionPointContainerImpl<CPCDMCommander>,
	public IPersistStorageImpl<CPCDMCommander>,
	public ISpecifyPropertyPagesImpl<CPCDMCommander>,
	public IQuickActivateImpl<CPCDMCommander>,
	public IDataObjectImpl<CPCDMCommander>,
	public IProvideClassInfo2Impl<&CLSID_PCDMCommander, &DIID__IPCDMCommanderEvents, &LIBID_PCDMUILib>,
	public IPropertyNotifySinkCP<CPCDMCommander>,
	public CComCoClass<CPCDMCommander, &CLSID_PCDMCommander>,
	public CProxy_IPCDMCommanderEvents< CPCDMCommander >
{
public:
	CPCDMCommander()
	{
// <BOOK_ADDON Step3: Chapter 7.2.2> ***************************************
	int i,j;

		for (i=0;i<MAXMENUS;i++) m_MyPopup[i]=NULL;
		for (j=0;j<MAXBANDS;j++) 
		{
			for (i=0;i<MAXBUTTONS;i++) m_szTTips[j][i]=NULL; 
			m_iMaxButtons[j]=0;
		}
		m_MyMenu=NULL;
		m_hwndCB=NULL;
		m_ComboStuff.curCnt=0;
		m_bIsFresh=FALSE;
		m_IDBAR=0;
		
		m_BandCreated=FALSE;
		m_CmdBarType=CMDBAR;
		m_CurrentBar=0;

		INITCOMMONCONTROLSEX icex;
		icex.dwSize = sizeof (INITCOMMONCONTROLSEX);
	    icex.dwICC = ICC_COOL_CLASSES;
	    InitCommonControlsEx (&icex);
// </BOOK_ADDON Step3: Chapter 7.2.2> ***************************************
// <BOOK_ADDON Step4: Chapter 7.3.2> ***************************************
		m_CePlatform=GetCePlatform();
// </BOOK_ADDON Step4: Chapter 7.3.2> ***************************************
	}

DECLARE_REGISTRY_RESOURCEID(IDR_PCDMCOMMANDER)

DECLARE_PROTECT_FINAL_CONSTRUCT()

BEGIN_COM_MAP(CPCDMCommander)
	COM_INTERFACE_ENTRY(IPCDMCommander)
	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(IConnectionPointContainer)
	COM_INTERFACE_ENTRY(ISpecifyPropertyPages)
	COM_INTERFACE_ENTRY(IQuickActivate)
	COM_INTERFACE_ENTRY(IPersistStorage)
	COM_INTERFACE_ENTRY(IDataObject)
	COM_INTERFACE_ENTRY(IProvideClassInfo)
	COM_INTERFACE_ENTRY(IProvideClassInfo2)
	COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
END_COM_MAP()

BEGIN_PROP_MAP(CPCDMCommander)
	PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
	PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
	// Example entries
	// PROP_ENTRY("Property Description", dispid, clsid)
	// PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()

BEGIN_CONNECTION_POINT_MAP(CPCDMCommander)
	CONNECTION_POINT_ENTRY(IID_IPropertyNotifySink)
	CONNECTION_POINT_ENTRY(DIID__IPCDMCommanderEvents)
END_CONNECTION_POINT_MAP()

BEGIN_MSG_MAP(CPCDMCommander)
// <BOOK_ADDON Step2: Chapter 7.1.2> ***************************************
	MESSAGE_HANDLER(WM_COMMAND, OnCommand)
	MESSAGE_HANDLER(WM_CLOSE, OnClose)
	MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
	NOTIFY_RANGE_HANDLER(0, 0xFFFF, NotifyHandler)
// </BOOK_ADDON Step2: Chapter 7.1.2> ***************************************
	CHAIN_MSG_MAP(CComControl<CPCDMCommander>)
	DEFAULT_REFLECTION_HANDLER()
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);
// <BOOK_ADDON Step2: Chapter 7.1.2> ***************************************
LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
// </BOOK_ADDON Step2: Chapter 7.1.2> ***************************************

// IViewObjectEx
	DECLARE_VIEW_STATUS(VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE)

// IPCDMCommander
public:
	STDMETHOD(SetCmdBarType)(int type);
	STDMETHOD(SetAdornments)(int Flags);
	STDMETHOD(AddStringToComboBox)(int ID, BSTR text);
	STDMETHOD(InsertComboBox)(int Size,int Index, int ID);
	STDMETHOD(InsertButton)(int StockNo,int state,int Index,int ID,BSTR ToolTipText);
	STDMETHOD(InsertMenuItem)(BSTR ItemName,int MenuNo,int Index, int ID);
	STDMETHOD(InsertMenu)(BSTR MenuName,int Index);
	STDMETHOD(CreateBar)(int ID,int Styles);

	HRESULT OnDraw(ATL_DRAWINFO& di)
	{
		/* <BOOK_ADDON Step2: Chapter 7.1.2> ***************************************
		RECT& rc = *(RECT*)di.prcBounds;
		HBRUSH hBrush, hOldBrush;
		hBrush = (HBRUSH)GetStockObject(WHITE_BRUSH);
		hOldBrush = (HBRUSH)SelectObject(di.hdcDraw, hBrush);
		Rectangle(di.hdcDraw, rc.left, rc.top, rc.right, rc.bottom);
		SelectObject(di.hdcDraw, hOldBrush);

		LPCTSTR pszText = _T("ATL 3.0 : PCDMCommander");
		DrawText(di.hdcDraw, pszText, -1, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
		*/ // </BOOK_ADDON Step2: Chapter 7.1.2> ***************************************
#ifdef UNDER_CE
		if (m_hwndCB!=NULL)
			CommandBar_DrawMenuBar(m_hwndCB,0);
#endif
		return S_OK;
	}

// <BOOK_ADDON Step2: Chapter 7.1.2> ***************************************
private:
	void SortToolTips(int index);
	int		m_IDBAR;
	BOOL	m_bIsFresh;
	HWND	m_hwndCB;				// Command-Bar Window
	HMENU	m_MyMenu;				// Menu 
	HMENU	m_MyPopup[MAXMENUS];	// Popup Menus (max 5)
	COMBOSTUFF	m_ComboStuff;
// </BOOK_ADDON Step2: Chapter 7.1.2> ***************************************
// <BOOK_ADDON Step3: Chapter 7.2.2> ***************************************
	int m_CmdBarType;
	LPTSTR	m_szTTips[MAXBANDS][MAXBUTTONS];	// Tooltip Text (max 15 per Band)
	int		m_iMaxButtons[MAXBUTTONS];			// Contains highest Button No
	BOOL	m_BandCreated;		// TRUE if Band was created already
	int	m_CurrentBar;		// Index of current Bar in Band
	HIMAGELIST m_hImLst;		// ImageList of Band
	HWND	m_hwndCBand;		// HWND of the Command Band
	REBARBANDINFO m_trbi[MAXBANDS];	// Bar info
// </BOOK_ADDON Step3: Chapter 7.2.2> ***************************************
// <BOOK_ADDON Step4: Chapter 7.3.2> ***************************************
	DWORD	m_CePlatform;
// </BOOK_ADDON Step4: Chapter 7.3.2> ***************************************
};

#endif //__PCDMCOMMANDER_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -