atl控件里创建单文档

dragoo1 2011-06-22 01:39:22
我想通过createview创建出来一个单文档,但是得到文档对象为空,大家给点意见啊

class CFramePrint : public CFrameWnd
class CDjcxView : public CScrollView
class CDjcxDoc : public COleDocument

STDMETHODIMP CPrintClient::CreateView(LONG* nOK)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

// TODO: 在此添加实现代码
*nOK = 0;

m_pF=new CFramePrint;

CWnd* pWnd=CWnd::FromHandle(m_wndParent);
m_sCaption = "打印预览";

if (!m_pF->CreatePrintView(NULL,m_sCaption))
{
::MessageBox(NULL,"创建打印视图失败!","严重错误",MB_ICONHAND);
delete m_pF;
m_pF=NULL;
return S_FALSE;
}

*nOK = (LONG)(m_pF->m_hWnd);

return S_OK;
}

CWnd* CFramePrint::CreatePrintView(CWnd* pParentWnd,CString sTitle)
{
ASSERT(this);

HICON hIcon=g_WinApp->LoadIcon(IDI_FRAMEPRINT1);

LPCTSTR lpWndCls = AfxRegisterWndClass(CS_DBLCLKS,g_WinApp->LoadCursor(IDC_ARROW),HBRUSH(::GetStockObject(WHITE_BRUSH)),hIcon);


if (!LoadFrame(IDR_FRAMEPRINT,WS_OVERLAPPEDWINDOW|FWS_ADDTOTITLE,pParentWnd))
return NULL;

ShowWindow(SW_SHOW);

CView* pOldActiveView = GetActiveView();
if (pOldActiveView)
::SetWindowLong(pOldActiveView->m_hWnd, GWL_ID,0);


CRuntimeClass* pNewViewClass;
pNewViewClass= RUNTIME_CLASS(CDjcxView);

// create the new view
CCreateContext context;
context.m_pNewViewClass = pNewViewClass;
context.m_pCurrentDoc = GetActiveDocument();
CView* pNewView = STATIC_DOWNCAST(CView, CreateView(&context));
if (pNewView != NULL)
{
// the new view is there, but invisible and not active...
pNewView->ShowWindow(SW_SHOW);
pNewView->OnInitialUpdate();
SetActiveView(pNewView);
RecalcLayout();

// finally destroy the old view...
if (pOldActiveView)
pOldActiveView->DestroyWindow();
}


m_pDjcxView=(CDjcxView*)pNewView;

m_pDjcxView->m_pFrame=this;


SetToolBar();
SetWindowText(sTitle);

return this;
}

CView* pOldActiveView = GetActiveView();
context.m_pCurrentDoc = GetActiveDocument();
这两句得到的都是NULL,不知道为什么
...全文
76 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
endergo 2011-07-05
  • 打赏
  • 举报
回复
OCX中嵌入文档视图可以参看下这篇文章.
http://air-head.blogbus.com/logs/43811528.html
dragoo1 2011-06-22
  • 打赏
  • 举报
回复
我在另外一个普通的单文档小例子()里的OnInitialUpdate使用GetActiveDocument得到的文档对象是非空的
但是在上面代码里GetActiveDocument就是空
kyotrue 2011-06-22
  • 打赏
  • 举报
回复
活动的窗口默认表现就是标题栏高亮,因为单步调试是活动的窗口肯定是VS的IDE,所以肯定获取不到了。
dragoo1 2011-06-22
  • 打赏
  • 举报
回复
那怎么激活呢,我需要用文档对象打开一个word...
kyotrue 2011-06-22
  • 打赏
  • 举报
回复
GetActiveView、GetActiveDocument窗口在激活状态才行,调试的话肯定不行的
1 、如何替换默认的类厂? 2 、如何让 COM 组件支持 Web 事件? 3 、如何动态创建要求 License 的 ActiveX 控件? 4 、如何在 Web 页面上生成基于 XML 的树形菜? 5 、如何在 Web 页面上创建动态表格? 6 、如何为 Win32 服务程序提供事件源消息文件? 7 、如何创建实例(静态) COM 组件? 8 、如何在 Delphi 6 及以上版本中使用可变常量(类型常量)? 9 、几个有用的 ANSI C 和 VC++ 预定义宏 10 、如何在自己的程序中使用脚本语言? 11 、如何在基于 CHtmlView 的程序中使用 HTML 事件映射? 12 、如何得到 Web 页面中的 COM 组件的原始接口? 13 、如何生成全球唯一标识( UID )? 14 、如何重写 MFC 的缺省控件容器( IOleContainer )? 15 、如何重写 WebBroswer 控件的缺省安全处理功能? 16 、如何重写 WebBroswer 控件的缺省下载管理器? 17 、如何定制 IE 或 WebBroswer 控件的缺省打印和打印预览框? 18 、如何扩展 IE 或 WebBroswer 控件提供的文档对象模型( DOM )? 19 、如何给 WebBroswer 控件的扩展文档对象(文档 .external )提供事件能力 ? 20 、如何打开流中的 HTML 文档? 21 、如何使 Web 页面中的对象可以拖动? 22 、如何把 Web 页面中用到的图像等外部文件嵌入 DLL 或 Exe ? 23 、如何使用 #import 指令从文件定位特定类型库资源 ID ? 24 、如何让你的 MFC 类实现 IDispatch 接口? 25 、如何自行管理 IE 缓存目录的内容? 26 、 Windows Mobile 如何使用 WebBrowser 控件? 27 、为什么在 Windows Mobile 无法使用宿主在 exe 的 COM 组件? 28 、如何扩展 IE 的协议,使其支持自定义的协议?
因文件超过20M不能上传,所以拆分为两个文件分次上传 第1章 COM背景知识 1.1 COM的起源 1.1.1 软件业面临的挑战 1.1.2 传统解决方案 1.1.3 面向对象程序设计方法 1.1.4 最终解决方案:组件软件 1.1.5 面向对象的组件模型——COM 1.2 COM的发展历程 1.2.1 COM以前的对象技术:DDE、OLE 1、VBX控件 1.2.2 COM首次亮相:OLE2 1.2.3 Microsoft拥抱Internet:ActiveX 1.2.4 更多的新名词:Windows DNA和COM+ 1.2.5 远程对象:ORBs和DCOM 1.2.6 COM的最新版本:COM+ 1.3 COM技术现状 1.3.1 COM与CORBA 1.3.2 COM与Enterprise Java Beans 1.3.3 Windows之外的COM 小结 第2章 从C++到COM 2.1 C++客户重用C++对象——例程DB 2.1.1 C++对象 2.1.2 客户程序 2.2 将C++对象移进DLL中——例程DB_cppdll 2.2.1 成员函数的引出 2.2.2 内存分配 2.2.3 Unicode/ASCII兼容 2.2.4 例程实现 2.2.4.1 修改接口文件 2.2.4.2 修改对象程序 2.2.4.3 修改客户程序 2.3 C++对象使用抽象基类——例程DB_vtbl 2.3.1 问题:私有数据成员被暴露 2.3.2 解决方案:抽象基类 2.3.2.1 什么是抽象基类(Abstract Base Class) 2.3.2.2 实现秘诀:虚函数(Virtual Functions) 2.3.3 使用抽象基类 2.3.4 例程实现 2.3.4.1 修改接口文件 2.3.4.2 修改对象程序 2.3.4.3 修改客户程序 2.4 改由COM库装载C++对象——例程dbalmostcom 2.4.1 COM库 2.4.2 对象创建的标准入口点 2.4.3 标准对象创建API 2.4.4 标准对象注册 2.4.5 例程实现 2.4.5.1 修改接口文件 2.4.5.2 修改对象程序 2.4.5.3 修改客户程序 2.5 将C++对象变成COM对象 2.5.1 引用计数 2.5.2 多接口 2.5.3 IUnknown接口 2.5.4 标准类厂接口:IClassFactory 2.5.5 对象代码的动态卸载 2.5.6 自动注册 2.5.7 例程实现 2.5.7.1 修改接口文件 2.5.7.2 修改对象程序 2.5.7.3 修改客户程序 2.6 为COM对象添加多接口支持 2.6.1 多接口 2.6.2 DEFINE_GUID 2.6.3 例程实现 2.6.3.1 修改接口文件 2.6.3.2 修改对象程序 2.6.3.3 修改客户程序 小结 第3章 COM基础知识 3.1 对象与接口 3.1.1 COM对象 3.1.2 COM接口 3.1.3 IUnknown接口 3.1.3.1 生存期控制:AddRef和Release 3.1.3.2 接口查询:QueryInterface 3.1.4 全球唯一标识符GUID 3.1.5 COM接口定义 3.1.6 接口描述语言IDL 3.2 COM应用模型 3.2.1 客户/服务器模型 3.2.2 进程内组件 3.2.3 进程外组件 3.2.4 COM库 3.2.5 HRESULT返回值 3.2.6 COM与注册表 3.3 COM组件 3.3.1 实现类厂对象 3.3.2 类厂对象的创建 3.3.3 实现自动注册 3.3.4 实现自动卸载 3.4 COM客户 3.4.1 COM对象创建函数 3.4.1.1 CoGetClassObject 3.4.1.2 CoCreateInstance 3.4.1.3 CoCreateInstanceEx 3.4.2 如何调用进程内组件 3.4.3 COM客户调用进程外组件 3.5 进一步认识COM 3.5.1 可重用机制:包容和聚合 3.5.2 进程透明性 3.5.3 安全性机制 小结 第4章 COM扩展技术 4.1 可连接对象机制 4.1.1 客户、接收器与可连接对象 4.1.1.1 接收器 4.1.1.2 可连接对象 4.1.1.3 客户 4.1.2 实现可连接对象 4.1.3 实现接收器 4.1.4 建立接收器与连接点的连接 4.1.5 获得出接口的类型信息 4.2 结构化存储 4.2.1 什么叫结构化存储和复合文件 4.2.2 存储对象和IStorage接口 4.2.2.1 IStorage接口 4.2.2.2 获得IStorage指针 4.2.2.3 释放STATSTG内存 4.2.2.4 枚举存储对象中的元

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧