📄 occimpl.h
字号:
LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, UINT nID,
CFile* pPersist=NULL, BOOL bStorage=FALSE, BSTR bstrLicKey=NULL);
// Overload to allow creation of default-sized controls
HRESULT CreateControl(CWnd* pWndCtrl, REFCLSID clsid,
LPCTSTR lpszWindowName, DWORD dwStyle, const POINT* ppt,
const SIZE* psize, UINT nID, CFile* pPersist=NULL, BOOL bStorage=FALSE,
BSTR bstrLicKey=NULL);
virtual BOOL DestroyControl();
UINT GetID();
BOOL GetEventIID(IID* piid);
virtual HRESULT DoVerb(LONG nVerb, LPMSG lpMsg = NULL);
BOOL IsDefaultButton();
DWORD GetDefBtnCode();
void SetDefaultButton(BOOL bDefault);
void GetControlInfo();
BOOL IsMatchingMnemonic(LPMSG lpMsg);
void SendMnemonic(LPMSG lpMsg);
void FreezeEvents(BOOL bFreeze);
virtual void InvokeHelperV(DISPID dwDispID, WORD wFlags, VARTYPE vtRet,
void* pvRet, const BYTE* pbParamInfo, va_list argList);
virtual void SetPropertyV(DISPID dwDispID, VARTYPE vtProp, va_list argList);
virtual void AFX_CDECL InvokeHelper(DISPID dwDispID, WORD wFlags, VARTYPE vtRet,
void* pvRet, const BYTE* pbParamInfo, ...);
virtual void GetProperty(DISPID dwDispID, VARTYPE vtProp, void* pvProp) const;
virtual void AFX_CDECL SetProperty(DISPID dwDispID, VARTYPE vtProp, ...);
virtual BOOL AFX_CDECL SafeSetProperty(DISPID dwDispID, VARTYPE vtProp, ...);
virtual DWORD GetStyle() const;
virtual DWORD GetExStyle() const;
virtual BOOL ModifyStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags);
virtual BOOL ModifyStyleEx(DWORD dwRemove, DWORD dwAdd, UINT nFlags);
virtual void SetWindowText(LPCTSTR lpszString);
virtual void GetWindowText(CString& str) const;
virtual int GetWindowText(LPTSTR lpszStringBuf, int nMaxCount) const;
virtual int GetWindowTextLength() const;
virtual int GetDlgCtrlID() const;
virtual int SetDlgCtrlID(int nID);
virtual void MoveWindow(int x, int y, int nWidth, int nHeight,
BOOL bRepaint);
virtual BOOL SetWindowPos(const CWnd* pWndInsertAfter, int x, int y,
int cx, int cy, UINT nFlags);
virtual BOOL ShowWindow(int nCmdShow);
virtual BOOL IsWindowEnabled() const;
virtual BOOL EnableWindow(BOOL bEnable);
virtual CWnd* SetFocus();
virtual void EnableDSC();
virtual void BindDefaultProperty(DISPID dwDispID, VARTYPE vtProp, LPCTSTR szFieldName, CWnd* pDSCWnd);
virtual void BindProperty(DISPID dwDispId, CWnd* pWndDSC);
// Overridables
virtual BOOL QuickActivate();
// Attributes
COleControlContainer* m_pCtrlCont;
HWND m_hWnd;
CWnd* m_pWndCtrl;
UINT m_nID;
CRect m_rect;
IID m_iidEvents;
LPOLEOBJECT m_pObject;
LPOLEINPLACEOBJECT m_pInPlaceObject;
LPOLEINPLACEACTIVEOBJECT m_pActiveObject;
COleDispatchDriver m_dispDriver;
DWORD m_dwEventSink;
DWORD m_dwPropNotifySink;
DWORD m_dwStyleMask;
DWORD m_dwStyle;
DWORD m_dwMiscStatus;
CONTROLINFO m_ctlInfo;
// Databound control stuff
DWORD m_dwNotifyDBEvents; // INotifyDBEvents sink cookie
CDataSourceControl* m_pDataSourceControl;
CDataBoundProperty* m_pBindings;
union {
COleControlSite *m_pDSCSite;
WORD m_ctlidRowSource;
};
DISPID m_defdispid;
UINT m_dwType;
CString m_strDataField;
BOOL m_bIgnoreNotify;
BOOL m_bIsDirty;
VARIANT m_varResult;
protected:
// Implementation
BOOL SetExtent();
HRESULT CreateOrLoad(REFCLSID clsid, CFile* pPersist, BOOL bStorage,
BSTR bstrLicKey);
DWORD ConnectSink(REFIID iid, LPUNKNOWN punkSink);
void DisconnectSink(REFIID iid, DWORD dwCookie);
void AttachWindow();
void DetachWindow();
BOOL OnEvent(AFX_EVENT* pEvent);
HRESULT GetCursor(DISPID dispid, LPUNKNOWN* ppcursorOut, LPVOID *ppcidOut);
public:
// Interface maps
BEGIN_INTERFACE_PART(OleClientSite, IOleClientSite)
INIT_INTERFACE_PART(COleControlSite, OleClientSite)
STDMETHOD(SaveObject)();
STDMETHOD(GetMoniker)(DWORD, DWORD, LPMONIKER*);
STDMETHOD(GetContainer)(LPOLECONTAINER*);
STDMETHOD(ShowObject)();
STDMETHOD(OnShowWindow)(BOOL);
STDMETHOD(RequestNewObjectLayout)();
END_INTERFACE_PART(OleClientSite)
BEGIN_INTERFACE_PART(OleIPSite, IOleInPlaceSite)
INIT_INTERFACE_PART(COleControlSite, OleIPSite)
STDMETHOD(GetWindow)(HWND*);
STDMETHOD(ContextSensitiveHelp)(BOOL);
STDMETHOD(CanInPlaceActivate)();
STDMETHOD(OnInPlaceActivate)();
STDMETHOD(OnUIActivate)();
STDMETHOD(GetWindowContext)(LPOLEINPLACEFRAME*,
LPOLEINPLACEUIWINDOW*, LPRECT, LPRECT, LPOLEINPLACEFRAMEINFO);
STDMETHOD(Scroll)(SIZE);
STDMETHOD(OnUIDeactivate)(BOOL);
STDMETHOD(OnInPlaceDeactivate)();
STDMETHOD(DiscardUndoState)();
STDMETHOD(DeactivateAndUndo)();
STDMETHOD(OnPosRectChange)(LPCRECT);
END_INTERFACE_PART(OleIPSite)
BEGIN_INTERFACE_PART(OleControlSite, IOleControlSite)
INIT_INTERFACE_PART(COleControlSite, OleControlSite)
STDMETHOD(OnControlInfoChanged)();
STDMETHOD(LockInPlaceActive)(BOOL fLock);
STDMETHOD(GetExtendedControl)(LPDISPATCH* ppDisp);
STDMETHOD(TransformCoords)(POINTL* lpptlHimetric,
POINTF* lpptfContainer, DWORD flags);
STDMETHOD(TranslateAccelerator)(LPMSG lpMsg, DWORD grfModifiers);
STDMETHOD(OnFocus)(BOOL fGotFocus);
STDMETHOD(ShowPropertyFrame)();
END_INTERFACE_PART(OleControlSite)
BEGIN_INTERFACE_PART(AmbientProps, IDispatch)
INIT_INTERFACE_PART(COleControlSite, AmbientProps)
STDMETHOD(GetTypeInfoCount)(unsigned int*);
STDMETHOD(GetTypeInfo)(unsigned int, LCID, ITypeInfo**);
STDMETHOD(GetIDsOfNames)(REFIID, LPOLESTR*, unsigned int, LCID, DISPID*);
STDMETHOD(Invoke)(DISPID, REFIID, LCID, unsigned short, DISPPARAMS*,
VARIANT*, EXCEPINFO*, unsigned int*);
END_INTERFACE_PART(AmbientProps)
BEGIN_INTERFACE_PART(PropertyNotifySink, IPropertyNotifySink)
INIT_INTERFACE_PART(COleControlSite, PropertyNotifySink)
STDMETHOD(OnChanged)(DISPID dispid);
STDMETHOD(OnRequestEdit)(DISPID dispid);
END_INTERFACE_PART(PropertyNotifySink)
BEGIN_INTERFACE_PART(EventSink, IDispatch)
INIT_INTERFACE_PART(COleControlSite, EventSink)
STDMETHOD(GetTypeInfoCount)(unsigned int*);
STDMETHOD(GetTypeInfo)(unsigned int, LCID, ITypeInfo**);
STDMETHOD(GetIDsOfNames)(REFIID, LPOLESTR*, unsigned int, LCID, DISPID*);
STDMETHOD(Invoke)(DISPID, REFIID, LCID, unsigned short, DISPPARAMS*,
VARIANT*, EXCEPINFO*, unsigned int*);
END_INTERFACE_PART(EventSink)
BEGIN_INTERFACE_PART(BoundObjectSite, IBoundObjectSite)
STDMETHOD(GetCursor)(DISPID dispid, LPLPCURSOR ppcursorOut, LPVOID *ppcidOut);
END_INTERFACE_PART(BoundObjectSite)
BEGIN_INTERFACE_PART(NotifyDBEvents, INotifyDBEvents)
STDMETHOD(OKToDo)(DWORD dwEventWhat, ULONG cReasons, DBNOTIFYREASON rgReasons[]);
STDMETHOD(Cancelled)(DWORD dwEventWhat, ULONG cReasons, DBNOTIFYREASON rgReasons[]);
STDMETHOD(SyncBefore)(DWORD dwEventWhat, ULONG cReasons, DBNOTIFYREASON rgReasons[]);
STDMETHOD(AboutToDo)(DWORD dwEventWhat, ULONG cReasons, DBNOTIFYREASON rgReasons[]);
STDMETHOD(FailedToDo)(DWORD dwEventWhat, ULONG cReasons, DBNOTIFYREASON rgReasons[]);
STDMETHOD(SyncAfter)(DWORD dwEventWhat, ULONG cReasons, DBNOTIFYREASON rgReasons[]);
STDMETHOD(DidEvent)(DWORD dwEventWhat, ULONG cReasons, DBNOTIFYREASON rgReasons[]);
// Not part of i/f - just a helper
HRESULT FireEvent(DWORD dwEventWhat, ULONG cReasons,
DBNOTIFYREASON rgReasons[], DSCSTATE nState);
END_INTERFACE_PART(NotifyDBEvents)
BEGIN_INTERFACE_PART(RowsetNotify, IRowsetNotify)
STDMETHOD(OnFieldChange)(IRowset* pRowset, HROW hRow, ULONG cColumns, ULONG rgColumns[], DBREASON eReason, DBEVENTPHASE ePhase, BOOL fCantDeny);
STDMETHOD(OnRowChange)(IRowset* pRowset, ULONG cRows, const HROW rghRows[], DBREASON eReason, DBEVENTPHASE ePhase, BOOL fCantDeny);
STDMETHOD(OnRowsetChange)(IRowset* pRowset, DBREASON eReason, DBEVENTPHASE ePhase, BOOL fCantDeny);
END_INTERFACE_PART(RowsetNotify)
DECLARE_INTERFACE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
// OLE control container manager
class COccManager : public CNoTrackObject
{
// Operations
public:
// Event handling
virtual BOOL OnEvent(CCmdTarget* pCmdTarget, UINT idCtrl, AFX_EVENT* pEvent,
AFX_CMDHANDLERINFO* pHandlerInfo);
// Internal object creation
virtual COleControlContainer* CreateContainer(CWnd* pWnd);
virtual COleControlSite* CreateSite(COleControlContainer* pCtrlCont);
// Dialog creation
virtual const DLGTEMPLATE* PreCreateDialog(_AFX_OCC_DIALOG_INFO* pOccDialogInfo,
const DLGTEMPLATE* pOrigTemplate);
virtual void PostCreateDialog(_AFX_OCC_DIALOG_INFO* pOccDialogInfo);
virtual DLGTEMPLATE* SplitDialogTemplate(const DLGTEMPLATE* pTemplate,
DLGITEMTEMPLATE** ppOleDlgItems);
virtual BOOL CreateDlgControls(CWnd* pWndParent, LPCTSTR lpszResourceName,
_AFX_OCC_DIALOG_INFO* pOccDialogInfo);
virtual BOOL CreateDlgControls(CWnd* pWndParent, void* lpResource,
_AFX_OCC_DIALOG_INFO* pOccDialogInfo);
// Dialog manager
virtual BOOL IsDialogMessage(CWnd* pWndDlg, LPMSG lpMsg);
static BOOL AFX_CDECL IsLabelControl(CWnd* pWnd);
static BOOL AFX_CDECL IsMatchingMnemonic(CWnd* pWnd, LPMSG lpMsg);
static void AFX_CDECL SetDefaultButton(CWnd* pWnd, BOOL bDefault);
static DWORD AFX_CDECL GetDefBtnCode(CWnd* pWnd);
// Implementation
protected:
// Dialog creation
HWND CreateDlgControl(CWnd* pWndParent, HWND hwAfter, BOOL bDialogEx,
LPDLGITEMTEMPLATE pDlgItem, WORD nMsg, BYTE* lpData, DWORD cb);
// Databinding
void BindControls(CWnd* pWndParent);
// Dialog manager
static void AFX_CDECL UIActivateControl(CWnd* pWndNewFocus);
static void AFX_CDECL UIDeactivateIfNecessary(CWnd* pWndOldFocus, CWnd* pWndNewFocus);
};
struct _AFX_OCC_DIALOG_INFO
{
DLGTEMPLATE* m_pNewTemplate;
DLGITEMTEMPLATE** m_ppOleDlgItems;
};
#endif // !_AFX_NO_OCC_SUPPORT
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -