• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 怎样在ActiveX里面做一个单文档的界面

怎样在ActiveX里面做一个单文档的界面

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了此文档包含宏 activex,activex文档,activex控件下载xp,activex控件下载,activex控件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 怎样在ActiveX里面做一个单文档的界面
描述:

让activeX界面像单文档一样


解决方案1:

在ActiveX控件中引入窗体技术  
   
 一、引入Dialog技术 
---- 下面介绍在制作ActiveX控件时引入有模式对话框技术,制作步骤如下: 
创建一新的MFC ActiveX ControlWizard项目,取名为Hello,其他用缺省选项;
在ResourceView页中新增一对话框资源,命名为IDD_HELLODIALOG,可以在对话框上放自己的控件;
为对话框资源IDD_HELLODIALOG创建新类CHelloDialog,从CDialog继承;
确认在HelloCtrl.h中已加入语句#include "HelloDialog.h",为CHelloCtrl类添加成员变量CHelloDialog m_helloDialog;
用ClassWizard在Automation页中为CHelloCtrl添加一方法void DoHello(),外部名亦为DoHello; 
void CHelloCtrl::DoHello() 
{
// 显示对话框
m_helloDialog.DoModal();
}
---- 可以用ActiveX Control Test Container测试Hello Control的DoHello方法。 
---- 下面介绍在制作ActiveX控件时引入无模式对话框技术,制作步骤如下: 
在上面工作的基础上,用ClassWizard为CHelloCtrl添加WM_CREATE的处理函数OnCreate,在此创建无模式对话框;
修改DoHello代码,在此显示对话框; 
int CHelloCtrl::OnCreate
(LPCREATESTRUCT lpCreateStruct) 
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
// 创建对话框
m_helloDialog.Create(IDD_HELLODIALOG);
return 0;
}
void CHelloCtrl::DoHello() 
{
// 显示对话框
m_helloDialog.ShowWindow(SW_SHOW);
}
---- 下面介绍制作以对话框作为界面的ActiveX控件技术,制作步骤如下: 
在上面工作的基础上,设置对话框资源IDD_HELLODIALOG属性的Style页为Style:Child、Border:Dialog Frame、Title Bar:unchecked;设置More Style页为Visible:checked;Control:checked;设置Extended Styles页为Static Edge:checked;
在CHelloCtrl::OnCreate中写入m_helloDialog.Create(IDD_HELLODIALOG,this)语句;
在CHelloCtrl::OnDraw中写入m_helloDialog.MoveWindow(rcBounds,TRUE); 
int CHelloCtrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
// 创建对话框
m_helloDialog.Create(IDD_HELLODIALOG,this);
return 0;
}
void CHelloCtrl::OnDraw(CDC* pdc, const
 CRect& rcBounds, const CRect& rcInvalid)
{
// 定位Hello对话框
m_helloDialog.MoveWindow(rcBounds,TRUE);
}
---- 二、引入FormView技术 
---- 下面介绍在制作ActiveX控件时引入FormView技术,制作步骤如下: 
在上面工作的基础上,在ResourceView页中新增一对话框资源,命名为IDD_HELLOFORMVIEW,可以在对话框上放自己的控件;
设置对话框资源IDD_HELLODIALOG属性的Style页为Style:Child、Border:Dialog Frame、Title Bar:unchecked;设置More Style页为Visible:checked;Control:checked;设置Extended Styles页为Static Edge:checked;
为对话框资源IDD_HELLOFORMVIEW创建新类CHelloFormView,从CFormView继承;
在HelloFormView.h中将CHelloFormView的构造函数CHelloFormView()和析构函数virtual ~CHelloFormView()从protected改为public;
在HelloFormView.h中对CHelloFormView类加入public friend class CHelloCtrl;
确认在HelloCtrl.h中已加入语句#include "HelloFormView.h",为CHelloCtrl类添加成员变量CHelloFormView m_helloFormView;
修改CHelloCtrl::OnCreate函数,在此创建m_helloFormView;
修改DoHello代码,在此显示FormView; 
int CHelloCtrl::OnCreate
(LPCREATESTRUCT lpCreateStruct) 
{
if (COleControl::OnCreate(lpCreateStruct) == -1)
return -1;
// 创建FormView
m_helloFormView.Create(NULL,NULL,AFX_WS_DEFAULT_VIEW,
CRect(0, 0, 0, 0), this, AFX_IDW_PANE_FIRST, NULL);
return 0;
}
void CHelloCtrl::OnDraw(CDC* pdc, const
 CRect& rcBounds, const CRect& rcInvalid)
{
// 定位Hello对话框
m_helloFormView.MoveWindow(rcBounds,TRUE);
}
---- 三、引入Document/View结构技术 
---- 下面介绍在制作ActiveX控件时引入Document/View技术,制作步骤如下: 
在上面工作的基础上,在Hello工程中用ClassWizard添加一新类CPrintFrame,取其父类为CFrameWnd;
在PrintFrame.h中将CPrintFrame的构造函数CPrintFrame()和析构函数virtual ~CPrintFrame()从protected改为public;
在Hello工程中用ClassWizard添加一新类CPrintView,取其父类为CView;
在PrintView.h中将CPrintView的构造函数CPrintView()和析构函数virtual ~CPrintView()从protected改为public;
在Hello工程中用ClassWizard添加一新类CPrintDoc,取其父类为CDocument;
在PrintDoc.h中将CPrintDoc的构造函数CPrintDoc()和析构函数virtual ~CPrintDoc()从protected改为public;
在Hello工程中用ClassWizard添加一新类CPrintThread,取其父类为CWinThread;
在HelloCtrl.h文件中为CHelloCtrl类添加成员变量CPrintThread* m_pPrintThread,确认在HelloCtrl.h中已加入语句#include "PrintThread.h"; 
void CHelloCtrl::DoHello() 
{
// 创建打印线程
m_pPrintThread = (CPrintThread*)
AfxBeginThread(RUNTIME_CLASS(CPrintThread),
THREAD_PRIORITY_NORMAL, CREATE_SUSPENDED, NULL);
m_pPrintThread- >ResumeThread();
}
在PrintThread.h中添加新成员变量 
CPrintDoc* m_pPrintDoc和CPrintFrame* m_pPrintFrame,
并在构造函数和析构函数中完成对它们的初始设置和清除,
确认在PrintThread.h中已加入语句#include 
"PrintDoc.h"和#include "PrintFrame.h";
CPrintThread::CPrintThread()
{
m_pPrintDoc=NULL;
m_pPrintFrame=NULL;
}
CPrintThread::~CPrintThread()
{
if (m_pPrintDoc!=NULL)
delete m_pPrintFrame;
if (m_pPrintFrame!=NULL)
delete m_pPrintDoc;
}
在PrintThread.cpp的CPrintThread::InitInstance中,进行创建窗体CPrintFrame,确认在PrintThread.cpp中已加入语句#include "PrintFrame.h"; 
BOOL CPrintThread::InitInstance()
{
// 创建文档/视图框架
CPrintFrame* pFrame = new CPrintFrame;
m_pMainWnd = pFrame;
m_pPrintFrame=pFrame;
m_pPrintDoc=new CPrintDoc;
CCreateContext context;
context.m_pCurrentDoc = m_pPrintDoc;
context.m_pNewViewClass = RUNTIME_CLASS(CPrintView);
pFrame- >Create(NULL,"打印主窗体",
WS_OVERLAPPEDWINDOW,CRect(0,0,100,100),
NULL,NULL,0,&context);
pFrame-  >InitialUpdateFrame(m_pPrintDoc, TRUE);
return TRUE;
}
在PrintView.h的CPrintView中,添加成员函数CPrintDoc* GetDocument(),确认在PrintView.h中已加入语句#include "PrintDoc.h"; 
CPrintDoc* CPrintView::GetDocument()
{
ASSERT(m_pDocument- >IsKindOf
(RUNTIME_CLASS(CPrintDoc)));
return (CPrintDoc*)m_pDocument;
}
---- 四、实现ActiveX打印预览技术 
---- 下面介绍利用上面的技术成果来实现ActiveX的打印预览技术,实现步骤如下: 
在上面工作的基础上,用ClassWizard对CPrintView类实现OnPreparePrinting函数,如下: 
BOOL CPrintView::OnPreparePrinting(CPrintInfo* pInfo) 
{
// 准备打印
return DoPreparePrinting(pInfo);
}
用ClassWizard在Automation页中为CHelloCtrl添加一方法void DoPreview(),外部名亦为DoPreview; 
void CHelloCtrl::DoPreview() 
{
// 进行打印预览
::PostMessage(m_pPrintThread- >m_pPrintFrame-

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 关于IEWINDOWSXP中对ACTIVEX文档支持的问题!
  • 在多文档中动态创建activex后,如何进行动态属性设置啊,高手帮忙啊
  • Activex文档问题,急急急急!
  • 求助:文档/视图结构的ActiveX控件
  • 单文档视图结构的ActiveX控件
  • 单文档或多文档使用ActiveX控件的资料
  • 在ACTIVEX中手工加载MDI文档该如何做
  • ActiveX文档图形如何显示在容器中?
  • 有关activex文档的问题
  • ActiveX文档为什么网页上使用很少,有什么限制吗?

相关文章

  • 2017-06-04 怎样在程序中检测ActiveX控件(已知GUID)是否已经注册?
  • 2017-06-05 高分!求解关于钩子的问题
  • 2017-06-05 高分求教:有关简单的动态连接dll文件的问题!
  • 2017-06-05 MFC导入Excel2010的问题
  • 2017-06-05 关于Hook请问在KeyboardProc中调用GetCurrentThreadId会得到哪个线程的ID?
  • 2017-06-04 请教一个思路:如何制作一个IE的插件,用来限制IE可访问的URL?
  • 2017-06-05 两个进程如何交互?
  • 2017-06-05 如何写桌面空白区域的右键菜单的扩展shell
  • 2017-06-04 为什么VB和C++Builder调VCATL写的ActiveX控件结果正确,而用VC调用结果却是错的呢?
  • 2017-06-04 我想动态添加多个相同控件,但不知道如何设置其ID?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 100分问大家一个COM接口的问题~~~~
    • 在VC中调用Delphi的DLL
    • [高分请教]--在ActiveX中能不能调用脚本文件(JS)--[高分请教]
    • 线程池的问题
    • 请问谁有侯俊杰的《ActiveX控制组件彻底研究》?
    • 关于线程退出产生内存泄漏,对多线程感兴趣的参加!重在参与来者有分
    • WORDAutomation奇怪问题
    • 在MFC中通过连接点获取EXCEL消息的问题。
    • 关于CoRegisterClassObject函数
    • atl服务中访问HKEY_CLASSES_ROOT键

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有