我的情况是就差最后一点完成我的设计。我主要是遇到一点问题。就是如何在一个全局函数中,获得它文档类(或者是视图类)的指针啊?这个是我的现在的问题。
我在网上找到了一个帖子。看是看了。可是看了不是很懂。
http://topic.youkuaiyun.com/t/20051114/22/4393300.html
现在我遇见的情况就是和这个帖子的情况是一样的。可能是在一个全局函数中,获得它Doc类的指针。
如在单文档中,在任何对象中怎么得到指向该CMyDoc的指针?http://topic.youkuaiyun.com/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(); // 得到当前活动文档指针
然后,就可以操作了。
我在网上找到了一个帖子。看是看了。可是看了不是很懂。
http://topic.youkuaiyun.com/t/20051114/22/4393300.html
现在我遇见的情况就是和这个帖子的情况是一样的。可能是在一个全局函数中,获得它Doc类的指针。
如在单文档中,在任何对象中怎么得到指向该CMyDoc的指针?http://topic.youkuaiyun.com/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(); // 得到当前活动文档指针
然后,就可以操作了。