如何在一个全局函数中获得DOC指针

我的情况是就差最后一点完成我的设计。我主要是遇到一点问题。就是如何在一个全局函数中,获得它文档类(或者是视图类)的指针啊?这个是我的现在的问题。
我在网上找到了一个帖子。看是看了。可是看了不是很懂。
http://topic.csdn.net/t/20051114/22/4393300.html

现在我遇见的情况就是和这个帖子的情况是一样的。可能是在一个全局函数中,获得它Doc类的指针。

如在单文档中,在任何对象中怎么得到指向该CMyDoc的指针?http://topic.csdn.net/t/20020423/17/670401.html
和这个帖子也差不多。搞不明白这个代码。



用这个能获得当前视图类AfxGetActiveView
((CFrameWnd  *)AfxGetMainWnd())->GetActiveDocument();
if(!m_pDocTemp)
{
m_pDocTemp = new CMultiDocTemplate(
IDR_NETALATYPE,
RUNTIME_CLASS(CNetAlarmServerDoc),
RUNTIME_CLASS(CChildFrame), // custom MDI child frame
RUNTIME_CLASS(CNetAlarmServerRealtimeView));
AfxGetApp()->AddDocTemplate(m_pDocTemp);
}
if(m_m_pDocTem)
{

POSITION pos1 = m_m_pDocTem->GetFirstDocPosition();
while(pos1)//枚举Doc类
{
CYourDoc*pDoc = (CYourDoc*)m_m_pDocTem->GetNextDoc(pos1);
if(pDoc)
{

}
}

}
为什么要这么做?这么做是违反OOP规范的
你可以让函数的调用者把文档指针传给你,或者用订阅者模式通知指定的文档进行操作
我一般都这么获取
CYourDoc* pDoc = (CYourDoc*)((CMainFrame*)AfxGetMainWnd())->GetActiveView()->GetDocument();
请问jiangsheng:
用订阅者模式通知指定的文档进行操作具体怎么实现?我初学vc,不知什么是订阅者模式。
你的项目是多文档架构,不能按单文档的方法来处理。
CFrameWnd* mainFrame = (CFrameWnd*)AfxGetMainWnd(); // 得到主框架指针
CFrameWnd* childFrame = mainFrame->GetActiveFrame(); // 得到当前活动的子框架指针
CView* view = childFrame->GetActiveView(); // 得到当前活动视图指针
CDocument* doc = view->GetDocument(); // 得到当前活动文档指针
可以将以上指针强制转换为你自己程序中定义的框加类、文档类、视图类指针类型来使用,要注意各个函数调用返回的指针有可能为NULL(如果不存在活动的)。
对全局函数调用DOC指针的设计,不太好。破坏了OO的基本要求。
CDocument* doc = view->GetDocument(); // 得到当前活动文档指针
然后,就可以操作了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值