mfc中在mainfrm.cpp开始处加入#include"CMyview.h"(假设工程名为My),为什么错误.

来源:百度知道 编辑:UC知道 时间:2024/05/24 08:04:54
我想在框架文件中添加WM_TIMER消息,并实现自定义消息
ON_MESSAGE(WM_MYMESAGE,OnMymessage)//WM_MYMESSAGE为自定义消息.

void CMainFrame::OnTimer(UINT nIDEvent)
{
GetActiveView()->SendMessage(WM_MYMESSAGE);//由视图显示结果.
}

本来可以直接在视图派生类中实现上面的功能,但我想在框架类中实现.
知道的朋友,请解说一下.
谢谢!
更正一下void CMainFrame::OnTimer(UINT nIDEvent) 函数
void CMainFrame::OnTimer(UINT nIDEvent)
{
((CMyView*)GetActiveView())->SendMessage(WM_MYMESSAGE);//由视图显示结果.
}

GetActiveView()->SendMessage(WM_MYMESSAGE);
在vc6.0下,直接使用就可以了。
如果在vc2005下出错,是由于框架应用程序类生成应用程序时构造的时间是不一样造成的。

在mainfrm.cpp里加
#include "MyDoc.h"
#include "MyView.h"

添加到系统生成的应用头文件的后面,并且这2句顺序不能换。

SendMessage()有sdk函数,也有作为CWnd的方法。你所说的情况没必要强制转换成你的view类指针(因为转换与否SendMessage没本质区别,如果你没重新定义SendMessage()函数的话),除非需要使用你自己在View类中定义的方法才有必要转换。

另外,如果你未对自动生成的各头文件名进行改动,你的#include"头文件"是错误的,头文件名开头没有大写的字母C。应该是#include"Myview.h"

最后,如果你的SetTimer是在构造函数中建立,那么请保证使用GetActiveView()函数时View已经创建,然后再使用。建议不要在构造函数中SetTimer.

至于你说的错误,描述不够清楚,所以不知道你说的错误到底是什么。

要不要 #include"CMyview.h" 并没关系。
GetActiveView()->SendMessage(WM_MYMESSAGE); // 就可以了
消息处理是一个数组表格查找,类似与虚函数。

ON_MESSAGE(WM_MYMESAGE,OnMymessage)
这句话应该定义在 CMyView的实现里面。

既然使用了GetActiveView还#include"CMyview.h"干嘛???