BTNCTL.CPP
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:7k
源码类别:

Windows编程

开发平台:

Visual C++

  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. #include "stdafx.h"
  13. #include "button.h"
  14. #include "btnctl.h"
  15. #include "btnppg.h"
  16. #ifdef _DEBUG
  17. #undef THIS_FILE
  18. static char BASED_CODE THIS_FILE[] = __FILE__;
  19. #endif
  20. IMPLEMENT_DYNCREATE(CButtonCtrl, COleControl)
  21. /////////////////////////////////////////////////////////////////////////////
  22. // Message map
  23. BEGIN_MESSAGE_MAP(CButtonCtrl, COleControl)
  24. //{{AFX_MSG_MAP(CButtonCtrl)
  25. ON_MESSAGE(OCM_COMMAND, OnOcmCommand)
  26. ON_COMMAND(ID_HELP_BUTTONCONTROL, CmdAbout)
  27. //}}AFX_MSG_MAP
  28. ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties)
  29. END_MESSAGE_MAP()
  30. /////////////////////////////////////////////////////////////////////////////
  31. // Dispatch map
  32. BEGIN_DISPATCH_MAP(CButtonCtrl, COleControl)
  33. //{{AFX_DISPATCH_MAP(CButtonCtrl)
  34. DISP_STOCKPROP_BORDERSTYLE()
  35. DISP_STOCKPROP_CAPTION()
  36. DISP_STOCKPROP_ENABLED()
  37. DISP_STOCKPROP_FONT()
  38. //}}AFX_DISPATCH_MAP
  39. DISP_FUNCTION_ID(CButtonCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE)
  40. END_DISPATCH_MAP()
  41. /////////////////////////////////////////////////////////////////////////////
  42. // Event map
  43. BEGIN_EVENT_MAP(CButtonCtrl, COleControl)
  44. //{{AFX_EVENT_MAP(CButtonCtrl)
  45. EVENT_CUSTOM_ID("Click", DISPID_CLICK, FireClick, VTS_NONE)
  46. //}}AFX_EVENT_MAP
  47. END_EVENT_MAP()
  48. /////////////////////////////////////////////////////////////////////////////
  49. // Property pages
  50. BEGIN_PROPPAGEIDS(CButtonCtrl, 2)
  51. PROPPAGEID(CButtonPropPage::guid)
  52. PROPPAGEID(CLSID_CFontPropPage)
  53. END_PROPPAGEIDS(CButtonCtrl)
  54. /////////////////////////////////////////////////////////////////////////////
  55. // Initialize class factory and guid
  56. IMPLEMENT_OLECREATE_EX(CButtonCtrl, "BUTTON.ButtonCtrl.1",
  57. 0x4a8c998f, 0x7713, 0x101b, 0xa5, 0xa1, 0x4, 0x2, 0x1c, 0x0, 0x94, 0x2)
  58. /////////////////////////////////////////////////////////////////////////////
  59. // Type library ID and version
  60. IMPLEMENT_OLETYPELIB(CButtonCtrl, _tlid, _wVerMajor, _wVerMinor)
  61. /////////////////////////////////////////////////////////////////////////////
  62. // Interface IDs
  63. const IID BASED_CODE IID_DButton =
  64. { 0x4a8c9990, 0x7713, 0x101b, { 0xa5, 0xa1, 0x4, 0x2, 0x1c, 0x0, 0x94, 0x2 } };
  65. const IID BASED_CODE IID_DButtonEvents =
  66. { 0x4a8c9991, 0x7713, 0x101b, { 0xa5, 0xa1, 0x4, 0x2, 0x1c, 0x0, 0x94, 0x2 } };
  67. /////////////////////////////////////////////////////////////////////////////
  68. // Control type information
  69. static const DWORD BASED_CODE _dwButtonOleMisc =
  70. OLEMISC_ACTIVATEWHENVISIBLE |
  71. OLEMISC_SETCLIENTSITEFIRST |
  72. OLEMISC_INSIDEOUT |
  73. OLEMISC_CANTLINKINSIDE |
  74. OLEMISC_RECOMPOSEONRESIZE |
  75. OLEMISC_ACTSLIKEBUTTON;
  76. IMPLEMENT_OLECTLTYPE(CButtonCtrl, IDS_BUTTON, _dwButtonOleMisc)
  77. /////////////////////////////////////////////////////////////////////////////
  78. // CButtonCtrl::CButtonCtrlFactory::UpdateRegistry -
  79. // Adds or removes system registry entries for CButtonCtrl
  80. BOOL CButtonCtrl::CButtonCtrlFactory::UpdateRegistry(BOOL bRegister)
  81. {
  82. if (bRegister)
  83. return AfxOleRegisterControlClass(
  84. AfxGetInstanceHandle(),
  85. m_clsid,
  86. m_lpszProgID,
  87. IDS_BUTTON,
  88. IDB_BUTTON,
  89. FALSE,                      //  Not insertable
  90. _dwButtonOleMisc,
  91. _tlid,
  92. _wVerMajor,
  93. _wVerMinor);
  94. else
  95. return AfxOleUnregisterClass(m_clsid, m_lpszProgID);
  96. }
  97. /////////////////////////////////////////////////////////////////////////////
  98. // CButtonCtrl::CButtonCtrl - Constructor
  99. CButtonCtrl::CButtonCtrl()
  100. {
  101. InitializeIIDs(&IID_DButton, &IID_DButtonEvents);
  102. }
  103. /////////////////////////////////////////////////////////////////////////////
  104. // CButtonCtrl::~CButtonCtrl - Destructor
  105. CButtonCtrl::~CButtonCtrl()
  106. {
  107. }
  108. /////////////////////////////////////////////////////////////////////////////
  109. // CButtonCtrl::OnDraw - Drawing function
  110. void CButtonCtrl::OnDraw(
  111. CDC* pdc, const CRect& rcBounds, const CRect& /*rcInvalid*/)
  112. {
  113. DoSuperclassPaint(pdc, rcBounds);
  114. }
  115. /////////////////////////////////////////////////////////////////////////////
  116. // CButtonCtrl::DoPropExchange - Persistence support
  117. void CButtonCtrl::DoPropExchange(CPropExchange* pPX)
  118. {
  119. ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor));
  120. COleControl::DoPropExchange(pPX);
  121. }
  122. /////////////////////////////////////////////////////////////////////////////
  123. // CButtonCtrl::OnResetState - Reset control to default state
  124. void CButtonCtrl::OnResetState()
  125. {
  126. COleControl::OnResetState();  // Resets defaults found in DoPropExchange
  127. }
  128. /////////////////////////////////////////////////////////////////////////////
  129. // CButtonCtrl::AboutBox - Display an "About" box to the user
  130. void CButtonCtrl::AboutBox()
  131. {
  132. CDialog dlgAbout(IDD_ABOUTBOX_BUTTON);
  133. dlgAbout.DoModal();
  134. }
  135. /////////////////////////////////////////////////////////////////////////////
  136. // CButtonCtrl::PreCreateWindow - Modify parameters for CreateWindowEx
  137. BOOL CButtonCtrl::PreCreateWindow(CREATESTRUCT& cs)
  138. {
  139. cs.lpszClass = _T("BUTTON");
  140. return COleControl::PreCreateWindow(cs);
  141. }
  142. /////////////////////////////////////////////////////////////////////////////
  143. // CButtonCtrl::IsSubclassedControl - This is a subclassed control
  144. BOOL CButtonCtrl::IsSubclassedControl()
  145. {
  146. return TRUE;
  147. }
  148. /////////////////////////////////////////////////////////////////////////////
  149. // CButtonCtrl::OnOcmCommand - Handle command messages
  150. LRESULT CButtonCtrl::OnOcmCommand(WPARAM wParam, LPARAM lParam)
  151. {
  152. #ifdef _WIN32
  153. WORD wNotifyCode = HIWORD(wParam);
  154. lParam;
  155. #else
  156. WORD wNotifyCode = HIWORD(lParam);
  157. wParam;
  158. #endif
  159. switch (wNotifyCode)
  160. {
  161. case BN_CLICKED:
  162. // Fire click event when button is clicked
  163. FireClick();
  164. break;
  165. }
  166. return 0;
  167. }
  168. /////////////////////////////////////////////////////////////////////////////
  169. // CButtonCtrl message handlers
  170. /////////////////////////////////////////////////////////////////////////////
  171. // CButtonCtrl::CmdAbout - Displays About box in response to selection of
  172. // menu item.
  173. void CButtonCtrl::CmdAbout()
  174. {
  175. AboutBox();
  176. }
  177. /////////////////////////////////////////////////////////////////////////////
  178. // CButtonCtrl::OnGetInPlaceMenu - Return in-place menu
  179. HMENU CButtonCtrl::OnGetInPlaceMenu(void)
  180. {
  181. if (m_menuInPlace.m_hMenu == NULL)
  182. m_menuInPlace.LoadMenu(IDR_INPLACEMENU);
  183. return m_menuInPlace.m_hMenu;
  184. }