在ActiveX中使用Dialog和FormView

本文介绍如何在MFC ActiveX控件中使用Dialog和FormView,并提供VS2008环境下ActiveX控件的调试方法及网页中测试ActiveX控件的步骤。
原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 、作者信息和本声明。否则将追究法律责任。 http://ticktick.blog.51cto.com/823160/610784

      最近做ActiveX插件,以网上一位牛人的《基于MFC的ActiveX控件开发》这一系列文章入门,不过,他的文章主要介绍在ActiveX本身提供的框架内进行开发,如果我希望我的ActiveX插件本身就以Dialog或者FormView窗体的形式呈现,那该如何处理呢?本文就总结一下这个,并且附带总结一下vs2008下以及网页下如何调试ActiveX,作为上述系列文章的补充。

一、在ActiveX中使用Dialog

     1.  首先创建一个ActiveX工程,工程名假设为:MyActiveX

     2.  创建一个对话框资源(Dialog),并关联一个类(CMyDialog)。检查一下对话框资源的配置,推荐配置:style:child, border:dialog frame, visible:ture, control:ture

      3.  对ActiveX控制类(CMyActiveXCtrl)做如下操作:

    (1) 在CMyActiveXCtrl类的定义中,添加一个成员变量:CMyDialog m_myDlg;

    (2) 为CMyActiveXCtrl类添加OnCreate消息响应:

  
  1. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 

    (3)在上述 OnCreate 消息响应函数中,添加如下代码:

  
  1. m_myDlg.Create(IDD_MYDLG,this);   //IDD_MYDLG为对话框资源ID 

    (4)在 CMyActiveXCtrl类 的 OnDraw 函数中,添加如下代码

  
  1. m_myDlg.MoveWindow(rcBounds, TRUE); 

      4.  到此,基本工作完成。可以在 Active X control test container 中进行测试了。

、在ActiveX中使用FormView

      在ActiveX中使用FormView跟使用Dialog大体类似,但是FormView与Dialog有很多不同的地方,因此有些需要特别注意。

      1.   同上,首先创建一个ActiveX工程,工程名假设为:MyActiveX

      2.   创建一个FormView资源,并关联一个派生于CFormView的类(CMyForm)。检查一下对话框资源的配置,推荐配置:style:child, border:none, visible:ture, control:ture

      3.   在CMyForm类的定义里面添加一项友元声明(friend class CmyActiveXCtrl;)因为FromView类的Create函数是protected型,所以如果想手动调用FromView派生类的Create函数的话,要么加友元声明,要么,在派生类CMyForm的定义中,重载Create方法,并设置为 public型。

      4.  对ActiveX控制类(CMyActiveXCtrl)做如下操作:

     (1) 在CMyActiveXCtrl类的定义中,添加一个成员变量:CMyForm * p_myFrom; // 注意,这里要使用指针,FormView资源必须动态创建,如果这里直接使用对象,而不是用指针,则在释放ActiveX控件的时候,会出现 Debug Assertion Fail 的错误。

     (2) 为CMyActiveXCtrl类添加OnCreate消息响应

  
  1. afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct); 

     (3) 在上述 OnCreate 消息响应函数中,添加如下代码:

  
  1. p_myForm = new CMyForm(); 
  2. p_myForm->Create(NULL,NULL,AFX_WS_DEFAULT_VIEW, CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL);  

     (4)在 CMyActiveXCtrl类 的 OnDraw 函数中,添加如下代码:

  
  1. p_myForm->MoveWindow(rcBounds,TRUE);  

      5.  到此,基本工作完成。可以在 Active X control test container 中进行测试了。

三、 在win7 + vs2008下调试ActiveX控件

      在vs2008下,没有自带 Active X control test container,需要自己编译,这个过程可能会遇到一些问题,我把解决方案(部分是网上搜集的)写在下面,以供大家参考。

     在编ActiveX控件时,可以用到Active X control test container来测试activex控件,这在Visual Studio 6里面是很方便查找的,工具菜单下面就有。但是在Visual Studio 2008 里面TSTCON32.exe这个文件却消失了。那它是没了吗,不是的。而是微软把它放在了例子程序里面,需要自己编译。详细目录:比如我装在C盘里面,VC的例子在 “C:\Program Files\Microsoft Visual Studio 9.0\Samples\2052\AllVCLanguageSamples.zip”,把这个文件解压缩以后,在下面的目录可以找到TSTCON32.exe的源代码:“C++\MFC\ole\TstCon”,自己编译就可以了。

     这里特别注意,由于默认的是Win32的解决方案平台,所以在编译TCProps和TstCon要将编译平台选为Win32,而不是默认的Itanium平台。

   

     OK拿去编译,注意得先编译TCProps,然后再编译TstCon。

     如果是在win7下,运行测试时,则还会出现错误,弹出“并行运行错误”的对话框,【解决方法】:

     (1)分别在TstCon和TCProps两个Project的StdAfx.h文件加入 #define _WIN32_WINNT 0x0600.

     (2)原始TstCon工程没有相应语句之间添加即可;原始TCProps工程将#define _WIN32_WINNT 0x0400改为#define _WIN32_WINNT 0x0600即可。

     (3)分别对各个工程进行:选中对应工程-->点击右键,选择 Properties-->Configuration Properties-->Linker-->Manifest File-->选中Enable User Account Control(UAC):改为No,原始为Yes,点击,应用,确定即可。需Release、Debug下各配置一次。

      另外,在vs2008下在编译MyActiveX工程的时候,可能会出现如下错误:

      Project : error PRJ0050: Failed to register output.  Please try enabling Per-user Redirection or register the component from a command prompt with elevated permissions.

    【解决方法】:

    (1)  在工程配置-> Linker -> General -> Per-User Redirection 选择No
    (2)  使用管理员权限打开vs2008(vs exe图标右键->以管理员身份运行)
    (3)  如果问题还是没有解决的话,请注意查看你的ActiveX工程所依赖的库文件是否都在.ocx文件所在的目录下,如果缺少所依赖的库文件,也会报这个错误。

 四、在网页中测试ActiveX

      首先,安装 ActiveX Control Pad 软件,这个软件是微软提供的专门用来动态生成测试ActiveX的html页面代码的工具,用这个工具,可以很方便地生成需要的html代码或者网页。

     然后,执行如下步骤: 

     1.  将自己的myActiveX工程设置为release,生成一个release版本(必须),否则使用ActiveX Control Pad无法得到有效的插件信息。(提示,改成release版后,注意工程配置,比如依赖的库,都要与debug一致。)

     2.  打开ActiveX Control Pad,选择菜单File -> New HTML,创建一个HTML页面。

     3. 从ActiveX Control Pad选择菜单Edit -> Insert ActiveX Control ....,然后会弹出一个消息框。从消息框的列表中选择相应的ActiveX Control,点击OK即可将ActiveX Control插入到HTML页面。(可以在弹出的框中调整相关参数,比如控件大小等)

    4. 在本机通过IE浏览器打开生成的HTML即可看到ActiveX Control显示在HTML页面中。(注意,有的浏览器可能会禁止加载ActiveX控件,检查一下相关的安全配置情况)

 

本文出自 “对影成三人” 博客,请务必保留此出处http://ticktick.blog.51cto.com/823160/610784

【负荷预测】基于VMD-CNN-LSTM的负荷预测研究(Python代码实现)内容概要:本文介绍了基于变分模态分解(VMD)、卷积神经网络(CNN)长短期记忆网络(LSTM)相结合的VMD-CNN-LSTM模型在负荷预测中的研究与应用,采用Python代码实现。该方法首先利用VMD对原始负荷数据进行分解,降低序列复杂性并提取不同频率的模态分量;随后通过CNN提取各模态的局部特征;最后由LSTM捕捉时间序列的长期依赖关系,实现高精度的负荷预测。该模型有效提升了预测精度,尤其适用于非平稳、非线性的电力负荷数据,具有较强的鲁棒性泛化能力。; 适合人群:具备一定Python编程基础深度学习背景,从事电力系统、能源管理或时间序列预测相关研究的科研人员及工程技术人员,尤其适合研究生、高校教师及电力行业从业者。; 使用场景及目标:①应用于日前、日内及实时负荷预测场景,支持智慧电网调度与能源优化管理;②为研究复合型深度学习模型在非线性时间序列预测中的设计与实现提供参考;③可用于学术复现、课题研究或实际项目开发中提升预测性能。; 阅读建议:建议读者结合提供的Python代码,深入理解VMD信号分解机制、CNN特征提取原理及LSTM时序建模过程,通过实验调试参数(如VMD的分解层数K、惩罚因子α等)优化模型性能,并可进一步拓展至风电、光伏等其他能源预测领域。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值