社区
ATL
帖子详情
ocx的activex控件问题200分相送
Jackjsun
2004-08-31 04:45:14
各位高手:
本人做一个OCX可是想在OCX中显示OLE文档,实际上就是要在OCX中建立DOC和VIEW,应该怎么做?
最好给个示例。
谢谢!
...全文
184
2
打赏
收藏
ocx的activex控件问题200分相送
各位高手: 本人做一个OCX可是想在OCX中显示OLE文档,实际上就是要在OCX中建立DOC和VIEW,应该怎么做? 最好给个示例。 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wangweixing2000
2004-09-01
打赏
举报
回复
金刚兄说的太详细了!
gjd111686
2004-09-01
打赏
举报
回复
在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- >
GetActiveView()- >m_hWnd,WM_USER_PREVIEW,0,0);
}
在PrintView.h中添加#define WM_USER_PREVIEW WM_USER+10
在PrintView.cpp中的消息映射中添加ON_MESSAGE(WM_USER_PREVIEW, DoPreview),形成如下:
BEGIN_MESSAGE_MAP(CPrintView, CView)
ON_MESSAGE(WM_USER_PREVIEW, DoPreview)
//{{AFX_MSG_MAP(CPrintView)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
为类CPrintView添加成员函数LRESULT DoPreview(WPARAM wParam, LPARAM lParam)
实现CPrintView::DoPreview如下:
LRESULT CPrintView::DoPreview
(WPARAM wParam, LPARAM lParam)
{
// 进入打印预览
OnFilePrintPreview();
return 0;
}
为CPrintView添加public成员变量COleControl* m_pControlPreview,并初始化如下:
CPrintView::CPrintView()
{
m_pControlPreview=NULL; //
初始化要预览的ActiveX控件类为空
}
在CPrintView::OnDraw中对控件内容进行显示
void CPrintView::OnDraw(CDC* pDC)
{
if (m_pControlPreview==NULL)
pDC->TextOut(0,0,"No Preview View");
else {
CRect controlRect;
m_pControlPreview- >GetClientRect(&controlRect);
CRect previewRect(0,0,controlRect.
Width(),controlRect.Height());
m_pControlPreview- >OnDraw
(pDC,controlRect,controlRect);
}
}
用ClassWizard在Automation页中为CHelloCtrl添加一方法void SetPreviewControl(),外部名亦为SetPreviewControl,对其实现如下:
void CHelloCtrl::SetPreviewControl()
{
// 设置要预览的View
CView* pView=m_pPrintThread- >
m_pPrintFrame- >GetActiveView();
CPrintView* pPrintView=(CPrintView*)pView;
pPrintView- >m_pControlPreview=this;
}
---- 在ActiveX Control Test Container测试,激活方法次序为DoHello、SetPreviewControl、DoPreview。
驱动冲突伴随 DWG 图纸文字问号怎么办?下载冲突解决合集.zip
彻底解决CAD图纸文字变问号、文字变乱码,以及其他所有字体缺失带来的烦恼
【对架无人机进行规范控制和点对点运动的模拟】可变桨叶四旋翼控制的优化推力分配:翻转动作的比较研究(Matlab代码实现)
内容概要:本文围绕可变桨叶四旋翼无人机的规范控制与点对点运动模拟展开,重点研究优化推力分配策略在翻转动作中的应用与性能比较。通过Matlab代码实现,构建了四旋翼动力学模型,并设计了多种控制算法以实现精确的姿态调整与轨迹跟踪。研究对比了不同推力分配方案在执行高机动性翻转动作时的稳定性、能耗效率与响应速度,旨在提升无人机在复杂飞行任务中的动态性能与控制精度。该仿真研究为无人机飞控系统的设计与优化提供了理论依据和技术支持。; 适合人群:具备一定自动控制理论基础和Matlab编程能力,从事无人机控制、飞行器动力学或机器人系统研究的科研人员及研究生。; 使用场景及目标:① 实现四旋翼无人机在三维空间中的精确点对点运动控制;② 对比分析不同推力分配策略在执行翻转等高难度动作时的控制效果与能耗表现,优化飞行性能;③ 为无人机自主飞行、特技飞行及复杂环境下的机动控制提供算法验证平台。; 阅读建议:此资源以Matlab仿真为核心,建议读者结合相关控制理论知识,深入理解代码实现细节,重点关注动力学建模、控制律设计与推力分配模块。在学习过程中,应动手调试参数,复现文中翻转动作的仿真结果,并尝试拓展至其他复杂飞行任务,以加深对无人机控制机理的理解。
易语言源码易语言access数据库操作
易语言源码易语言access数据库操作
C++编程while循环结构测试题解析:程序输出与循环控制逻辑训练
内容概要:本文档是一份关于C++语言中while循环的专项测试卷,包含20道单项选择题和10道判断题,题目来源于GESP和CSP-J等权威编程等级考试真题。内容涵盖while循环的基本语法、执行逻辑、条件判断、循环控制、常见死循环原因及与其他循环结构的区别,重点考察循环条件的真假判断、循环体执行次数、变量变化过程以及相关逻辑推理能力。附带完整答案解析,有助于巩固C++循环基础知识。; 适合人群:准备参加GESP或CSP-J等青少年编程等级考试的学生,具备初步C++编程基础的学习者(如中小学阶段初学者);适用于学习流程控制结构中的循环知识点。; 使用场景及目标:①用于检测对while循环掌握程度,查漏补缺;②辅助教师进行教学测评或学生自我练习;③帮助理解循环执行顺序、条件表达式含义及避免死循环等核心概念; 阅读建议:建议在完成每道题目后对照答案认真分析错误原因,结合代码调试加深理解;尤其注意条件赋值与比较的区别(如k=0)、逻辑非运算的应用及循环变量更新机制。
卓海海洋生态平台.pptx
卓海海洋生态平台.pptx
ATL
3,248
社区成员
48,530
社区内容
发帖
与我相关
我的任务
ATL
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
复制链接
扫一扫
分享
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章