在CMainFrame类里如何调用View类的方法???

doall4u 2003-08-23 12:39:13
我在CMainFrame里添加了一个菜单事件,一点就调用View类的ShowMessage()方法,我试了试不行,总出错.
void CSDIView::ShowMessage()
{
MessageBox("zhengjia!!!");
}
void CMainFrame::OnOoTest()
{
// TODO: Add your command handler code here

CSDIView::ShowMessage();
}
各位指点一下
...全文
123 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐代的农民 2003-08-25
  • 打赏
  • 举报
回复
CSDIDoc* GetDocument();
xghost 2003-08-25
  • 打赏
  • 举报
回复
在MainFrm.cpp中加#include "***Doc.h" ;
在MainFrm.cpp中加#include "***View.h" ;

注意头文件的顺序


doall4u 2003-08-24
  • 打赏
  • 举报
回复
up
houdy 2003-08-24
  • 打赏
  • 举报
回复
可能是头文件重包含的问题。
wl3c 2003-08-24
  • 打赏
  • 举报
回复
谁能说说原因啊?
doall4u 2003-08-24
  • 打赏
  • 举报
回复
哦,我没有看清楚,这次可以了,但是方法是不是太繁琐啦,为什么在CSDIView类定义前加class CSDIDoc呢????
唐代的农民 2003-08-24
  • 打赏
  • 举报
回复
你的ShowMessage();是protected:类型
当然会出错啦
建议你先看看C++的书吧。
look4u 2003-08-24
  • 打赏
  • 举报
回复
liushax() :我照你的做了,但:
--------------------Configuration: SDI - Win32 Debug--------------------
Compiling...
MainFrm.cpp
E:\VC_EXE\SDI\MainFrm.cpp(112) : error C2248: 'ShowMessage' : cannot access protected member declared in class 'CSDIView'
e:\vc_exe\sdi\sdiview.h(38) : see declaration of 'ShowMessage'
Error executing cl.exe.

SDI.exe - 1 error(s), 0 warning(s)


我的ShowMessage是这样声明的:
class CSDIView : public CView
{
protected: // create from serialization only
CSDIView();
DECLARE_DYNCREATE(CSDIView)

// Attributes
public:
CSDIDoc* GetDocument();

// Operations
public:

// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSDIView)
public:
virtual void OnDraw(CDC* pDC); // overridden to draw this view
virtual BOOL PreCreateWindow(CREATESTRUCT& cs);
protected:
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);
//}}AFX_VIRTUAL
void ShowMessage();
后面省略....
不明白了
唐代的农民 2003-08-24
  • 打赏
  • 举报
回复
1: 在MainFrm.cpp中加#include "SDIView.h",
2: 在CSDIView类定义前加class CSDIDoc;
3: MainFrm.cpp类中实现如下
void CMainFrame::OnOoTest()

CTempMdiView *pView = (CTempMdiView*)GetActiveView();
pView->ShowMessage();

不用我再说了吧
xghost 2003-08-23
  • 打赏
  • 举报
回复
up
doall4u 2003-08-23
  • 打赏
  • 举报
回复
up!
doall4u 2003-08-23
  • 打赏
  • 举报
回复
up!
doall4u 2003-08-23
  • 打赏
  • 举报
回复
liushax() :
跟本不用发,我通过向导建立了一个SDI工程,什么都没动,就加了这么两个函数,你建个试试
唐代的农民 2003-08-23
  • 打赏
  • 举报
回复
xingxhen6@163.com,是否介意发过来?
houdy 2003-08-23
  • 打赏
  • 举报
回复
我也遇到这样的问题,你试试这样:
在CYourApp中添加各种视或文档的指针,在那些视或文档初始化的时候将指针传给CYourApp中的对应变量。这样以后不管在哪用上面指针只需(CYourApp*)AfxGetApp()取其属性变量即可。
如:
CMyApp* pApp=(CMyApp*) AfxGetApp();
pApp->pView->ShowMessage();
试试这样,看怎么样。
doall4u 2003-08-23
  • 打赏
  • 举报
回复
去掉头文件,在class CMainFrame类定义前加Class CSDIView,出错:
--------------------Configuration: SDI - Win32 Debug--------------------
Compiling...
MainFrm.cpp
E:\VC_EXE\SDI\MainFrm.cpp(37) : error C2146: syntax error : missing ';' before identifier 'CSDIView'
E:\VC_EXE\SDI\MainFrm.cpp(37) : error C2501: 'Class' : missing storage-class or type specifiers
E:\VC_EXE\SDI\MainFrm.cpp(37) : fatal error C1004: unexpected end of file found
Error executing cl.exe.
doall4u 2003-08-23
  • 打赏
  • 举报
回复
liushax():
加头文件我也试过了,出错:
-------------------Configuration: SDI - Win32 Debug--------------------
Compiling...
MainFrm.cpp
e:\vc_exe\sdi\sdiview.h(21) : error C2143: syntax error : missing ';' before '*'
e:\vc_exe\sdi\sdiview.h(21) : error C2501: 'CSDIDoc' : missing storage-class or type specifiers
e:\vc_exe\sdi\sdiview.h(21) : error C2501: 'GetDocument' : missing storage-class or type specifiers
E:\VC_EXE\SDI\MainFrm.cpp(114) : error C2248: 'ShowMessage' : cannot access protected member declared in class 'CSDIView'
e:\vc_exe\sdi\sdiview.h(37) : see declaration of 'ShowMessage'
Error executing cl.exe.

SDI.exe - 4 error(s), 0 warning(s)
唐代的农民 2003-08-23
  • 打赏
  • 举报
回复
晕,不会连这点编译错误还要请教人家吧??
在class CMainFrame类定义前加Class CSDIView;或者#include "SDIView.h"
doall4u 2003-08-23
  • 打赏
  • 举报
回复
SoLike(是我) :
你的方法我试过,不行;
--------------------Configuration: SDI - Win32 Debug--------------------
Compiling...
MainFrm.cpp
E:\VC_EXE\SDI\MainFrm.cpp(112) : error C2065: 'CSDIView' : undeclared identifier
E:\VC_EXE\SDI\MainFrm.cpp(112) : error C2065: 'pView' : undeclared identifier
E:\VC_EXE\SDI\MainFrm.cpp(112) : error C2059: syntax error : ')'
E:\VC_EXE\SDI\MainFrm.cpp(113) : error C2227: left of '->ShowMessage' must point to class/struct/union
Error executing cl.exe.

SDI.exe - 4 error(s), 0 warning(s)
思危 2003-08-23
  • 打赏
  • 举报
回复
CSDIView* pView = (CSDIView*)GetActiveView();
pView->ShowMessage();
加载更多回复(4)

16,471

社区成员

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

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

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