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