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

📄 atlcontrolwin.h

📁 用VC开发activex 一书实例1 ATLControl
💻 H
字号:
// ATLControlWin.h : Declaration of the CATLControlWin

#ifndef __ATLCONTROLWIN_H_
#define __ATLCONTROLWIN_H_

#include "resource.h"       // main symbols
#include "alignmentenums.h"
#include "CPATLControl.h"

/////////////////////////////////////////////////////////////////////////////
// CATLControlWin
class ATL_NO_VTABLE CATLControlWin : 
	public CComObjectRootEx<CComObjectThreadModel>,
	public CComCoClass<CATLControlWin, &CLSID_ATLControlWin>,
	public CComControl<CATLControlWin>,
	public IDispatchImpl<IATLControlWin, &IID_IATLControlWin, &LIBID_ATLCONTROLLib>,
	public IProvideClassInfo2Impl<&CLSID_ATLControlWin, &DIID__DATLControlWin, &LIBID_ATLCONTROLLib>,
	public IPersistStreamInitImpl<CATLControlWin>,
	public IPersistStorageImpl<CATLControlWin>,
	public IQuickActivateImpl<CATLControlWin>,
	public IOleControlImpl<CATLControlWin>,
	public IOleObjectImpl<CATLControlWin>,
	public IOleInPlaceActiveObjectImpl<CATLControlWin>,
	public IViewObjectExImpl<CATLControlWin>,
	public IOleInPlaceObjectWindowlessImpl<CATLControlWin>,
	public IDataObjectImpl<CATLControlWin>,
	public ISupportErrorInfo,
	public IConnectionPointContainerImpl<CATLControlWin>,
	public ISpecifyPropertyPagesImpl<CATLControlWin>,
	public CProxy_DATLControlWin<CATLControlWin>,
	public IPerPropertyBrowsingImpl<CATLControlWin>,
	public IEnumFORMATETC,
	public IDropSource,
	public IDropTarget
{
public:
	CATLControlWin()
	{
 		m_bWindowOnly = TRUE; 

 		// NULL terminate the string reference
		m_lptstrCaption = new TCHAR[1];
		m_lptstrCaption[0] = '\0';

		// set the alignment to the default of left
		m_lAlignment = EALIGN_LEFT;

		// set the backcolor to the system default
		m_BackColor = 0x80000000 | COLOR_WINDOW;

		// clear the font
		m_pFont = NULL;

		// clear the brush
		hOldBrush = hBrush = NULL;

		// clear the flag
		bRetrievedDimensions = FALSE;
		
		// set the initial state of the ReadyState property
		m_lReadyState = READYSTATE_LOADING;

		// set to the first element
		ulFORMATETCElement = 0;

		// clear the storage medium
		sTextStgMedium.hGlobal = NULL;

		// register a custom clipboard format
		m_uiCustomFormat = ::RegisterClipboardFormat("BCFControlCtlCustomFormat");

		// clear the storage medium
		sCustomStgMedium.hGlobal = NULL; 
	}

DECLARE_REGISTRY_RESOURCEID(IDR_ATLCONTROLWIN)

BEGIN_COM_MAP(CATLControlWin)
	COM_INTERFACE_ENTRY(IATLControlWin)
	COM_INTERFACE_ENTRY(IDispatch)
	COM_INTERFACE_ENTRY_IMPL(IViewObjectEx)
	COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject2, IViewObjectEx)
	COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject, IViewObjectEx)
	COM_INTERFACE_ENTRY_IMPL(IOleInPlaceObjectWindowless)
	COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleInPlaceObject, IOleInPlaceObjectWindowless)
	COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleWindow, IOleInPlaceObjectWindowless)
	COM_INTERFACE_ENTRY_IMPL(IOleInPlaceActiveObject)
	COM_INTERFACE_ENTRY_IMPL(IOleControl)
	COM_INTERFACE_ENTRY_IMPL(IOleObject)
	COM_INTERFACE_ENTRY_IMPL(IQuickActivate)
	COM_INTERFACE_ENTRY_IMPL(IPersistStorage)
	COM_INTERFACE_ENTRY_IMPL(IPersistStreamInit)
	COM_INTERFACE_ENTRY_IMPL(ISpecifyPropertyPages)
	COM_INTERFACE_ENTRY_IMPL(IDataObject)
	COM_INTERFACE_ENTRY(IProvideClassInfo)
	COM_INTERFACE_ENTRY(IProvideClassInfo2)
	COM_INTERFACE_ENTRY(ISupportErrorInfo)
	COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer)
	COM_INTERFACE_ENTRY_IMPL(IPerPropertyBrowsing)
	COM_INTERFACE_ENTRY(IEnumFORMATETC)
	COM_INTERFACE_ENTRY(IDropSource)
	COM_INTERFACE_ENTRY(IDropTarget)
END_COM_MAP()

BEGIN_PROPERTY_MAP(CATLControlWin)
	// PROP_ENTRY("Description", dispid, clsid)
	PROP_ENTRY("TextDataPath", dispidTextDataPath, CLSID_ATLControlWinPPG)
	PROP_ENTRY("Alignment", dispidAlignment, CLSID_ATLControlWinPPG)
	PROP_ENTRY("BackColor", DISPID_BACKCOLOR, CLSID_ATLControlWinPPG)
	PROP_PAGE(CLSID_CColorPropPage)
END_PROPERTY_MAP()


BEGIN_CONNECTION_POINT_MAP(CATLControlWin)
    CONNECTION_POINT_ENTRY(DIID__DATLControlWin)
END_CONNECTION_POINT_MAP()


BEGIN_MSG_MAP(CATLControlWin)
	MESSAGE_HANDLER(WM_PAINT, OnPaint)
	MESSAGE_HANDLER(WM_GETDLGCODE, OnGetDlgCode)
	MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
	MESSAGE_HANDLER(WM_KILLFOCUS, OnKillFocus)
	MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
	MESSAGE_HANDLER(WM_KEYDOWN, OnKeyDown);
	MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown);
	MESSAGE_HANDLER(WM_CREATE, OnCreate);
END_MSG_MAP()


// ISupportsErrorInfo
	STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid);

// IViewObjectEx
	STDMETHOD(GetViewStatus)(DWORD* pdwStatus)
	{
		ATLTRACE(_T("IViewObjectExImpl::GetViewStatus\n"));
		*pdwStatus = VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE;
		return S_OK;
	}

// IPerPropertyBrowsing
	STDMETHOD(MapPropertyToPage)(DISPID dispID, CLSID *pClsid);
	STDMETHOD(GetPredefinedStrings)(DISPID dispID, CALPOLESTR *pCaStringsOut,
		CADWORD *pCaCookiesOut);
	STDMETHOD(GetPredefinedValue)(DISPID dispID, DWORD dwCookie, VARIANT* pVarOut);
	STDMETHOD(GetDisplayString)(DISPID dispID,BSTR *pBstr);

// IDataObject
	STDMETHOD(GetData)(LPFORMATETC, LPSTGMEDIUM);
	STDMETHOD(EnumFormatEtc)(DWORD, LPENUMFORMATETC*);

// IEnumFORMATETC
	STDMETHOD(Next)(ULONG celt, FORMATETC __RPC_FAR * rgelt, 
		ULONG __RPC_FAR * pceltFetched);
	STDMETHOD(Skip)(ULONG celt);
	STDMETHOD(Reset)(void);
	STDMETHOD(Clone)(IEnumFORMATETC __RPC_FAR *__RPC_FAR * ppenum);

// IDropSource
	STDMETHOD(QueryContinueDrag)(BOOL fEscapePressed, DWORD dwKeyState);
	STDMETHOD(GiveFeedback)(DWORD dwEffect);

// IDropTarget
	STDMETHOD(DragEnter)(LPDATAOBJECT pDataObject, DWORD dwKeyState, POINTL pt,
		LPDWORD pdwEffect);
	STDMETHOD(DragOver)(DWORD dwKeyState, POINTL pt, LPDWORD pdwEffect);
	STDMETHOD(DragLeave)(void);
	STDMETHOD(Drop)(LPDATAOBJECT pDataObject, DWORD dwKeyState, POINTL pt, 
		LPDWORD pdwEffect);

// IATLControlWin
public:
	STDMETHOD(get_TextDataPath)(/*[out, retval]*/ BSTR *pVal);
	STDMETHOD(put_TextDataPath)(/*[in]*/ BSTR newVal);
	STDMETHOD(get_ReadyState)(/*[out, retval]*/ long *pVal);
	STDMETHOD(get_BackColor)(/*[out, retval]*/ OLE_COLOR *pVal);
	STDMETHOD(put_BackColor)(/*[in]*/ OLE_COLOR newVal);
	STDMETHOD(get_CaptionProp)(/*[in]*/ VARIANT varAlignment, /*[out, retval]*/ BSTR *pVal);
	STDMETHOD(put_CaptionProp)(/*[in]*/ VARIANT varAlignment, /*[in]*/ BSTR newVal);
	STDMETHOD(get_Alignment)(/*[out, retval]*/ long *pVal);
	STDMETHOD(put_Alignment)(/*[in]*/ long newVal);
	STDMETHOD(CaptionMethod)(/*[in]*/ BSTR bstrCaption, /*[in]*/ VARIANT varAlignment, /*[out, retval]*/ long * lRetVal);
	HRESULT OnDraw(ATL_DRAWINFO& di);

	//OnData will be used as a callback functin by the CBindStatusCallback object.
	//OnData will be called periodically with data from the asynchronous transfer
	void OnData(CBindStatusCallback<CATLControlWin>* pbsc, BYTE* pBytes, DWORD dwSize);

protected:
	// storage variable for the caption
	LPTSTR m_lptstrCaption;
	// storage variable for the alignment
	long m_lAlignment;
	// storage variable for the BackColor stock property
	OLE_COLOR m_BackColor;

	void FireChange(void);

	LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled);
	LRESULT OnKeyDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled);
	LRESULT OnLButtonDown(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled);
	LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled);

    IFont    * m_pFont;
	void LoadFont(void);
	HBRUSH hBrush, hOldBrush;
	COLORREF TranslateColor(OLE_COLOR clrColor, HPALETTE hpal = NULL){COLORREF cr = RGB(0x00,0x00,0x00);OleTranslateColor(clrColor, hpal, &cr);return cr;}
	void FillSolidRect(HDC hDC, LPCRECT lpRect, COLORREF clr){::SetBkColor(hDC, clr);::ExtTextOut(hDC, 0, 0, ETO_OPAQUE, lpRect, NULL, 0, NULL);}
	void GetTextExtent(HDC hDC, LPCTSTR lpctstrString, int & cx, int & cy);
	BOOL bRetrievedDimensions;
	int iCharWidthArray[256];
	int iCharacterSpacing, iCharacterHeight;

	// for the ReadyState property
	long m_lReadyState;

	// for the TextDataPath property
	CComBSTR m_bstrTextDataPath;

	// to hold the data as it is passed in
	CComBSTR m_bstrText;

	void CopyDataToClipboard(void);
	void PrepareDataForTransfer(void);
	void GetDataFromClipboard(void);
	void GetDataFromTransfer(IDataObject * ipDataObj);

	void CopyStgMedium(LPSTGMEDIUM lpTargetStgMedium, 
		LPSTGMEDIUM lpSourceStgMedium, CLIPFORMAT cfSourceFormat);

	ULONG ulFORMATETCElement;

private:
	FORMATETC sTextFormatEtc;
	STGMEDIUM sTextStgMedium;

	// custom format storage variables
	UINT m_uiCustomFormat;
	FORMATETC sCustomFormatEtc;
	STGMEDIUM sCustomStgMedium;
};

#endif //__ATLCONTROLWIN_H_

⌨️ 快捷键说明

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