有关消息映射的代码出现错误.我用的是vs2005

来源:百度知道 编辑:UC知道 时间:2024/07/01 06:28:57
#include "StdAfx.h"
#include "DialogDia.h"

DialogDia::DialogDia(CWnd* pParent)
:CDialog(130,pParent)
{
m_pWnd=pParent;

}

DialogDia::~DialogDia(void)
{
}
BEGIN_MESSAGE_MAP(DialogDia, CDialog)
ON_WM_LBUTTONUP()
END_MESSAGE_MAP()

void DialogDia::OnLButtonUp(UINT nFlags, CPoint point)
{
if ( m_pWnd )
m_pWnd->SendMessage(WM_COMMAND,8); //发送

CDialog::OnLButtonUp(nFlags, point);
}

view文件:
BEGIN_MESSAGE_MAP(CdialogTestView, CView)
ON_WM_LBUTTONUP()
ON_MESSAGE(WM_COMMAND,ResponseToDialog)//宏

END_MESSAGE_MAP()

void CdialogTestView::ResponseToDialog()
{
MessageBox(_T("test"),NULL,NULL);
}
编译错误:error C2440: “static_cast”: 无法从“void (__thiscall CdialogTestView::* )(void)”转换为“LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)”
在匹配目标类型的范围内没有具有该名称的函数

可能你对自定义消息机制还不太熟悉吧,这样修改一下吧
dialogTestView.h文件
#define WM_RESPOND_TO_DIALOG WM_USER+1000 // 加在文件最前面

CdialogTestView类定义中加入如下函数声明
afx_msg LRESULT ResponseToDialog(WPARAM wParam, LPARAM lParam); // 响应自定义消息

dialogTestView.cpp文件
加入消息映射宏
ON_MESSAGE(WM_RESPOND_TO_DIALOG, &CdialogTestView::ResponseToDialog)

// ResponseToDialog函数实现
LRESULT CdialogTestView::ResponseToDialog(WPARAM wParam, LPARAM lParam)
{
MessageBox(_T("test"),NULL,NULL);
}

另外:
看见你将CdialogTestView对象通过pParent指针在构造函数中传递给DialogDia对象。
因此,DialogDia类对象应在CdialogTestView对象的某函数调用中生成。
例如以下语句
DialogDia dlg(this);
dlg.DoModal();

消息类型定义错了
ON_MESSAGE的对应函数是这样的
LRESULT OnMsgCallback( WPARAM wParam, LPARAM lParam );

而非你的 void ResponseToDialog();

VC6和VS2005的一个很大的区别就是MFC中消息函数的返回值变化了。

以前一些VOID的返回值都变成LRESULT了。直接改成LRESULT就可以了