home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / common / msdev98 / template / atl / control.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-06-16  |  16.9 KB  |  523 lines

  1. [!if=(SubclassWindow, "SysListView32")][!set(UseCommonControls, "TRUE")][!endif]
  2. [!if=(SubclassWindow, "SysTreeView32")][!set(UseCommonControls, "TRUE")][!endif]
  3. [!if=(SubclassWindow, "SysAnimate32")][!set(UseCommonControls, "TRUE")][!endif]
  4. [!if=(SubclassWindow, "SysHeader32")][!set(UseCommonControls, "TRUE")][!endif]
  5. [!if=(SubclassWindow, "SysTabControl32")][!set(UseCommonControls, "TRUE")][!endif]
  6.  
  7. [!if=(SubclassWindow, "Edit")][!set(UseArrowKeys, "TRUE")][!endif]
  8. [!if=(SubclassWindow, "ListBox")][!set(UseArrowKeys, "TRUE")][!endif]
  9. [!if=(SubclassWindow, "ComboBox")][!set(UseArrowKeys, "TRUE")][!endif]
  10. [!if=(SubclassWindow, "ScrollBar")][!set(UseArrowKeys, "TRUE")][!endif]
  11. [!if=(SubclassWindow, "RichEdit")][!set(UseArrowKeys, "TRUE")][!endif]
  12. [!if=(SubclassWindow, "SysListView32")][!set(UseArrowKeys, "TRUE")][!endif]
  13. [!if=(SubclassWindow, "SysTreeView32")][!set(UseArrowKeys, "TRUE")][!endif]
  14. [!if=(SubclassWindow, "SysTabControl32")][!set(UseArrowKeys, "TRUE")][!endif]
  15.  
  16. [!if=(FreeThreadedMarshaler, "TRUE")]
  17.     [!set(NeedsGetControllingUnknown, "TRUE")]
  18. [!endif]
  19.  
  20. // [!HeaderName] : Declaration of the [!ClassName]
  21. [!crlf]
  22.  
  23. [!if=(FileExists, "FALSE")]
  24. #ifndef __[!UpperShortName]_H_
  25. #define __[!UpperShortName]_H_
  26. [!crlf]
  27. #include "resource.h"       // main symbols
  28. #include <atlctl.h>
  29. [!if=(UseCommonControls, "TRUE")]#include <commctrl.h>[!endif]
  30. [!if=(SubclassWindow, "RichEdit")]#include <richedit.h>[!endif]
  31. [!else]
  32. [!AddIncludeFile(TargetFile, "resource.h")]
  33. [!AddIncludeFile(TargetFile, "<atlctl.h>")]
  34. [!if=(UseCommonControls, "TRUE")][!AddIncludeFile(TargetFile, "<commctrl.h>")][!endif]
  35. [!if=(SubclassWindow, "RichEdit")][!AddIncludeFile(TargetFile, "<richedit.h>")][!endif]
  36. [!endif]
  37.  
  38. [!crlf]
  39. [!crlf]
  40. /////////////////////////////////////////////////////////////////////////////
  41. // [!ClassName]
  42. class ATL_NO_VTABLE [!ClassName] : 
  43. [!if=(ThreadingModel, "Single")]
  44.     public CComObjectRootEx<CComSingleThreadModel>,
  45. [!endif]
  46. [!if=(ThreadingModel, "Apartment")]
  47.     public CComObjectRootEx<CComSingleThreadModel>,
  48. [!endif]
  49. [!if=(ThreadingModel, "Both")]
  50.     public CComObjectRootEx<CComMultiThreadModel>,
  51. [!endif]
  52. [!if=(ThreadingModel, "Free")]
  53.     public CComObjectRootEx<CComMultiThreadModel>,
  54. [!endif]
  55. [!if=(StockPropEnabled, "TRUE")]
  56.     public CStockPropImpl<[!ClassName], [!InterfaceName], &IID_[!InterfaceName], &LIBID_[!LibName]>,
  57. [!else]
  58.     [!if=(Dual, "TRUE")]public IDispatchImpl<[!InterfaceName], &IID_[!InterfaceName], &LIBID_[!LibName]>,[!else]public [!InterfaceName],[!endif]
  59. [!endif]
  60. [!if=(HTMLControl, "TRUE")]
  61.     public IDispatchImpl<[!InterfaceName]UI, &IID_[!InterfaceName]UI, &LIBID_[!LibName]>,
  62. [!endif]
  63. [!if=(CompositeControl, "TRUE")]
  64.     public CComCompositeControl<[!ClassName]>,
  65. [!else]
  66.     public CComControl<[!ClassName]>,
  67. [!endif]
  68.     public IPersistStreamInitImpl<[!ClassName]>,
  69.     public IOleControlImpl<[!ClassName]>,
  70.     public IOleObjectImpl<[!ClassName]>,
  71.     public IOleInPlaceActiveObjectImpl<[!ClassName]>,
  72.     public IViewObjectExImpl<[!ClassName]>,
  73.     public IOleInPlaceObjectWindowlessImpl<[!ClassName]>,
  74. [!if=(ErrorInfoEnabled, "TRUE")]
  75.     public ISupportErrorInfo,
  76. [!endif]
  77. [!if=(ConnectionPointsEnabled, "TRUE")]
  78.     public IConnectionPointContainerImpl<[!ClassName]>,
  79. [!endif]
  80. [!if=(IOBJECTWITHSITE, "TRUE")]
  81.     public IObjectWithSiteImpl<[!ClassName]>,
  82. [!endif]
  83. [!if=(ISERVICEPROVIDER, "TRUE")]
  84.     public IServiceProviderImpl<[!ClassName]>,
  85. [!endif]
  86.  
  87. [!if=(IPERSISTSTORAGE, "TRUE")]
  88.     public IPersistStorageImpl<[!ClassName]>,
  89. [!endif]
  90. [!if=(ISPECIFYPROPERTYPAGES, "TRUE")]
  91.     public ISpecifyPropertyPagesImpl<[!ClassName]>,
  92. [!endif]
  93. [!if=(IQUICKACTIVATE, "TRUE")]
  94.     public IQuickActivateImpl<[!ClassName]>,
  95. [!endif]
  96. [!if=(IDATAOBJECT, "TRUE")]
  97.     public IDataObjectImpl<[!ClassName]>,
  98. [!endif]
  99. [!if=(ConnectionPointsEnabled, "TRUE")]
  100. [!if=(IPROVIDECLASSINFO2, "TRUE")]
  101.     public IProvideClassInfo2Impl<&CLSID_[!CoClassName], &DIID__[!InterfaceName]Events, &LIBID_[!LibName]>,
  102. [!endif]
  103. [!if=(IPROPERTYNOTIFYSINK, "TRUE")]
  104.     public IPropertyNotifySinkCP<[!ClassName]>,
  105. [!endif]
  106. [!else]
  107. [!if=(IPROVIDECLASSINFO2, "TRUE")]
  108.     public IProvideClassInfo2Impl<&CLSID_[!CoClassName], [!ConnectionPointInterface], &LIBID_[!LibName]>,
  109. [!endif]
  110. [!endif]
  111.     public CComCoClass<[!ClassName], &CLSID_[!CoClassName]>
  112. {
  113. public:
  114. [!if!=(SubclassWindow, "")]
  115.     CContainedWindow m_ctl[!SubclassWindowSymbol];
  116.     [!crlf]
  117. [!endif]
  118.  
  119.     [!ClassName]()[!if!=(SubclassWindow, "")] :    
  120.         m_ctl[!SubclassWindowSymbol](_T("[!SubclassWindow]"), this, 1)[!endif]
  121.     {
  122. [!if=(FreeThreadedMarshaler, "TRUE")]
  123.         m_pUnkMarshaler = NULL;
  124. [!endif]
  125. [!if!=(SubclassWindow, "")]
  126. [!set(WindowedOnlyEnabled,"TRUE")]
  127. [!endif]
  128. [!if=(WindowedOnlyEnabled, "TRUE")]
  129.         m_bWindowOnly = TRUE;
  130. [!endif]
  131. [!if=(CompositeControl, "TRUE")]
  132.         CalcExtent(m_sizeExtent);
  133. [!endif]
  134.     }
  135. [!crlf]
  136.  
  137. [!if=(NeedsGetControllingUnknown, "TRUE")]
  138. DECLARE_GET_CONTROLLING_UNKNOWN()
  139. [!endif]
  140. DECLARE_REGISTRY_RESOURCEID([!IDR_REGISTRYID])
  141.  
  142. [!if=(Aggregatable, "NO")]
  143. DECLARE_NOT_AGGREGATABLE([!ClassName])
  144. [!endif]
  145. [!if=(Aggregatable, "ONLY")]
  146. DECLARE_ONLY_AGGREGATABLE([!ClassName])
  147. [!endif]
  148. [!crlf]
  149. DECLARE_PROTECT_FINAL_CONSTRUCT()
  150.  
  151. [!crlf]
  152. BEGIN_COM_MAP([!ClassName])
  153.     COM_INTERFACE_ENTRY([!InterfaceName])
  154. [!if=(HTMLControl, "TRUE")]
  155.     COM_INTERFACE_ENTRY([!InterfaceName]UI)
  156. [!endif]
  157. [!if=(Dual, "TRUE")]
  158. [!if=(HTMLControl, "TRUE")]
  159.     COM_INTERFACE_ENTRY2(IDispatch, [!InterfaceName])
  160. [!else]
  161.     COM_INTERFACE_ENTRY(IDispatch)
  162. [!endif]
  163. [!else]
  164. [!if=(HTMLControl, "TRUE")]
  165.     COM_INTERFACE_ENTRY(IDispatch)
  166. [!endif]
  167. [!endif]
  168.     COM_INTERFACE_ENTRY(IViewObjectEx)
  169.     COM_INTERFACE_ENTRY(IViewObject2)
  170.     COM_INTERFACE_ENTRY(IViewObject)
  171.     COM_INTERFACE_ENTRY(IOleInPlaceObjectWindowless)
  172.     COM_INTERFACE_ENTRY(IOleInPlaceObject)
  173.     COM_INTERFACE_ENTRY2(IOleWindow, IOleInPlaceObjectWindowless)
  174.     COM_INTERFACE_ENTRY(IOleInPlaceActiveObject)
  175.     COM_INTERFACE_ENTRY(IOleControl)
  176.     COM_INTERFACE_ENTRY(IOleObject)
  177.     COM_INTERFACE_ENTRY(IPersistStreamInit)
  178.     COM_INTERFACE_ENTRY2(IPersist, IPersistStreamInit)
  179. [!if=(ErrorInfoEnabled, "TRUE")]
  180.     COM_INTERFACE_ENTRY(ISupportErrorInfo)
  181. [!endif]
  182. [!if=(ConnectionPointsEnabled, "TRUE")]
  183.     COM_INTERFACE_ENTRY(IConnectionPointContainer)
  184. [!endif]
  185.  
  186. [!if=(ISPECIFYPROPERTYPAGES, "TRUE")]
  187.     COM_INTERFACE_ENTRY(ISpecifyPropertyPages)
  188. [!endif]
  189. [!if=(IQUICKACTIVATE, "TRUE")]
  190.     COM_INTERFACE_ENTRY(IQuickActivate)
  191. [!endif]
  192. [!if=(IPERSISTSTORAGE, "TRUE")]
  193.     COM_INTERFACE_ENTRY(IPersistStorage)
  194. [!endif]
  195. [!if=(IDATAOBJECT, "TRUE")]
  196.     COM_INTERFACE_ENTRY(IDataObject)
  197. [!endif]
  198. [!if=(IPROVIDECLASSINFO2, "TRUE")]
  199.     COM_INTERFACE_ENTRY(IProvideClassInfo)
  200.     COM_INTERFACE_ENTRY(IProvideClassInfo2)
  201. [!endif]
  202. [!if=(IOBJECTWITHSITE, "TRUE")]
  203.     COM_INTERFACE_ENTRY(IObjectWithSite)
  204. [!endif]
  205. [!if=(ISERVICEPROVIDER, "TRUE")]
  206.     COM_INTERFACE_ENTRY(IServiceProvider)
  207. [!endif]
  208.  
  209. [!if=(FreeThreadedMarshaler, "TRUE")]
  210.     COM_INTERFACE_ENTRY_AGGREGATE(IID_IMarshal, m_pUnkMarshaler.p)
  211. [!endif]
  212. END_COM_MAP()
  213.  
  214. [!crlf]
  215. BEGIN_PROP_MAP([!ClassName])
  216.     PROP_DATA_ENTRY("_cx", m_sizeExtent.cx, VT_UI4)
  217.     PROP_DATA_ENTRY("_cy", m_sizeExtent.cy, VT_UI4)
  218. [!if=(SP_APPEARANCE, "TRUE")]    PROP_ENTRY("Appearance", DISPID_APPEARANCE, CLSID_NULL)[!endif]
  219. [!if=(SP_AUTOSIZE, "TRUE")]    PROP_ENTRY("AutoSize", DISPID_AUTOSIZE, CLSID_NULL)[!endif]
  220. [!if=(SP_BACKCOLOR, "TRUE")]    PROP_ENTRY("BackColor", DISPID_BACKCOLOR, CLSID_StockColorPage)[!endif]
  221. [!if=(SP_BACKSTYLE, "TRUE")]    PROP_ENTRY("BackStyle", DISPID_BACKSTYLE, CLSID_NULL)[!endif]
  222. [!if=(SP_BORDERCOLOR, "TRUE")]    PROP_ENTRY("BorderColor", DISPID_BORDERCOLOR, CLSID_StockColorPage)[!endif]
  223. [!if=(SP_BORDERSTYLE, "TRUE")]    PROP_ENTRY("BorderStyle", DISPID_BORDERSTYLE, CLSID_NULL)[!endif]
  224. [!if=(SP_BORDERVISIBLE, "TRUE")]    PROP_ENTRY("BorderVisible", DISPID_BORDERVISIBLE, CLSID_NULL)[!endif]
  225. [!if=(SP_BORDERWIDTH, "TRUE")]    PROP_ENTRY("BorderWidth", DISPID_BORDERWIDTH, CLSID_NULL)[!endif]
  226. [!if=(SP_CAPTION, "TRUE")]    PROP_ENTRY("Caption", DISPID_CAPTION, CLSID_NULL)[!endif]
  227. [!if=(SP_DRAWMODE, "TRUE")]    PROP_ENTRY("DrawMode", DISPID_DRAWMODE, CLSID_NULL)[!endif]
  228. [!if=(SP_DRAWSTYLE, "TRUE")]    PROP_ENTRY("DrawStyle", DISPID_DRAWSTYLE, CLSID_NULL)[!endif]
  229. [!if=(SP_DRAWWIDTH, "TRUE")]    PROP_ENTRY("DrawWidth", DISPID_DRAWWIDTH, CLSID_NULL)[!endif]
  230. [!if=(SP_ENABLED, "TRUE")]    PROP_ENTRY("Enabled", DISPID_ENABLED, CLSID_NULL)[!endif]
  231. [!if=(SP_FILLCOLOR, "TRUE")]    PROP_ENTRY("FillColor", DISPID_FILLCOLOR, CLSID_StockColorPage)[!endif]
  232. [!if=(SP_FILLSTYLE, "TRUE")]    PROP_ENTRY("FillStyle", DISPID_FILLSTYLE, CLSID_NULL)[!endif]
  233. [!if=(SP_FONT, "TRUE")]    PROP_ENTRY("Font", DISPID_FONT, CLSID_StockFontPage)[!endif]
  234. [!if=(SP_FORECOLOR, "TRUE")]    PROP_ENTRY("ForeColor", DISPID_FORECOLOR, CLSID_StockColorPage)[!endif]
  235. [!if=(SP_HWND, "TRUE")]    PROP_ENTRY("HWND", DISPID_HWND, CLSID_NULL)[!endif]
  236. [!if=(SP_MOUSEICON, "TRUE")]    PROP_ENTRY("MouseIcon", DISPID_MOUSEICON, CLSID_StockPicturePage)[!endif]
  237. [!if=(SP_MOUSEPOINTER, "TRUE")]    PROP_ENTRY("MousePointer", DISPID_MOUSEPOINTER, CLSID_NULL)[!endif]
  238. [!if=(SP_PICTURE, "TRUE")]    PROP_ENTRY("Picture", DISPID_PICTURE, CLSID_StockPicturePage)[!endif]
  239. [!if=(SP_READYSTATE, "TRUE")]    PROP_ENTRY("ReadyState", DISPID_READYSTATE, CLSID_NULL)[!endif]
  240. [!if=(SP_TABSTOP, "TRUE")]    PROP_ENTRY("TabStop", DISPID_TABSTOP, CLSID_NULL)[!endif]
  241. [!if=(SP_TEXT, "TRUE")]    PROP_ENTRY("Text", DISPID_TEXT, CLSID_NULL)[!endif]
  242. [!if=(SP_VALID, "TRUE")]    PROP_ENTRY("Valid", DISPID_VALID, CLSID_NULL)[!endif]
  243.     // Example entries
  244.     // PROP_ENTRY("Property Description", dispid, clsid)
  245.     // PROP_PAGE(CLSID_StockColorPage)
  246. END_PROP_MAP()
  247. [!crlf]
  248.  
  249. [!if=(ConnectionPointsEnabled, "TRUE")]
  250. BEGIN_CONNECTION_POINT_MAP([!ClassName])
  251. [!if=(IPROPERTYNOTIFYSINK, "TRUE")]
  252.     CONNECTION_POINT_ENTRY(IID_IPropertyNotifySink)
  253. [!endif]
  254. END_CONNECTION_POINT_MAP()
  255. [!crlf]
  256. [!endif]
  257.  
  258. BEGIN_MSG_MAP([!ClassName])
  259. [!if=(HTMLControl, "TRUE")]
  260.     MESSAGE_HANDLER(WM_CREATE, OnCreate)
  261. [!endif]
  262. [!if!=(SubclassWindow, "")]
  263.     MESSAGE_HANDLER(WM_CREATE, OnCreate)
  264.     MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
  265. [!if=(SubclassWindow, "RichEdit")]
  266.     MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
  267. [!endif]
  268. [!endif]
  269. [!if=(CompositeControl, "TRUE")]
  270.     CHAIN_MSG_MAP(CComCompositeControl<[!ClassName]>)
  271. [!else]
  272.     CHAIN_MSG_MAP(CComControl<[!ClassName]>)
  273. [!endif]
  274. [!if!=(SubclassWindow, "")]
  275. ALT_MSG_MAP(1)
  276.     // Replace this with message map entries for superclassed [!SubclassWindow]
  277. [!endif]
  278. [!if=(SubclassWindow, "")]
  279. [!if!(CompositeControl)]
  280.     DEFAULT_REFLECTION_HANDLER()
  281. [!endif]
  282. [!endif]
  283. END_MSG_MAP()
  284. // Handler prototypes:
  285. //  LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  286. //  LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  287. //  LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  288.  
  289. [!if=(CompositeControl, "TRUE")]
  290. [!crlf]
  291. BEGIN_SINK_MAP([!ClassName])
  292.     //Make sure the Event Handlers have __stdcall calling convention
  293. END_SINK_MAP()
  294. [!crlf]
  295.  
  296.     STDMETHOD(OnAmbientPropertyChange)(DISPID dispid)
  297.     {
  298.         if (dispid == DISPID_AMBIENT_BACKCOLOR)
  299.         {
  300.             SetBackgroundColorFromAmbient();
  301.             FireViewChange();
  302.         }
  303.         return IOleControlImpl<[!ClassName]>::OnAmbientPropertyChange(dispid);
  304.     }
  305.  
  306. [!endif]
  307. [!crlf]
  308. [!if=(UseArrowKeys, "TRUE")]
  309.     BOOL PreTranslateAccelerator(LPMSG pMsg, HRESULT& hRet)
  310.     {
  311.         if(pMsg->message == WM_KEYDOWN && 
  312.             (pMsg->wParam == VK_LEFT || 
  313.             pMsg->wParam == VK_RIGHT ||
  314.             pMsg->wParam == VK_UP ||
  315.             pMsg->wParam == VK_DOWN))
  316.         {
  317.             hRet = S_FALSE;
  318.             return TRUE;
  319.         }
  320.         //TODO: Add your additional accelerator handling code here
  321.         return FALSE;
  322.     }
  323. [!endif]
  324.  
  325. [!crlf]
  326. [!if!=(SubclassWindow, "")]
  327.     LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  328.     {
  329.         LRESULT lRes = CComControl<[!ClassName]>::OnSetFocus(uMsg, wParam, lParam, bHandled);
  330.         if (m_bInPlaceActive)
  331.         {
  332.             DoVerbUIActivate(&m_rcPos,  NULL);
  333.             if(!IsChild(::GetFocus()))
  334.                 m_ctl[!SubclassWindowSymbol].SetFocus();
  335.         }
  336.         return lRes;
  337.     }
  338. [!if=(SubclassWindow, "RichEdit")]
  339. [!crlf]
  340.     HINSTANCE m_hLibRichEdit;
  341. [!endif]
  342. [!crlf]
  343.     LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
  344.     {
  345.         RECT rc;
  346.         GetWindowRect(&rc);
  347.         rc.right -= rc.left;
  348.         rc.bottom -= rc.top;
  349.         rc.top = rc.left = 0;
  350. [!if=(UseCommonControls, "TRUE")]        InitCommonControls();[!endif]
  351. [!if=(SubclassWindow, "RichEdit")]        m_hLibRichEdit = LoadLibrary(_T("RICHED32.DLL"));[!endif]
  352.         m_ctl[!SubclassWindowSymbol].Create(m_hWnd, rc);
  353.         return 0;
  354.     }
  355. [!if=(SubclassWindow, "RichEdit")]
  356.     LRESULT OnDestroy(UINT, WPARAM, LPARAM, BOOL&)
  357.     {
  358.         m_ctl[!SubclassWindowSymbol].DestroyWindow();
  359.         FreeLibrary(m_hLibRichEdit);
  360.         return 0;
  361.     }
  362. [!endif]
  363.     STDMETHOD(SetObjectRects)(LPCRECT prcPos,LPCRECT prcClip)
  364.     {
  365.         IOleInPlaceObjectWindowlessImpl<[!ClassName]>::SetObjectRects(prcPos, prcClip);
  366.         int cx, cy;
  367.         cx = prcPos->right - prcPos->left;
  368.         cy = prcPos->bottom - prcPos->top;
  369.         ::SetWindowPos(m_ctl[!SubclassWindowSymbol].m_hWnd, NULL, 0,
  370.             0, cx, cy, SWP_NOZORDER | SWP_NOACTIVATE);
  371.         return S_OK;
  372.     }
  373. [!endif]
  374.  
  375. [!if=(FreeThreadedMarshaler, "TRUE")]
  376. [!crlf]
  377.     HRESULT FinalConstruct()
  378.     {
  379.         return CoCreateFreeThreadedMarshaler(
  380.             GetControllingUnknown(), &m_pUnkMarshaler.p);
  381.     }
  382. [!crlf]
  383.     void FinalRelease()
  384.     {
  385.         m_pUnkMarshaler.Release();
  386.     }
  387.  
  388. [!crlf]
  389.     CComPtr<IUnknown> m_pUnkMarshaler;
  390. [!endif]
  391.  
  392. [!if=(ErrorInfoEnabled, "TRUE")]
  393. [!crlf]
  394. // ISupportsErrorInfo
  395.     STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid)
  396.     {
  397.         static const IID* arr[] = 
  398.         {
  399.             &IID_[!InterfaceName],
  400.         };
  401.  
  402.         for (int i=0; i<sizeof(arr)/sizeof(arr[0]); i++)
  403.         {
  404.             if (InlineIsEqualGUID(*arr[i], riid))
  405.                 return S_OK;
  406.         }
  407.         return S_FALSE;
  408.     }
  409. [!endif]
  410. [!crlf]
  411. // IViewObjectEx
  412. [!if=(Opaque, "TRUE")]
  413. [!if=(SolidBackground, "TRUE")]
  414.     DECLARE_VIEW_STATUS(VIEWSTATUS_SOLIDBKGND | VIEWSTATUS_OPAQUE)
  415. [!else]
  416.     DECLARE_VIEW_STATUS(VIEWSTATUS_OPAQUE)
  417. [!endif]
  418. [!else]
  419.     DECLARE_VIEW_STATUS(0)
  420. [!endif]
  421. [!crlf]
  422. // [!InterfaceName]
  423. public:
  424. [!if!(HTMLControl)]
  425. [!if!(CompositeControl)]
  426. [!if=(SubclassWindow, "")]
  427.  
  428. [!if=(NormalizeDCEnabled, "TRUE")]
  429. [!crlf]
  430.     HRESULT OnDraw(ATL_DRAWINFO& di)
  431. [!else]
  432. [!crlf]
  433.     HRESULT OnDrawAdvanced(ATL_DRAWINFO& di)
  434. [!endif]
  435.     {
  436.         RECT& rc = *(RECT*)di.prcBounds;
  437.         Rectangle(di.hdcDraw, rc.left, rc.top, rc.right, rc.bottom);
  438. [!crlf]
  439.         SetTextAlign(di.hdcDraw, TA_CENTER|TA_BASELINE);
  440.         LPCTSTR pszText = _T("ATL 3.0 : [!ShortName]");
  441.         TextOut(di.hdcDraw, 
  442.             (rc.left + rc.right) / 2, 
  443.             (rc.top + rc.bottom) / 2, 
  444.             pszText, 
  445.             lstrlen(pszText));
  446. [!crlf]
  447.         return S_OK;
  448.     }
  449.  
  450. [!endif]
  451. [!endif]
  452. [!endif]
  453.  
  454. [!if=(SP_APPEARANCE, "TRUE")]    short m_nAppearance;[!endif]
  455. [!if=(SP_BACKCOLOR, "TRUE")]    OLE_COLOR m_clrBackColor;[!endif]
  456. [!if=(SP_BACKSTYLE, "TRUE")]    LONG m_nBackStyle;[!endif]
  457. [!if=(SP_BORDERCOLOR, "TRUE")]    OLE_COLOR m_clrBorderColor;[!endif]
  458. [!if=(SP_BORDERSTYLE, "TRUE")]    LONG m_nBorderStyle;[!endif]
  459. [!if=(SP_BORDERVISIBLE, "TRUE")]    BOOL m_bBorderVisible;[!endif]
  460. [!if=(SP_BORDERWIDTH, "TRUE")]    LONG m_nBorderWidth;[!endif]
  461. [!if=(SP_CAPTION, "TRUE")]    CComBSTR m_bstrCaption;[!endif]
  462. [!if=(SP_DRAWMODE, "TRUE")]    LONG m_nDrawMode;[!endif]
  463. [!if=(SP_DRAWSTYLE, "TRUE")]    LONG m_nDrawStyle;[!endif]
  464. [!if=(SP_DRAWWIDTH, "TRUE")]    LONG m_nDrawWidth;[!endif]
  465. [!if=(SP_ENABLED, "TRUE")]    BOOL m_bEnabled;[!endif]
  466. [!if=(SP_FILLCOLOR, "TRUE")]    OLE_COLOR m_clrFillColor;[!endif]
  467. [!if=(SP_FILLSTYLE, "TRUE")]    LONG m_nFillStyle;[!endif]
  468. [!if=(SP_FONT, "TRUE")]    CComPtr<IFontDisp> m_pFont;[!endif]
  469. [!if=(SP_FORECOLOR, "TRUE")]    OLE_COLOR m_clrForeColor;[!endif]
  470. [!if=(SP_MOUSEICON, "TRUE")]    CComPtr<IPictureDisp> m_pMouseIcon;[!endif]
  471. [!if=(SP_MOUSEPOINTER, "TRUE")]    LONG m_nMousePointer;[!endif]
  472. [!if=(SP_PICTURE, "TRUE")]    CComPtr<IPictureDisp> m_pPicture;[!endif]
  473. [!if=(SP_READYSTATE, "TRUE")]    LONG m_nReadyState;[!endif]
  474. [!if=(SP_TABSTOP, "TRUE")]    BOOL m_bTabStop;[!endif]
  475. [!if=(SP_TEXT, "TRUE")]    CComBSTR m_bstrText;[!endif]
  476. [!if=(SP_VALID, "TRUE")]    BOOL m_bValid;[!endif]
  477.  
  478. [!if=(CompositeControl, "TRUE")]
  479. [!crlf]
  480.     enum { IDD = [!IDD_DIALOGID] };
  481. [!endif]
  482. [!if=(HTMLControl, "TRUE")]
  483. [!crlf]
  484. // [!InterfaceName]UI
  485. public:
  486.     // Example method called by the HTML to change the <BODY> background color
  487.     STDMETHOD(OnClick)(IDispatch* pdispBody, VARIANT varColor)
  488.     {
  489.         CComQIPtr<IHTMLBodyElement> spBody(pdispBody);
  490.         if (spBody != NULL)
  491.             spBody->put_bgColor(varColor);
  492.         return S_OK;
  493.     }
  494.  
  495. [!crlf]
  496.     LRESULT OnCreate(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
  497.     {
  498.         CAxWindow wnd(m_hWnd);
  499.         HRESULT hr = wnd.CreateControl([!IDH_HTMLID]);
  500.         if (SUCCEEDED(hr))
  501.             hr = wnd.SetExternalDispatch(static_cast<[!InterfaceName]UI*>(this));
  502.         if (SUCCEEDED(hr))
  503.             hr = wnd.QueryControl(IID_IWebBrowser2, (void**)&m_spBrowser);
  504.         return SUCCEEDED(hr) ? 0 : -1;
  505.     }
  506. [!if=(ISERVICEPROVIDER, "TRUE")]
  507. [!crlf]
  508.     STDMETHOD(_InternalQueryService)(REFGUID guidService, REFIID riid, void** ppvObject)
  509.     {
  510.         return E_NOTIMPL;
  511.     }
  512. [!endif]
  513. [!crlf]
  514.     CComPtr<IWebBrowser2> m_spBrowser;
  515. [!endif]
  516.  
  517. };
  518.  
  519. [!crlf]
  520. [!if=(FileExists, "FALSE")]
  521. #endif //__[!UpperShortName]_H_
  522. [!endif]
  523.