有关消息映射的代码出现错误.我用的是vs2005
来源:百度知道 编辑:UC知道 时间:2024/07/01 06:28:57
#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就可以了