请教,如何在mainframe类里得到view类的指针??

kxw 2002-08-27 02:22:17
如何在mainframe类里得到view类的指针??
...全文
312 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hfqian 2002-08-27
  • 打赏
  • 举报
回复
在mainframe类里得到view类的指针,直接使用
CxxxView * pView = (CxxxView *)GetActiveView();
需要在CMainFrame的文件中加入CxxxView的头文件。

如果需要在从CWnd类派生的类中获得当前的活动视,可以使用如下方法:
CFrameWnd *pFrmWnd = (CFrameWnd *)(AfxGetApp()->m_pMainWnd);
CxxxView *pxxxView = (CxxxView *)pFrmWnd->GetActiveView();
当然,别忘了包含CxxxView的头文件哟!
webber84 2002-08-27
  • 打赏
  • 举报
回复
看这个函数返回的true还是flase,如果是true,win+f,搜索一下。
kxw 2002-08-27
  • 打赏
  • 举报
回复
还有一个问题,我在mainframe中onclose写入一个ini文件时,当我关应用程序时并没有产生一个ini文件

我在onclose中写入 ::WritePrivateProfileString("Program","Name",((CStartPageView*) GetActiveView()) ->m_name1,".\\setting.ini");
kxw 2002-08-27
  • 打赏
  • 举报
回复
好,搞定。
  • 打赏
  • 举报
回复
在你的mainframe中包含视图的头文件和文档的头文件,应该没问题的。
好好检查你的程序吧!!!
kxw 2002-08-27
  • 打赏
  • 举报
回复
我都包含了,但是还是报错

e:\code\Projects\StartPage\StartPageView.h(20): error C2143: syntax error : missing ';' before '*'
e:\code\Projects\StartPage\StartPageView.h(20): error C2501: 'CStartPageView::CStartPageDoc' : missing storage-class or type specifiers
e:\code\Projects\StartPage\StartPageView.h(20): error C2501: 'CStartPageView::GetDocument' : missing storage-class or type specifiers
e:\code\Projects\StartPage\StartPageView.h(20): warning C4183: 'GetDocument': missing return type; assumed to be a member function returning 'int'
e:\code\Projects\StartPage\MainFrm.cpp(121): error C2039: 'm_name1' : is not a member of 'CView'
webber84 2002-08-27
  • 打赏
  • 举报
回复
SDI的话就只要GetActiveView()就行了:
CMyView* pView=(CMyView*)GetActiveView();
包含view的头文件时要把doc的头文件同时包含要它的前面,因为view类的成员函数GetDocument涉及到doc对象.
kxw 2002-08-27
  • 打赏
  • 举报
回复
我用GetActiveView()只能得到CView类的指针,不能操纵我自己的View类。
kxw 2002-08-27
  • 打赏
  • 举报
回复
GaoDi,我用的是SDI界面,要找doctemplate吗??

还有,如果在mainframe中加和view 类的头文件,会编译错的!~
webber84 2002-08-27
  • 打赏
  • 举报
回复
这是MDI和SDI通用的办法:
CFameWnd* pActiveFrame=GetActiveFrame();
CView* pView=pActiveFrame->GetActiveView();
GaoDi 2002-08-27
  • 打赏
  • 举报
回复
//首先得到doc的指针
POSITION pos=AfxGetApp()->GetFirstDocTemplatePosition();
CDocTemplate *ptempl=AfxGetApp()->GetNextDocTemplate(pos);
POSITION doc_pos=ptempl->GetFirstDocPosition();
CXXXXDoc * pDoc=(CViewSrnDoc *)ptempl->GetNextDoc(doc_pos);

//然后得到view的指针
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
CView* pView = GetNextView(pos);
//pView->UpdateWindow();
}

kxw 2002-08-27
  • 打赏
  • 举报
回复
OK,非常感谢,我先试试,一会儿给分。:)
落入凡间的猪 2002-08-27
  • 打赏
  • 举报
回复
((C***View*)(this->GetActiveView()))->你要调用的方法();
  • 打赏
  • 举报
回复
(CyourView*)GetActiveView();
别忘了在CMainFrame类的头文件中加入view类的头文件。

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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