home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / msdn_vcb / samples / vc98 / mfc / controls / button / btnctl.cpp < prev    next >
C/C++ Source or Header  |  1998-03-26  |  7KB  |  253 lines

  1. // btnctl.cpp : Implementation of the CButtonCtrl OLE control class.
  2. //
  3. // This is a part of the Microsoft Foundation Classes C++ library.
  4. // Copyright (C) 1992-1998 Microsoft Corporation
  5. // All rights reserved.
  6. //
  7. // This source code is only intended as a supplement to the
  8. // Microsoft Foundation Classes Reference and related
  9. // electronic documentation provided with the library.
  10. // See these sources for detailed information regarding the
  11. // Microsoft Foundation Classes product.
  12.  
  13. #include "stdafx.h"
  14. #include "button.h"
  15. #include "btnctl.h"
  16. #include "btnppg.h"
  17.  
  18. #ifdef _DEBUG
  19. #undef THIS_FILE
  20. static char BASED_CODE THIS_FILE[] = __FILE__;
  21. #endif
  22.  
  23.  
  24. IMPLEMENT_DYNCREATE(CButtonCtrl, COleControl)
  25.  
  26.  
  27. /////////////////////////////////////////////////////////////////////////////
  28. // Message map
  29.  
  30. BEGIN_MESSAGE_MAP(CButtonCtrl, COleControl)
  31.     //{{AFX_MSG_MAP(CButtonCtrl)
  32.     ON_MESSAGE(OCM_COMMAND, OnOcmCommand)
  33.     ON_COMMAND(ID_HELP_BUTTONCONTROL, CmdAbout)
  34.     //}}AFX_MSG_MAP
  35.     ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
  36. END_MESSAGE_MAP()
  37.  
  38.  
  39. /////////////////////////////////////////////////////////////////////////////
  40. // Dispatch map
  41.  
  42. BEGIN_DISPATCH_MAP(CButtonCtrl, COleControl)
  43.     //{{AFX_DISPATCH_MAP(CButtonCtrl)
  44.     DISP_STOCKPROP_BORDERSTYLE()
  45.     DISP_STOCKPROP_CAPTION()
  46.     DISP_STOCKPROP_ENABLED()
  47.     DISP_STOCKPROP_FONT()
  48.     //}}AFX_DISPATCH_MAP
  49.     DISP_FUNCTION_ID(CButtonCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
  50. END_DISPATCH_MAP()
  51.  
  52.  
  53. /////////////////////////////////////////////////////////////////////////////
  54. // Event map
  55.  
  56. BEGIN_EVENT_MAP(CButtonCtrl, COleControl)
  57.     //{{AFX_EVENT_MAP(CButtonCtrl)
  58.     EVENT_CUSTOM_ID("Click", DISPID_CLICK, FireClick, VTS_NONE)
  59.     //}}AFX_EVENT_MAP
  60. END_EVENT_MAP()
  61.  
  62.  
  63. /////////////////////////////////////////////////////////////////////////////
  64. // Property pages
  65.  
  66. BEGIN_PROPPAGEIDS(CButtonCtrl, 2)
  67.     PROPPAGEID(CButtonPropPage::guid)
  68.     PROPPAGEID(CLSID_CFontPropPage)
  69. END_PROPPAGEIDS(CButtonCtrl)
  70.  
  71.  
  72. /////////////////////////////////////////////////////////////////////////////
  73. // Initialize class factory and guid
  74.  
  75. IMPLEMENT_OLECREATE_EX(CButtonCtrl, "BUTTON.ButtonCtrl.1",
  76.     0x4a8c998f, 0x7713, 0x101b, 0xa5, 0xa1, 0x4, 0x2, 0x1c, 0x0, 0x94, 0x2)
  77.  
  78.  
  79. /////////////////////////////////////////////////////////////////////////////
  80. // Type library ID and version
  81.  
  82. IMPLEMENT_OLETYPELIB(CButtonCtrl, _tlid, _wVerMajor, _wVerMinor)
  83.  
  84.  
  85. /////////////////////////////////////////////////////////////////////////////
  86. // Interface IDs
  87.  
  88. const IID BASED_CODE IID_DButton =
  89.         { 0x4a8c9990, 0x7713, 0x101b, { 0xa5, 0xa1, 0x4, 0x2, 0x1c, 0x0, 0x94, 0x2 } };
  90. const IID BASED_CODE IID_DButtonEvents =
  91.         { 0x4a8c9991, 0x7713, 0x101b, { 0xa5, 0xa1, 0x4, 0x2, 0x1c, 0x0, 0x94, 0x2 } };
  92.  
  93.  
  94. /////////////////////////////////////////////////////////////////////////////
  95. // Control type information
  96.  
  97. static const DWORD BASED_CODE _dwButtonOleMisc =
  98.     OLEMISC_ACTIVATEWHENVISIBLE |
  99.     OLEMISC_SETCLIENTSITEFIRST |
  100.     OLEMISC_INSIDEOUT |
  101.     OLEMISC_CANTLINKINSIDE |
  102.     OLEMISC_RECOMPOSEONRESIZE |
  103.     OLEMISC_ACTSLIKEBUTTON;
  104.  
  105. IMPLEMENT_OLECTLTYPE(CButtonCtrl, IDS_BUTTON, _dwButtonOleMisc)
  106.  
  107.  
  108. /////////////////////////////////////////////////////////////////////////////
  109. // CButtonCtrl::CButtonCtrlFactory::UpdateRegistry -
  110. // Adds or removes system registry entries for CButtonCtrl
  111.  
  112. BOOL CButtonCtrl::CButtonCtrlFactory::UpdateRegistry(BOOL bRegister)
  113. {
  114.     if (bRegister)
  115.         return AfxOleRegisterControlClass(
  116.             AfxGetInstanceHandle(),
  117.             m_clsid,
  118.             m_lpszProgID,
  119.             IDS_BUTTON,
  120.             IDB_BUTTON,
  121.             FALSE,                      //  Not insertable
  122.             _dwButtonOleMisc,
  123.             _tlid,
  124.             _wVerMajor,
  125.             _wVerMinor);
  126.     else
  127.         return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
  128. }
  129.  
  130.  
  131. /////////////////////////////////////////////////////////////////////////////
  132. // CButtonCtrl::CButtonCtrl - Constructor
  133.  
  134. CButtonCtrl::CButtonCtrl()
  135. {
  136.     InitializeIIDs(&IID_DButton, &IID_DButtonEvents);
  137. }
  138.  
  139.  
  140. /////////////////////////////////////////////////////////////////////////////
  141. // CButtonCtrl::~CButtonCtrl - Destructor
  142.  
  143. CButtonCtrl::~CButtonCtrl()
  144. {
  145. }
  146.  
  147.  
  148. /////////////////////////////////////////////////////////////////////////////
  149. // CButtonCtrl::OnDraw - Drawing function
  150.  
  151. void CButtonCtrl::OnDraw(
  152.             CDC* pdc, const CRect& rcBounds, const CRect& /*rcInvalid*/)
  153. {
  154.     DoSuperclassPaint(pdc, rcBounds);
  155. }
  156.  
  157.  
  158. /////////////////////////////////////////////////////////////////////////////
  159. // CButtonCtrl::DoPropExchange - Persistence support
  160.  
  161. void CButtonCtrl::DoPropExchange(CPropExchange* pPX)
  162. {
  163.     ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
  164.     COleControl::DoPropExchange(pPX);
  165. }
  166.  
  167.  
  168. /////////////////////////////////////////////////////////////////////////////
  169. // CButtonCtrl::OnResetState - Reset control to default state
  170.  
  171. void CButtonCtrl::OnResetState()
  172. {
  173.     COleControl::OnResetState();  // Resets defaults found in DoPropExchange
  174. }
  175.  
  176.  
  177. /////////////////////////////////////////////////////////////////////////////
  178. // CButtonCtrl::AboutBox - Display an "About" box to the user
  179.  
  180. void CButtonCtrl::AboutBox()
  181. {
  182.     CDialog dlgAbout(IDD_ABOUTBOX_BUTTON);
  183.     dlgAbout.DoModal();
  184. }
  185.  
  186.  
  187. /////////////////////////////////////////////////////////////////////////////
  188. // CButtonCtrl::PreCreateWindow - Modify parameters for CreateWindowEx
  189.  
  190. BOOL CButtonCtrl::PreCreateWindow(CREATESTRUCT& cs)
  191. {
  192.     cs.lpszClass = _T("BUTTON");
  193.     return COleControl::PreCreateWindow(cs);
  194. }
  195.  
  196.  
  197. /////////////////////////////////////////////////////////////////////////////
  198. // CButtonCtrl::IsSubclassedControl - This is a subclassed control
  199.  
  200. BOOL CButtonCtrl::IsSubclassedControl()
  201. {
  202.     return TRUE;
  203. }
  204.  
  205.  
  206. /////////////////////////////////////////////////////////////////////////////
  207. // CButtonCtrl::OnOcmCommand - Handle command messages
  208.  
  209. LRESULT CButtonCtrl::OnOcmCommand(WPARAM wParam, LPARAM lParam)
  210. {
  211. #ifdef _WIN32
  212.     WORD wNotifyCode = HIWORD(wParam);
  213.     lParam;
  214. #else
  215.     WORD wNotifyCode = HIWORD(lParam);
  216.     wParam;
  217. #endif
  218.     switch (wNotifyCode)
  219.     {
  220.     case BN_CLICKED:
  221.         // Fire click event when button is clicked
  222.         FireClick();
  223.         break;
  224.     }
  225.     return 0;
  226. }
  227.  
  228.  
  229. /////////////////////////////////////////////////////////////////////////////
  230. // CButtonCtrl message handlers
  231.  
  232.  
  233. /////////////////////////////////////////////////////////////////////////////
  234. // CButtonCtrl::CmdAbout - Displays About box in response to selection of
  235. // menu item.
  236.  
  237. void CButtonCtrl::CmdAbout()
  238. {
  239.     AboutBox();
  240. }
  241.  
  242.  
  243. /////////////////////////////////////////////////////////////////////////////
  244. // CButtonCtrl::OnGetInPlaceMenu - Return in-place menu
  245.  
  246. HMENU CButtonCtrl::OnGetInPlaceMenu(void)
  247. {
  248.     if (m_menuInPlace.m_hMenu == NULL)
  249.         m_menuInPlace.LoadMenu(IDR_INPLACEMENU);
  250.  
  251.     return m_menuInPlace.m_hMenu;
  252. }
  253.