在mainframe里自己定义的函数该怎么调用,比如说在view类里的一个消息响应函数里调用一个fun()
4个回答
展开全部
教你一个最简单的原则,就是VC里面的函数调用原则。其实,VC里面的函数调用,没有你想想的那么难。
原则一、如果类是系统提供的类,如view类,doc类,系统会提供 获取指向该类指针的函数。例如,vc里面获取view类的指针:
CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;
CyouView *pView=(CyouView *)pMain->GetActiveView();
获取frame类的指针:
CWinApp 中的 m_pMainWnd变量就是MainFrame的指针
也可以:
CMainFrame *pMain =(CMainFrame *)AfxGetMainWnd();
关于这些类的指针获取,参考下面这篇文章。
http://hi.baidu.com/slj_win/blog/item/ada712c4556803d1d10060ab.html
原则二、 如果类是你自己写的。例如,你定义类A,需要在类B中引用。那么你就要在类B的头文件(.h)文件中添加该类的的头文件,即#include“A.h”,然后用一个指针指向类A,这样就可以通过该指针引用类A了。但是,直接包含头文件,会造成编译时的效率过低。通常效率比较高的方法是,在类B的头文件中添加类A的声明 class A;然后再类B的实现文件中添加类A的头文件#include“A.h”。因为,文件中包含头文件的话,头文件互相包含,会造成编译的文件超乎想象的庞大,影响整个软件的效率。
原则一、如果类是系统提供的类,如view类,doc类,系统会提供 获取指向该类指针的函数。例如,vc里面获取view类的指针:
CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;
CyouView *pView=(CyouView *)pMain->GetActiveView();
获取frame类的指针:
CWinApp 中的 m_pMainWnd变量就是MainFrame的指针
也可以:
CMainFrame *pMain =(CMainFrame *)AfxGetMainWnd();
关于这些类的指针获取,参考下面这篇文章。
http://hi.baidu.com/slj_win/blog/item/ada712c4556803d1d10060ab.html
原则二、 如果类是你自己写的。例如,你定义类A,需要在类B中引用。那么你就要在类B的头文件(.h)文件中添加该类的的头文件,即#include“A.h”,然后用一个指针指向类A,这样就可以通过该指针引用类A了。但是,直接包含头文件,会造成编译时的效率过低。通常效率比较高的方法是,在类B的头文件中添加类A的声明 class A;然后再类B的实现文件中添加类A的头文件#include“A.h”。因为,文件中包含头文件的话,头文件互相包含,会造成编译的文件超乎想象的庞大,影响整个软件的效率。
展开全部
你这个例子添加Doc的ID_FILE_OPEN响应函数就可以了。
直接在响应函数中调用已有函数不就行了吗,
如果你非要建立到已有函数的映射,也可以改变消息映射,但是这个已有的函数也要符合被映射的消息预定义的参数格式。这里ON_COMMAND映射的函数是无参数的。就就是已有的函数要和
向导添加的OnFileOpen形式参数一样无参数。
在doc类的代码的以下区域改消息的映射函数。
BEGIN_MESSAGE_MAP
ON_COMMAND(ID_FILE_OPEN, &CxxDoc::OnFileOpen)
END_MESSAGE_MAP()
把后面的&CxxDoc::OnFileOpen映射函数改成已有的函数。
直接在响应函数中调用已有函数不就行了吗,
如果你非要建立到已有函数的映射,也可以改变消息映射,但是这个已有的函数也要符合被映射的消息预定义的参数格式。这里ON_COMMAND映射的函数是无参数的。就就是已有的函数要和
向导添加的OnFileOpen形式参数一样无参数。
在doc类的代码的以下区域改消息的映射函数。
BEGIN_MESSAGE_MAP
ON_COMMAND(ID_FILE_OPEN, &CxxDoc::OnFileOpen)
END_MESSAGE_MAP()
把后面的&CxxDoc::OnFileOpen映射函数改成已有的函数。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
上面说得很好,可以用
CMainFrame *pMain=(CMaimFrame *)AfxGetApp()->m_pMainWnd;
等。
不过最简单的方法如下
view类中获取它的父frame
CMainFrame *pMain=(CMaimFrame*)GetParentFrame();
得到mainframe指针后就可以直接访问mainframe的公共成员了。
mainframe->fun();
CMainFrame *pMain=(CMaimFrame *)AfxGetApp()->m_pMainWnd;
等。
不过最简单的方法如下
view类中获取它的父frame
CMainFrame *pMain=(CMaimFrame*)GetParentFrame();
得到mainframe指针后就可以直接访问mainframe的公共成员了。
mainframe->fun();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
CMainFrame *pMain=(CMaimFrame *)AfxGetApp()->m_pMainWnd就行
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询