// StoneU_HC_OCXCtrl.cpp : CStoneU_HC_OCXCtrl ActiveX 控件类的实现。 #include "stdafx.h" #include "StoneU_HC_OCX.h" #include "StoneU_HC_OCXCtrl.h" #include "StoneU_HC_OCXPropPage.h" #include "mdlProject.h" #include ".\stoneu_hc_ocxctrl.h" #ifdef _DEBUG #define new DEBUG_NEW #endif IMPLEMENT_DYNCREATE(CStoneU_HC_OCXCtrl, COleControl) // 消息映射 BEGIN_MESSAGE_MAP(CStoneU_HC_OCXCtrl, COleControl) ON_OLEVERB(AFX_IDS_VERB_PROPERTIES, OnProperties) ON_WM_CREATE() ON_WM_DESTROY() END_MESSAGE_MAP() // 调度映射 BEGIN_DISPATCH_MAP(CStoneU_HC_OCXCtrl, COleControl) DISP_FUNCTION_ID(CStoneU_HC_OCXCtrl, "AboutBox", DISPID_ABOUTBOX, AboutBox, VT_EMPTY, VTS_NONE) END_DISPATCH_MAP() // 事件映射 BEGIN_EVENT_MAP(CStoneU_HC_OCXCtrl, COleControl) END_EVENT_MAP() // 属性页 // TODO: 按需要添加更多属性页。请记住增加计数! BEGIN_PROPPAGEIDS(CStoneU_HC_OCXCtrl, 1) PROPPAGEID(CStoneU_HC_OCXPropPage::guid) END_PROPPAGEIDS(CStoneU_HC_OCXCtrl) // 初始化类工厂和 guid IMPLEMENT_OLECREATE_EX(CStoneU_HC_OCXCtrl, "STONEU_HC_OCX.StoneU_HC_OCXCtrl.1", 0x80043a10, 0xf014, 0x4817, 0x98, 0x32, 0x38, 0xa3, 0x82, 0x2, 0xe0, 0xb8) // 键入库 ID 和版本 IMPLEMENT_OLETYPELIB(CStoneU_HC_OCXCtrl, _tlid, _wVerMajor, _wVerMinor) // 接口 ID const IID BASED_CODE IID_DStoneU_HC_OCX = { 0xF8B272B0, 0xB427, 0x44C5, { 0x94, 0xAF, 0x45, 0xF2, 0x57, 0xB3, 0x7A, 0xD5 } }; const IID BASED_CODE IID_DStoneU_HC_OCXEvents = { 0x9132B4B8, 0x56EF, 0x4CF1, { 0x8F, 0x90, 0x3, 0xA4, 0x96, 0x3D, 0x3E, 0x37 } }; // 控件类型信息 static const DWORD BASED_CODE _dwStoneU_HC_OCXOleMisc = OLEMISC_ACTIVATEWHENVISIBLE | OLEMISC_SETCLIENTSITEFIRST | OLEMISC_INSIDEOUT | OLEMISC_CANTLINKINSIDE | OLEMISC_RECOMPOSEONRESIZE; IMPLEMENT_OLECTLTYPE(CStoneU_HC_OCXCtrl, IDS_STONEU_HC_OCX, _dwStoneU_HC_OCXOleMisc) // CStoneU_HC_OCXCtrl::CStoneU_HC_OCXCtrlFactory::UpdateRegistry - // 添加或移除 CStoneU_HC_OCXCtrl 的系统注册表项 BOOL CStoneU_HC_OCXCtrl::CStoneU_HC_OCXCtrlFactory::UpdateRegistry(BOOL bRegister) { // TODO: 验证您的控件是否符合单元模型线程处理规则。 // 有关更多信息,请参考 MFC 技术说明 64。 // 如果您的控件不符合单元模型规则,则 // 必须修改如下代码,将第六个参数从 // afxRegApartmentThreading 改为 0。 if (bRegister) return AfxOleRegisterControlClass( AfxGetInstanceHandle(), m_clsid, m_lpszProgID, IDS_STONEU_HC_OCX, IDB_STONEU_HC_OCX, afxRegApartmentThreading, _dwStoneU_HC_OCXOleMisc, _tlid, _wVerMajor, _wVerMinor); else return AfxOleUnregisterClass(m_clsid, m_lpszProgID); } // CStoneU_HC_OCXCtrl::CStoneU_HC_OCXCtrl - 构造函数 CStoneU_HC_OCXCtrl::CStoneU_HC_OCXCtrl() { InitializeIIDs(&IID_DStoneU_HC_OCX, &IID_DStoneU_HC_OCXEvents); // TODO: 在此初始化控件的实例数据。 } // CStoneU_HC_OCXCtrl::~CStoneU_HC_OCXCtrl - 析构函数 CStoneU_HC_OCXCtrl::~CStoneU_HC_OCXCtrl() { // TODO: 在此清理控件的实例数据。 } // CStoneU_HC_OCXCtrl::OnDraw - 绘图函数 void CStoneU_HC_OCXCtrl::OnDraw( CDC* pdc, const CRect& rcBounds, const CRect& rcInvalid) { #if 0 if (!pdc) return; // TODO: 用您自己的绘图代码替换下面的代码。 pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH))); pdc->Ellipse(rcBounds); #endif } // CStoneU_HC_OCXCtrl::DoPropExchange - 持久性支持 void CStoneU_HC_OCXCtrl::DoPropExchange(CPropExchange* pPX) { ExchangeVersion(pPX, MAKELONG(_wVerMinor, _wVerMajor)); COleControl::DoPropExchange(pPX); // TODO: 为每个持久的自定义属性调用 PX_ 函数。 } // CStoneU_HC_OCXCtrl::OnResetState - 将控件重置为默认状态 void CStoneU_HC_OCXCtrl::OnResetState() { COleControl::OnResetState(); // 重置 DoPropExchange 中找到的默认值 // TODO: 在此重置任意其他控件状态。 } // CStoneU_HC_OCXCtrl::AboutBox - 向用户显示“关于”框 void CStoneU_HC_OCXCtrl::AboutBox() { CDialog dlgAbout(IDD_ABOUTBOX_STONEU_HC_OCX); dlgAbout.DoModal(); } // CStoneU_HC_OCXCtrl 消息处理程序 int CStoneU_HC_OCXCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (COleControl::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您专用的创建代码 g_pOCXCtrl = this; _CreateDialog(this); return 0; } void CStoneU_HC_OCXCtrl::OnDestroy() { COleControl::OnDestroy(); // TODO: 在此处添加消息处理程序代码 _DestoryDialog(); }