📄 pcdmcommander.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 + -