occimpl.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489
  1. // This is a part of the Microsoft Foundation Classes C++ library.
  2. // Copyright (C) 1992-1998 Microsoft Corporation
  3. // All rights reserved.
  4. //
  5. // This source code is only intended as a supplement to the
  6. // Microsoft Foundation Classes Reference and related
  7. // electronic documentation provided with the library.
  8. // See these sources for detailed information regarding the
  9. // Microsoft Foundation Classes product.
  10. #ifndef _AFX_NO_OCC_SUPPORT
  11. #include <oledb.h>
  12. #include "olebind.h"
  13. #include "ocdbid.h"
  14. #include "ocdb.h"
  15. // MFC doesn't use the OLEDB 1.5 features of ATL and it causes
  16. // compile problems, so just make ATL think it's not version 1.5
  17. #if (OLEDBVER >= 0x0150)
  18. #undef OLEDBVER
  19. #define OLEDBVER 0x0100
  20. #endif
  21. #define AtlTrace AfxTrace
  22. #include "atldbcli.h"
  23. class CDataSourceControl;
  24. class CDataBoundProperty;
  25. // CCmdTarget
  26. class COleControlContainer;
  27. class COleControlSite;
  28. class COccManager;
  29. struct _AFX_OCC_DIALOG_INFO;
  30. #define DISPID_DATASOURCE 0x80010001
  31. #define DISPID_DATAFIELD 0x80010002
  32. interface AFX_NOVTABLE IDataSourceListener : public IUnknown
  33. {
  34. public:
  35. virtual HRESULT STDMETHODCALLTYPE OnDataMemberChanged(BSTR bstrDM) = 0;
  36. virtual HRESULT STDMETHODCALLTYPE OnDataMemberAdded(BSTR bstrDM) = 0;
  37. virtual HRESULT STDMETHODCALLTYPE OnDataMemberRemoved(BSTR bstrDM) = 0;
  38. };
  39. interface AFX_NOVTABLE IDataSource : public IUnknown
  40. {
  41. public:
  42. virtual HRESULT STDMETHODCALLTYPE GetDataMember(BSTR bstrDM, const GUID __RPC_FAR* riid, IUnknown __RPC_FAR* __RPC_FAR* ppunk) = 0;
  43. virtual HRESULT STDMETHODCALLTYPE GetDataMemberName(long lIndex, BSTR __RPC_FAR *pbstrDM) = 0;
  44. virtual HRESULT STDMETHODCALLTYPE GetDataMemberCount(long __RPC_FAR *plCount) = 0;
  45. virtual HRESULT STDMETHODCALLTYPE AddDataSourceListener(IDataSourceListener __RPC_FAR *pDSL) = 0;
  46. virtual HRESULT STDMETHODCALLTYPE RemoveDataSourceListener(IDataSourceListener __RPC_FAR *pDSL) = 0;
  47. };
  48. /////////////////////////////////////////////////////////////////////////////
  49. // OLE Databinding support class for data sources
  50. interface IRowPosition;
  51. class CDataSourceControl
  52. {
  53. private:
  54. CDataSourceControl() {};
  55. public:
  56. struct METAROWTYPE
  57. {
  58. DBCOLUMNID idColumnID;
  59. DWORD dwColumnID;
  60. LPSTR lpstrName;
  61. DWORD dwName;
  62. CPtrList* m_pClientList;
  63. };
  64. CDataSourceControl(COleControlSite *pClientSite);
  65. ~CDataSourceControl();
  66. HRESULT Initialize();
  67. virtual IUnknown* GetCursor();
  68. HRESULT GetMetaData();
  69. virtual void BindProp(COleControlSite* pClientSite, BOOL bBind = TRUE);
  70. virtual void BindProp(CDataBoundProperty* pProperty, BOOL bBind = TRUE);
  71. virtual void BindColumns();
  72. BOOL CopyColumnID(DBCOLUMNID* pcidDst, DBCOLUMNID const *pcidSrc);
  73. HRESULT GetBoundClientRow();
  74. virtual HRESULT UpdateControls();
  75. virtual HRESULT UpdateCursor();
  76. COleVariant ToVariant(int nCol);
  77. COleControlSite *m_pClientSite; // Back ptr to containing site
  78. ICursorMove* m_pCursorMove;
  79. ICursorUpdateARow* m_pCursorUpdateARow;
  80. int m_nColumns;
  81. METAROWTYPE* m_pMetaRowData;
  82. CPtrList m_CursorBoundProps;
  83. void* m_pVarData;
  84. int m_nBindings;
  85. DBCOLUMNBINDING *m_pColumnBindings;
  86. VARIANT* m_pValues;
  87. BOOL m_bUpdateInProgress;
  88. // OLE/DB stuff
  89. IDataSource* m_pDataSource;
  90. IRowPosition* m_pRowPosition;
  91. ATL::CRowset* m_pRowset;
  92. ATL::CDynamicAccessor* m_pDynamicAccessor;
  93. DWORD m_dwRowsetNotify; // IRowsetNotify cookie
  94. };
  95. /////////////////////////////////////////////////////////////////////////////
  96. // OLE Databinding support class for bound controls
  97. class CDataBoundProperty
  98. {
  99. protected:
  100. CDataBoundProperty() {};
  101. public:
  102. CDataBoundProperty(CDataBoundProperty* pLast, DISPID dispid, WORD ctlid);
  103. ~CDataBoundProperty() {};
  104. void SetClientSite(COleControlSite *pClientSite);
  105. void SetDSCSite(COleControlSite *pDSCSite);
  106. void RemoveSource();
  107. void Notify();
  108. IUnknown* GetCursor();
  109. CDataBoundProperty* GetNext();
  110. COleControlSite *m_pClientSite; // Back ptr to containing site
  111. WORD m_ctlid;
  112. DISPID m_dispid;
  113. COleControlSite *m_pDSCSite;
  114. BOOL m_bOwnXferOut;
  115. BOOL m_bIsDirty;
  116. CDataBoundProperty* m_pNext;
  117. };
  118. /////////////////////////////////////////////////////////////////////////////
  119. // Control containment helper functions
  120. DLGTEMPLATE* _AfxSplitDialogTemplate(const DLGTEMPLATE* pTemplate,
  121. CMapWordToPtr* pOleItemMap);
  122. void _AfxZOrderOleControls(CWnd* pWnd, CMapWordToPtr* pOleItemMap);
  123. /////////////////////////////////////////////////////////////////////////////
  124. // COleControlContainer - implementation class
  125. class COleControlContainer : public CCmdTarget
  126. {
  127. public:
  128. // Constructors/destructors
  129. COleControlContainer(CWnd* pWnd);
  130. virtual ~COleControlContainer();
  131. // Operations
  132. BOOL CreateControl(CWnd* pWndCtrl, REFCLSID clsid,
  133. LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, UINT nID,
  134. CFile* pPersist=NULL, BOOL bStorage=FALSE, BSTR bstrLicKey=NULL,
  135. COleControlSite** ppNewSite=NULL);
  136. // Overload to allow creation of default-sized controls
  137. BOOL CreateControl(CWnd* pWndCtrl, REFCLSID clsid,
  138. LPCTSTR lpszWindowName, DWORD dwStyle, const POINT* ppt,
  139. const SIZE* psize, UINT nID, CFile* pPersist=NULL, BOOL bStorage=FALSE,
  140. BSTR bstrLicKey=NULL, COleControlSite** ppNewSite=NULL);
  141. virtual COleControlSite* FindItem(UINT nID) const;
  142. virtual BOOL GetAmbientProp(COleControlSite* pSite, DISPID dispid,
  143. VARIANT* pvarResult);
  144. void CreateOleFont(CFont* pFont);
  145. void FreezeAllEvents(BOOL bFreeze);
  146. virtual void ScrollChildren(int dx, int dy);
  147. virtual void OnUIActivate(COleControlSite* pSite);
  148. virtual void OnUIDeactivate(COleControlSite* pSite);
  149. virtual void CheckDlgButton(int nIDButton, UINT nCheck);
  150. virtual void CheckRadioButton(int nIDFirstButton, int nIDLastButton,
  151. int nIDCheckButton);
  152. virtual CWnd* GetDlgItem(int nID) const;
  153. virtual void GetDlgItem(int nID, HWND* phWnd) const;
  154. virtual UINT GetDlgItemInt(int nID, BOOL* lpTrans, BOOL bSigned) const;
  155. virtual int GetDlgItemText(int nID, LPTSTR lpStr, int nMaxCount) const;
  156. virtual LRESULT SendDlgItemMessage(int nID, UINT message, WPARAM wParam,
  157. LPARAM lParam);
  158. virtual void SetDlgItemInt(int nID, UINT nValue, BOOL bSigned);
  159. virtual void SetDlgItemText(int nID, LPCTSTR lpszString);
  160. virtual UINT IsDlgButtonChecked(int nIDButton) const;
  161. #ifndef _AFXDLL
  162. virtual void AttachControlSite(CWnd* pWnd);
  163. #else
  164. void AttachControlSite(CWnd* pWnd);
  165. #endif
  166. // Attributes
  167. CWnd* m_pWnd;
  168. CMapPtrToPtr m_siteMap;
  169. COLORREF m_crBack;
  170. COLORREF m_crFore;
  171. LPFONTDISP m_pOleFont;
  172. COleControlSite* m_pSiteUIActive;
  173. public:
  174. // Interface maps
  175. BEGIN_INTERFACE_PART(OleIPFrame, IOleInPlaceFrame)
  176. INIT_INTERFACE_PART(COleControlContainer, OleIPFrame)
  177. STDMETHOD(GetWindow)(HWND*);
  178. STDMETHOD(ContextSensitiveHelp)(BOOL);
  179. STDMETHOD(GetBorder)(LPRECT);
  180. STDMETHOD(RequestBorderSpace)(LPCBORDERWIDTHS);
  181. STDMETHOD(SetBorderSpace)(LPCBORDERWIDTHS);
  182. STDMETHOD(SetActiveObject)(LPOLEINPLACEACTIVEOBJECT, LPCOLESTR);
  183. STDMETHOD(InsertMenus)(HMENU, LPOLEMENUGROUPWIDTHS);
  184. STDMETHOD(SetMenu)(HMENU, HOLEMENU, HWND);
  185. STDMETHOD(RemoveMenus)(HMENU);
  186. STDMETHOD(SetStatusText)(LPCOLESTR);
  187. STDMETHOD(EnableModeless)(BOOL);
  188. STDMETHOD(TranslateAccelerator)(LPMSG, WORD);
  189. END_INTERFACE_PART(OleIPFrame)
  190. BEGIN_INTERFACE_PART(OleContainer, IOleContainer)
  191. INIT_INTERFACE_PART(COleControlContainer, OleContainer)
  192. STDMETHOD(ParseDisplayName)(LPBINDCTX, LPOLESTR, ULONG*, LPMONIKER*);
  193. STDMETHOD(EnumObjects)(DWORD, LPENUMUNKNOWN*);
  194. STDMETHOD(LockContainer)(BOOL);
  195. END_INTERFACE_PART(OleContainer)
  196. DECLARE_INTERFACE_MAP()
  197. DECLARE_DISPATCH_MAP()
  198. };
  199. /////////////////////////////////////////////////////////////////////////////
  200. // COleControlSite - implementation class
  201. #define VT_MFCFORCEPUTREF 0x8000 // force DISPATCH_PROPERTYPUTREF
  202. class COleControlSite : public CCmdTarget
  203. {
  204. public:
  205. // Constructors/destructors
  206. COleControlSite(COleControlContainer* pCtrlCont);
  207. ~COleControlSite();
  208. // Operations
  209. HRESULT CreateControl(CWnd* pWndCtrl, REFCLSID clsid,
  210. LPCTSTR lpszWindowName, DWORD dwStyle, const RECT& rect, UINT nID,
  211. CFile* pPersist=NULL, BOOL bStorage=FALSE, BSTR bstrLicKey=NULL);
  212. // Overload to allow creation of default-sized controls
  213. HRESULT CreateControl(CWnd* pWndCtrl, REFCLSID clsid,
  214. LPCTSTR lpszWindowName, DWORD dwStyle, const POINT* ppt,
  215. const SIZE* psize, UINT nID, CFile* pPersist=NULL, BOOL bStorage=FALSE,
  216. BSTR bstrLicKey=NULL);
  217. virtual BOOL DestroyControl();
  218. UINT GetID();
  219. BOOL GetEventIID(IID* piid);
  220. virtual HRESULT DoVerb(LONG nVerb, LPMSG lpMsg = NULL);
  221. BOOL IsDefaultButton();
  222. DWORD GetDefBtnCode();
  223. void SetDefaultButton(BOOL bDefault);
  224. void GetControlInfo();
  225. BOOL IsMatchingMnemonic(LPMSG lpMsg);
  226. void SendMnemonic(LPMSG lpMsg);
  227. void FreezeEvents(BOOL bFreeze);
  228. virtual void InvokeHelperV(DISPID dwDispID, WORD wFlags, VARTYPE vtRet,
  229. void* pvRet, const BYTE* pbParamInfo, va_list argList);
  230. virtual void SetPropertyV(DISPID dwDispID, VARTYPE vtProp, va_list argList);
  231. virtual void AFX_CDECL InvokeHelper(DISPID dwDispID, WORD wFlags, VARTYPE vtRet,
  232. void* pvRet, const BYTE* pbParamInfo, ...);
  233. virtual void GetProperty(DISPID dwDispID, VARTYPE vtProp, void* pvProp) const;
  234. virtual void AFX_CDECL SetProperty(DISPID dwDispID, VARTYPE vtProp, ...);
  235. virtual BOOL AFX_CDECL SafeSetProperty(DISPID dwDispID, VARTYPE vtProp, ...);
  236. virtual DWORD GetStyle() const;
  237. virtual DWORD GetExStyle() const;
  238. virtual BOOL ModifyStyle(DWORD dwRemove, DWORD dwAdd, UINT nFlags);
  239. virtual BOOL ModifyStyleEx(DWORD dwRemove, DWORD dwAdd, UINT nFlags);
  240. virtual void SetWindowText(LPCTSTR lpszString);
  241. virtual void GetWindowText(CString& str) const;
  242. virtual int GetWindowText(LPTSTR lpszStringBuf, int nMaxCount) const;
  243. virtual int GetWindowTextLength() const;
  244. virtual int GetDlgCtrlID() const;
  245. virtual int SetDlgCtrlID(int nID);
  246. virtual void MoveWindow(int x, int y, int nWidth, int nHeight,
  247. BOOL bRepaint);
  248. virtual BOOL SetWindowPos(const CWnd* pWndInsertAfter, int x, int y,
  249. int cx, int cy, UINT nFlags);
  250. virtual BOOL ShowWindow(int nCmdShow);
  251. virtual BOOL IsWindowEnabled() const;
  252. virtual BOOL EnableWindow(BOOL bEnable);
  253. virtual CWnd* SetFocus();
  254. virtual void EnableDSC();
  255. virtual void BindDefaultProperty(DISPID dwDispID, VARTYPE vtProp, LPCTSTR szFieldName, CWnd* pDSCWnd);
  256. virtual void BindProperty(DISPID dwDispId, CWnd* pWndDSC);
  257. // Overridables
  258. virtual BOOL QuickActivate();
  259. // Attributes
  260. COleControlContainer* m_pCtrlCont;
  261. HWND m_hWnd;
  262. CWnd* m_pWndCtrl;
  263. UINT m_nID;
  264. CRect m_rect;
  265. IID m_iidEvents;
  266. LPOLEOBJECT m_pObject;
  267. LPOLEINPLACEOBJECT m_pInPlaceObject;
  268. LPOLEINPLACEACTIVEOBJECT m_pActiveObject;
  269. COleDispatchDriver m_dispDriver;
  270. DWORD m_dwEventSink;
  271. DWORD m_dwPropNotifySink;
  272. DWORD m_dwStyleMask;
  273. DWORD m_dwStyle;
  274. DWORD m_dwMiscStatus;
  275. CONTROLINFO m_ctlInfo;
  276. // Databound control stuff
  277. DWORD m_dwNotifyDBEvents; // INotifyDBEvents sink cookie
  278. CDataSourceControl* m_pDataSourceControl;
  279. CDataBoundProperty* m_pBindings;
  280. union {
  281. COleControlSite *m_pDSCSite;
  282. WORD m_ctlidRowSource;
  283. };
  284. DISPID m_defdispid;
  285. UINT m_dwType;
  286. CString m_strDataField;
  287. BOOL m_bIgnoreNotify;
  288. BOOL m_bIsDirty;
  289. VARIANT m_varResult;
  290. protected:
  291. // Implementation
  292. BOOL SetExtent();
  293. HRESULT CreateOrLoad(REFCLSID clsid, CFile* pPersist, BOOL bStorage,
  294. BSTR bstrLicKey);
  295. DWORD ConnectSink(REFIID iid, LPUNKNOWN punkSink);
  296. void DisconnectSink(REFIID iid, DWORD dwCookie);
  297. void AttachWindow();
  298. void DetachWindow();
  299. BOOL OnEvent(AFX_EVENT* pEvent);
  300. HRESULT GetCursor(DISPID dispid, LPUNKNOWN* ppcursorOut, LPVOID *ppcidOut);
  301. public:
  302. // Interface maps
  303. BEGIN_INTERFACE_PART(OleClientSite, IOleClientSite)
  304. INIT_INTERFACE_PART(COleControlSite, OleClientSite)
  305. STDMETHOD(SaveObject)();
  306. STDMETHOD(GetMoniker)(DWORD, DWORD, LPMONIKER*);
  307. STDMETHOD(GetContainer)(LPOLECONTAINER*);
  308. STDMETHOD(ShowObject)();
  309. STDMETHOD(OnShowWindow)(BOOL);
  310. STDMETHOD(RequestNewObjectLayout)();
  311. END_INTERFACE_PART(OleClientSite)
  312. BEGIN_INTERFACE_PART(OleIPSite, IOleInPlaceSite)
  313. INIT_INTERFACE_PART(COleControlSite, OleIPSite)
  314. STDMETHOD(GetWindow)(HWND*);
  315. STDMETHOD(ContextSensitiveHelp)(BOOL);
  316. STDMETHOD(CanInPlaceActivate)();
  317. STDMETHOD(OnInPlaceActivate)();
  318. STDMETHOD(OnUIActivate)();
  319. STDMETHOD(GetWindowContext)(LPOLEINPLACEFRAME*,
  320. LPOLEINPLACEUIWINDOW*, LPRECT, LPRECT, LPOLEINPLACEFRAMEINFO);
  321. STDMETHOD(Scroll)(SIZE);
  322. STDMETHOD(OnUIDeactivate)(BOOL);
  323. STDMETHOD(OnInPlaceDeactivate)();
  324. STDMETHOD(DiscardUndoState)();
  325. STDMETHOD(DeactivateAndUndo)();
  326. STDMETHOD(OnPosRectChange)(LPCRECT);
  327. END_INTERFACE_PART(OleIPSite)
  328. BEGIN_INTERFACE_PART(OleControlSite, IOleControlSite)
  329. INIT_INTERFACE_PART(COleControlSite, OleControlSite)
  330. STDMETHOD(OnControlInfoChanged)();
  331. STDMETHOD(LockInPlaceActive)(BOOL fLock);
  332. STDMETHOD(GetExtendedControl)(LPDISPATCH* ppDisp);
  333. STDMETHOD(TransformCoords)(POINTL* lpptlHimetric,
  334. POINTF* lpptfContainer, DWORD flags);
  335. STDMETHOD(TranslateAccelerator)(LPMSG lpMsg, DWORD grfModifiers);
  336. STDMETHOD(OnFocus)(BOOL fGotFocus);
  337. STDMETHOD(ShowPropertyFrame)();
  338. END_INTERFACE_PART(OleControlSite)
  339. BEGIN_INTERFACE_PART(AmbientProps, IDispatch)
  340. INIT_INTERFACE_PART(COleControlSite, AmbientProps)
  341. STDMETHOD(GetTypeInfoCount)(unsigned int*);
  342. STDMETHOD(GetTypeInfo)(unsigned int, LCID, ITypeInfo**);
  343. STDMETHOD(GetIDsOfNames)(REFIID, LPOLESTR*, unsigned int, LCID, DISPID*);
  344. STDMETHOD(Invoke)(DISPID, REFIID, LCID, unsigned short, DISPPARAMS*,
  345. VARIANT*, EXCEPINFO*, unsigned int*);
  346. END_INTERFACE_PART(AmbientProps)
  347. BEGIN_INTERFACE_PART(PropertyNotifySink, IPropertyNotifySink)
  348. INIT_INTERFACE_PART(COleControlSite, PropertyNotifySink)
  349. STDMETHOD(OnChanged)(DISPID dispid);
  350. STDMETHOD(OnRequestEdit)(DISPID dispid);
  351. END_INTERFACE_PART(PropertyNotifySink)
  352. BEGIN_INTERFACE_PART(EventSink, IDispatch)
  353. INIT_INTERFACE_PART(COleControlSite, EventSink)
  354. STDMETHOD(GetTypeInfoCount)(unsigned int*);
  355. STDMETHOD(GetTypeInfo)(unsigned int, LCID, ITypeInfo**);
  356. STDMETHOD(GetIDsOfNames)(REFIID, LPOLESTR*, unsigned int, LCID, DISPID*);
  357. STDMETHOD(Invoke)(DISPID, REFIID, LCID, unsigned short, DISPPARAMS*,
  358. VARIANT*, EXCEPINFO*, unsigned int*);
  359. END_INTERFACE_PART(EventSink)
  360. BEGIN_INTERFACE_PART(BoundObjectSite, IBoundObjectSite)
  361. STDMETHOD(GetCursor)(DISPID dispid, LPLPCURSOR ppcursorOut, LPVOID *ppcidOut);
  362. END_INTERFACE_PART(BoundObjectSite)
  363. BEGIN_INTERFACE_PART(NotifyDBEvents, INotifyDBEvents)
  364. STDMETHOD(OKToDo)(DWORD dwEventWhat, ULONG cReasons, DBNOTIFYREASON rgReasons[]);
  365. STDMETHOD(Cancelled)(DWORD dwEventWhat, ULONG cReasons, DBNOTIFYREASON rgReasons[]);
  366. STDMETHOD(SyncBefore)(DWORD dwEventWhat, ULONG cReasons, DBNOTIFYREASON rgReasons[]);
  367. STDMETHOD(AboutToDo)(DWORD dwEventWhat, ULONG cReasons, DBNOTIFYREASON rgReasons[]);
  368. STDMETHOD(FailedToDo)(DWORD dwEventWhat, ULONG cReasons, DBNOTIFYREASON rgReasons[]);
  369. STDMETHOD(SyncAfter)(DWORD dwEventWhat, ULONG cReasons, DBNOTIFYREASON rgReasons[]);
  370. STDMETHOD(DidEvent)(DWORD dwEventWhat, ULONG cReasons, DBNOTIFYREASON rgReasons[]);
  371. // Not part of i/f - just a helper
  372. HRESULT FireEvent(DWORD dwEventWhat, ULONG cReasons,
  373. DBNOTIFYREASON rgReasons[], DSCSTATE nState);
  374. END_INTERFACE_PART(NotifyDBEvents)
  375. BEGIN_INTERFACE_PART(RowsetNotify, IRowsetNotify)
  376. STDMETHOD(OnFieldChange)(IRowset* pRowset, HROW hRow, ULONG cColumns, ULONG rgColumns[], DBREASON eReason, DBEVENTPHASE ePhase, BOOL fCantDeny);
  377. STDMETHOD(OnRowChange)(IRowset* pRowset, ULONG cRows, const HROW rghRows[], DBREASON eReason, DBEVENTPHASE ePhase, BOOL fCantDeny);
  378. STDMETHOD(OnRowsetChange)(IRowset* pRowset, DBREASON eReason, DBEVENTPHASE ePhase, BOOL fCantDeny);
  379. END_INTERFACE_PART(RowsetNotify)
  380. DECLARE_INTERFACE_MAP()
  381. };
  382. /////////////////////////////////////////////////////////////////////////////
  383. // OLE control container manager
  384. class COccManager : public CNoTrackObject
  385. {
  386. // Operations
  387. public:
  388. // Event handling
  389. virtual BOOL OnEvent(CCmdTarget* pCmdTarget, UINT idCtrl, AFX_EVENT* pEvent,
  390. AFX_CMDHANDLERINFO* pHandlerInfo);
  391. // Internal object creation
  392. virtual COleControlContainer* CreateContainer(CWnd* pWnd);
  393. virtual COleControlSite* CreateSite(COleControlContainer* pCtrlCont);
  394. // Dialog creation
  395. virtual const DLGTEMPLATE* PreCreateDialog(_AFX_OCC_DIALOG_INFO* pOccDialogInfo,
  396. const DLGTEMPLATE* pOrigTemplate);
  397. virtual void PostCreateDialog(_AFX_OCC_DIALOG_INFO* pOccDialogInfo);
  398. virtual DLGTEMPLATE* SplitDialogTemplate(const DLGTEMPLATE* pTemplate,
  399. DLGITEMTEMPLATE** ppOleDlgItems);
  400. virtual BOOL CreateDlgControls(CWnd* pWndParent, LPCTSTR lpszResourceName,
  401. _AFX_OCC_DIALOG_INFO* pOccDialogInfo);
  402. virtual BOOL CreateDlgControls(CWnd* pWndParent, void* lpResource,
  403. _AFX_OCC_DIALOG_INFO* pOccDialogInfo);
  404. // Dialog manager
  405. virtual BOOL IsDialogMessage(CWnd* pWndDlg, LPMSG lpMsg);
  406. static BOOL AFX_CDECL IsLabelControl(CWnd* pWnd);
  407. static BOOL AFX_CDECL IsMatchingMnemonic(CWnd* pWnd, LPMSG lpMsg);
  408. static void AFX_CDECL SetDefaultButton(CWnd* pWnd, BOOL bDefault);
  409. static DWORD AFX_CDECL GetDefBtnCode(CWnd* pWnd);
  410. // Implementation
  411. protected:
  412. // Dialog creation
  413. HWND CreateDlgControl(CWnd* pWndParent, HWND hwAfter, BOOL bDialogEx,
  414. LPDLGITEMTEMPLATE pDlgItem, WORD nMsg, BYTE* lpData, DWORD cb);
  415. // Databinding
  416. void BindControls(CWnd* pWndParent);
  417. // Dialog manager
  418. static void AFX_CDECL UIActivateControl(CWnd* pWndNewFocus);
  419. static void AFX_CDECL UIDeactivateIfNecessary(CWnd* pWndOldFocus, CWnd* pWndNewFocus);
  420. };
  421. struct _AFX_OCC_DIALOG_INFO
  422. {
  423. DLGTEMPLATE* m_pNewTemplate;
  424. DLGITEMTEMPLATE** m_ppOleDlgItems;
  425. };
  426. #endif // !_AFX_NO_OCC_SUPPORT