6

我正在尝试在 Visual Studio 2010 中构建 MFC Visual Studio 6.0 项目。编译器给了我一个错误:

错误 C2440: 'static_cast' : 无法从 'void (__thiscall ProgressDialog::* )(void)' 转换为 'LRESULT (__thiscall CWnd::* )(WPARAM,LPARAM)'

//--------------------------------- // 消息映射

BEGIN_MESSAGE_MAP(ProgressDialog, CDialog) ON_BN_CLICKED(IDC_CANCEL, OnCancelClicked) ON_MESSAGE (MSG_FINISHED, OnFinished) END_MESSAGE_MAP()

有什么建议么 - ?

佩德罗

4

2 回答 2

9

将您的 ON_MESSAGE 宏更改为 ON_MESSAGE_VOID。ON_MESSAGE 宏从接收 WPARAM 和 LPARAM 参数返回 LRESULT。您的编译器错误消息指出您的 OnFinished() 方法是返回 void 的 void 参数。这就是 ON_MESSAGE_VOID 宏处理的内容。

添加:

请参阅C++ Q & A的底部——Microsoft Systems Journal 1999 年 7 月

于 2012-05-16T13:48:26.773 回答
1

MFC7.0中发生了重大变化,包括:

ON_MESSAGE宏中的函数参数必须与类型匹配

afx_msg LRESULT (CWnd::*)(WPARAM, LPARAM)

您的ProgressDialog::OnFinished方法现在需要返回一个LRESULT.

于 2012-05-16T12:46:40.420 回答