// DDComboBox.h : Declaration of the CDDComboBox
//
// Author : David Shepherd
// Copyright (c) 2003, DaeDoe-Software
//
/////////////////////////////////////////////////////////////////////////////
#pragma once
#include "resource.h" // main symbols
#include <atlctl.h>
// the combo box id
#define IDC_COMBOBOX 0x1000
// fire the selection change event
// wparam : unused
// lparam : unused
// return : nothing
#define WM_FIRE_SELECTION_CHANGE (WM_APP+0)
/////////////////////////////////////////////////////////////////////////////
// IDDComboBox
[
object,
uuid("B2287642-C476-4443-9D6D-BDB84E164361"),
dual,
helpstring("IDDComboBox Interface"),
pointer_default(unique)
]
__interface IDDComboBox : public IDispatch
{
////////////////////////////////////////
// enabled
[propget, requestedit, bindable,
id(DISPID_ENABLED),
helpstring("")]
HRESULT Enabled([out, retval] VARIANT_BOOL* pVal);
[propput, requestedit, bindable,
id(DISPID_ENABLED),
helpstring("")]
HRESULT Enabled([in] VARIANT_BOOL newVal);
////////////////////////////////////////
// fill color
[propget, requestedit, bindable,
id(DISPID_FILLCOLOR),
helpstring("")]
HRESULT FillColor([out, retval] OLE_COLOR* pVal);
[propput, requestedit, bindable,
id(DISPID_FILLCOLOR),
helpstring("")]
HRESULT FillColor([in] OLE_COLOR newVal);
////////////////////////////////////////
// background color
[propget, requestedit, bindable,
id(DISPID_BACKCOLOR),
helpstring("")]
HRESULT BackColor([out, retval] OLE_COLOR* pVal);
[propput, requestedit, bindable,
id(DISPID_BACKCOLOR),
helpstring("")]
HRESULT BackColor([in] OLE_COLOR newVal);
////////////////////////////////////////
// foreground color
[propget, requestedit, bindable,
id(DISPID_FORECOLOR),
helpstring("")]
HRESULT ForeColor([out, retval] OLE_COLOR* pVal);
[propput, requestedit, bindable,
id(DISPID_FORECOLOR),
helpstring("")]
HRESULT ForeColor([in] OLE_COLOR newVal);
////////////////////////////////////////
// font
[propget, requestedit, bindable,
id(DISPID_FONT),
helpstring("")]
HRESULT Font([out, retval] IFontDisp** pVal);
[propput, requestedit, bindable,
id(DISPID_FONT),
helpstring("")]
HRESULT Font([in] IFontDisp* newVal);
[propputref, requestedit, bindable,
id(DISPID_FONT),
helpstring("")]
HRESULT Font([in] IFontDisp* newVal);
////////////////////////////////////////
// sorted alphabetically
[propget, requestedit, bindable,
id(DISPID_SORTED),
helpstring("")]
HRESULT Sorted([out, retval] VARIANT_BOOL* pVal);
[propput, requestedit, bindable,
id(DISPID_SORTED),
helpstring("")]
HRESULT Sorted([in] VARIANT_BOOL newVal);
////////////////////////////////////////
// text
[propget, bindable, nonbrowsable,
id(DISPID_TEXT),
helpstring("")]
HRESULT Text([out, retval] BSTR* pVal);
[propput, bindable, nonbrowsable,
id(DISPID_TEXT),
helpstring("")]
HRESULT Text([in] BSTR newVal);
////////////////////////////////////////
// default property
[propget, nonbrowsable,
id(DISPID_VALUE),
helpstring("")]
HRESULT _Default([out, retval] BSTR* pVal);
[propput, nonbrowsable,
id(DISPID_VALUE),
helpstring("")]
HRESULT _Default([in] BSTR newVal);
////////////////////////////////////////
[id(1), helpstring("")] HRESULT AddItem([in] BSTR Text);
[id(2), helpstring("")] HRESULT RemoveItem([in] BSTR Text);
[id(3), helpstring("")] HRESULT Clear();
};
/////////////////////////////////////////////////////////////////////////////
// _IDDComboBoxEvents
[
uuid("E2B34CAE-D8DC-4920-85B8-81898800E512"),
dispinterface,
helpstring("_IDDComboBoxEvents Interface")
]
__interface _IDDComboBoxEvents
{
[id(1), helpstring("")] HRESULT EditChange();
[id(2), helpstring("")] HRESULT SelectionChange();
};
/////////////////////////////////////////////////////////////////////////////
// CDDComboBox
[
coclass,
threading("apartment"),
vi_progid("DDControlPack.DDComboBox"),
progid("DDControlPack.DDComboBox.1"),
version(1.0),
uuid("992B226E-B124-4F17-95B7-5BC32A0C6DB7"),
helpstring("DDComboBox Class"),
event_source("com"),
support_error_info(IDDComboBox),
registration_script("control.rgs")
]
class ATL_NO_VTABLE CDDComboBox :
public IDispatchImpl<IDDComboBox>,
public IPersistStreamInitImpl<CDDComboBox>,
public IOleControlImpl<CDDComboBox>,
public IOleObjectImpl<CDDComboBox>,
public IOleInPlaceActiveObjectImpl<CDDComboBox>,
public IViewObjectExImpl<CDDComboBox>,
public IOleInPlaceObjectWindowlessImpl<CDDComboBox>,
public IPersistStorageImpl<CDDComboBox>,
public ISpecifyPropertyPagesImpl<CDDComboBox>,
public IQuickActivateImpl<CDDComboBox>,
public IDataObjectImpl<CDDComboBox>,
public CComControl<CDDComboBox>
{
private:
CContainedWindow m_ctlComboBox;
__event __interface _IDDComboBoxEvents;
/////////////////////////////////////////////////////////////////////////////
// properties
LONG m_Reserved0; // reserved
LONG m_Reserved1; // reserved
VARIANT_BOOL m_Enabled; // enabled
OLE_COLOR m_FillColor; // fill color
OLE_COLOR m_BackColor; // background color
OLE_COLOR m_ForeColor; // foreground color
CComPtr<IFontDisp> m_spFontDisp; // font
VARIANT_BOOL m_Sorted; // sorted alphabetically
CComBSTR m_Text; // text
/////////////////////////////////////////////////////////////////////////////
// property change validators
HRESULT OnBackColorChanging(OLE_COLOR newVal);
/////////////////////////////////////////////////////////////////////////////
// property change handlers
void OnEnabledChanged();
void OnBackColorChanged();
void OnForeColorChanged();
/////////////////////////////////////////////////////////////////////////////
// the background brush
CBrush m_BackBrush;
// creates the background brush
void CreateBackgroundBrush(OLE_COLOR BackColor);
// combo box accelerators
HACCEL m_hAccel;
public:
CDDComboBox();
DECLARE_PROTECT_FINAL_CONSTRUCT()
HRESULT FinalConstruct();
void FinalRelease();
static const TCHAR* GetObjectFriendlyName();
DECLARE_OLEMISC_STATUS(
OLEMISC_RECOMPOSEONRESIZE |
OLEMISC_CANTLINKINSIDE |
OLEMISC_INSIDEOUT |
OLEMISC_ACTIVATEWHENVISIBLE |
OLEMISC_SETCLIENTSITEFIRST)
BEGIN_PROP_MAP(CDDComboBox)
PROP_DATA_ENTRY("_reserved0", m_Reserved0, VT_I4)
PROP_DATA_ENTRY("_reserved1", m_Reserved1, VT_I4)
PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
PROP_ENTRY("Enabled", DISPID_ENABLED, CLSID_NULL)
PROP_ENTRY("FillColor", DISPID_FILLCOLOR, CLSID_NULL)
PROP_ENTRY("BackColor", DISPID_BACKCOLOR, CLSID_NULL)
PROP_ENTRY("ForeColor", DISPID_FORECOLOR, CLSID_NULL)
PROP_ENTRY("Font", DISPID_FONT, CLSID_NULL)
PROP_ENTRY("Sorted", DISPID_SORTED, CLSID_NULL)
// Example entries
// PROP_ENTRY("Property Description", dispid, clsid)
// PROP_PAGE(CLSID_StockColorPage)
END_PROP_MAP()
BEGIN_MSG_MAP(CDDComboBox)
MESSAGE_HANDLER(WM_CREATE, OnCreate)
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
MESSAGE_HANDLER(WM_CTLCOLOREDIT, OnCtlColorComboBox)
MESSAGE_HANDLER(WM_CTLCOLORLISTBOX, OnCtlColorComboBox)
MESSAGE_HANDLER(WM_CTLCOLORSTATIC, OnCtlColorComboBox)
MESSAGE_HANDLER(WM_FIRE_SELECTION_CHANGE, OnFireSelectionChange)
COMMAND_HANDLER(IDC_COMBOBOX, CBN_EDITCHANGE, OnComboBoxEditChanged)
COMMAND_HANDLER(IDC_COMBOBOX, CBN_SELCHANGE, OnComboBoxSelChanged)
COMMAND_ID_HANDLER(ID_CUT, OnCut)
COMMAND_ID_HANDLER(ID_COPY, OnCopy)
COMMAND_ID_HANDLER(ID_PASTE, OnPaste)
COMMAND_ID_HANDLER(ID_UNDO, OnUndo)
CHAIN_MSG_MAP(CComControl<CDDComboBox>)
ALT_MSG_MAP(1)
// Replace this with message map entries for superclassed ComboBox
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);
// base class overrides
HRESULT OnDraw(ATL_DRAWINFO& di);
// message handlers
BOOL PreTranslateAccelerator(LPMSG pMsg, HRESULT& hRet);
LRESULT OnCreate(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnEraseBkgnd(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnCtlColorComboBox(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnFireSelectionChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
LRESULT OnComboBoxEditChanged(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
LRESULT OnComboBoxSelChanged(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
LRESULT OnCut(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
LRESULT OnCopy(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
LRESULT OnPaste(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
LRESULT OnUndo(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
// IOleObject
STDMETHOD(SetClientSite)(IOleClientSite *pClientSite);
// IOleInPlaceObjectWindowless
STDMETHOD(SetObjectRects)(LPCRECT prcPos,LPCRECT prcClip);
// IViewObjectEx
DECLARE_VIEW_STATUS(VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE)
// IDDComboBox
IMPLEMENT_CUSTOM_BOOL_PROPERTY(Enabled,m_Enabled,DISPID_ENABLED);
IMPLEMENT_CUSTOM_COLOR_PROPERTY(FillColor,m_FillColor,DISPID_FILLCOLOR);
IMPLEMENT_CUSTOM_COLOR_PROPERTY(BackColor,m_BackColor,DISPID_BACKCOLOR);
IMPLEMENT_CUSTOM_COLOR_PROPERTY(ForeColor,m_ForeColor,DISPID_FORECOLOR);
STDMETHOD(get_Font)(IFontDisp** pVal);
STDMETHOD(put_Font)(IFontDisp* newVal);
STDMETHOD(putref_Font)(IFontDisp* newVal);
IMPLEMENT_CUSTOM_BOOL_PROPERTY(Sorted,m_Sorted,DISPID_SORTED);
STDMETHOD(get_Text)(BSTR* pVal);
STDMETHOD(put_Text)(BSTR newVal);
STDMETHOD(AddItem)(BSTR Text);
STDMETHOD(RemoveItem)(BSTR Text);
STDMETHOD(Clear)();
STDMETHOD(get__Default)(BSTR* pVal);
STDMETHOD(put__Default)(BSTR newVal);
};