📄 hexconv.h
字号:
// HexConv.h : Declaration of the CHexConv
#ifndef __HEXCONV_H_
#define __HEXCONV_H_
#include "resource.h" // main symbols
#include <atlctl.h>
#include "MyFirstCtrlCP.h"
/////////////////////////////////////////////////////////////////////////////
// CHexConv
class ATL_NO_VTABLE CHexConv :
public CComObjectRootEx<CComSingleThreadModel>,
public IDispatchImpl<IHexConv, &IID_IHexConv, &LIBID_MYFIRSTCTRLLib>,
public CComControl<CHexConv>,
public IPersistStreamInitImpl<CHexConv>,
public IOleControlImpl<CHexConv>,
public IOleObjectImpl<CHexConv>,
public IOleInPlaceActiveObjectImpl<CHexConv>,
public IViewObjectExImpl<CHexConv>,
public IOleInPlaceObjectWindowlessImpl<CHexConv>,
public IConnectionPointContainerImpl<CHexConv>,
public IPersistStorageImpl<CHexConv>,
public ISpecifyPropertyPagesImpl<CHexConv>,
public IQuickActivateImpl<CHexConv>,
public IDataObjectImpl<CHexConv>,
public IProvideClassInfo2Impl<&CLSID_HexConv, &DIID__IHexConvEvents, &LIBID_MYFIRSTCTRLLib>,
public IPropertyNotifySinkCP<CHexConv>,
public CComCoClass<CHexConv, &CLSID_HexConv>,
public CProxy_IHexConvEvents< CHexConv >
{
public:
CHexConv()
{
// <BOOK_ADDON Chapter 6.4.1> *****************************
m_DisplayStr=TEXT("");
m_InValue=0;
m_OutValue=0;
// <BOOK_ADDON Chapter 6.4.1> *****************************
}
DECLARE_REGISTRY_RESOURCEID(IDR_HEXCONV)
DECLARE_PROTECT_FINAL_CONSTRUCT()
BEGIN_COM_MAP(CHexConv)
COM_INTERFACE_ENTRY(IHexConv)
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(CHexConv)
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(CHexConv)
CONNECTION_POINT_ENTRY(IID_IPropertyNotifySink)
CONNECTION_POINT_ENTRY(DIID__IHexConvEvents) // <BOOK_CHANGE Chapter 6.4.1> ************
END_CONNECTION_POINT_MAP()
BEGIN_MSG_MAP(CHexConv)
CHAIN_MSG_MAP(CComControl<CHexConv>)
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);
// LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
// IViewObjectEx
DECLARE_VIEW_STATUS(VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE)
// IHexConv
public:
STDMETHOD(SetDisplayString)(BSTR DisplayStr);
STDMETHOD(get_OutValue)(/*[out, retval]*/ long *pVal);
STDMETHOD(put_OutValue)(/*[in]*/ long newVal);
STDMETHOD(get_InValue)(/*[out, retval]*/ long *pVal);
STDMETHOD(put_InValue)(/*[in]*/ long newVal);
HRESULT OnDraw(ATL_DRAWINFO& di)
{
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);
// <BOOK_ADDON Chapter 6.4.1> *****************************
//LPCTSTR pszText = _T("ATL 3.0 : HexConv");
TCHAR *pszText=(TCHAR *)LocalAlloc(LMEM_ZEROINIT,(UINT)(m_DisplayStr.Length()+20)*sizeof(TCHAR));
#ifdef UNICODE
wsprintf(pszText,TEXT("%s %d=0x%x"),m_DisplayStr,m_InValue,m_OutValue);
#else
USES_CONVERSION;
wsprintf(pszText,TEXT("%s %d=0x%x"),W2A(m_DisplayStr), m_InValue,m_OutValue);
#endif
DrawText(di.hdcDraw, pszText, -1, &rc, DT_CENTER | DT_VCENTER | DT_SINGLELINE);
LocalFree(pszText);
// </BOOK_ADDON Chapter 6.4.1> *****************************
return S_OK;
}
// <BOOK_ADDON Chapter 6.4.1> *****************************
private:
long m_InValue,m_OutValue;
CComBSTR m_DisplayStr;
// </BOOK_ADDON Chapter 6.4.1> *****************************
};
#endif //__HEXCONV_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -