现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

关于将基于Doc/View结构的EXE程序封装成OCX的一些经验

2012-08-27 23:17 工业·编程 ⁄ 共 1398字 ⁄ 字号 暂无评论

    首先要解释一下,本人是新手,这篇文章写的是我在工作后的第一项目中遇到的问题。本文是基于msdn中的“Design ActiveX Components with MFC Document/View Model”修改而成,而且只适用于基于Doc/View结构的单文档模板程序,并且需要用到这篇文章中提供的例程中的两个文件。

下面我就按照封装的步骤来讲解一下整个过程:

1. 首先需要准备两个文件 ActivDoc.h 和 ActivDoc.cpp ,在上面提到的那篇文章的例程中有。

2. 按照默认设置建立一个AcitveX的工程(可以把对话框去掉),并且把步骤一中的两个文件添加到工程中去。在工程的控件类定义头文件中把COleControl 改成CActiveXDocControl ,在控件类的实现文件中也把COleControl全部改成CActiveXDocControl,把控件类的OnDraw方法删除。

3. 整合资源文件,详细方法在后面会介绍

4. 将需要封装的EXE程序的CPP和H文件都添加到工程中(除了 主程序类 的 XXX.h 和 XXX.cpp ,Resource.h和StdAfx.h 的添加后面讨论),添加进来文件中的#include语句中有包含对原来EXE 主程序类 头文件的引用,需要都改成对ActiveX的主程序类头文件的引用。

5. 在控件类的构造函数中添加如下的代码:

        AddDocTemplate(new CActiveXDocTemplate(

         RUNTIME_CLASS(yourDocClassName),

         RUNTIME_CLASS(yourFrameClassName),

         RUNTIME_CLASS(yourViewClassName)))

其中 yourDocClassName 是你的文档类      yourFrameClassName是你的框架类    yourViewClassName是你的视图类(需要把包含三个类的头文件#Include进来)

     到这里,对于工程类库的改造基本上就完成了。接下来需要做的是一些细节上完善!

6.ToolBar的tip提示的处理:

在完成对ToolBar的整合之后,我们发现ToolBar的提示并不能在你移动光标到工具栏的时候正常显示。我们对此的处理是重载CToolBar类的WindowProc()函数,函数的定义如下面所示,其中CYourBar是你自己定义的继承自CToolBar的一个类。当然了,这是我们也要修改主程序框架类中的定义的工具栏成员对象,改为CYourBar类的对象,在工具栏窗口的创建函数里添加tip的提示风格"CBRS_TOOLTIPS"。

LRESULT CYourBar::WindowProc(UINT message,WPARAM wParam,LPARAM lParam)

{

MSG msg;

msg.hwnd=m_hWnd;

msg.message=message;

msg.wParam=wParam;

msg.lParam=lParam;

GetCursorPos(&msg.pt);

FilterToolTipMessage(&msg);

return CToolBar::WindowProc(message,Param,lParam);

}

7.资源整合

在设计的过程中需要保障重要的文件中的所有信息都要保留下来

给我留言

留言无头像?