gpt4 book ai didi

c++ - 为什么在编译 mfc 应用程序时会出现此错误?

转载 作者:行者123 更新时间:2023-11-28 02:44:27 24 4
gpt4 key购买 nike

我有这个代码:

void CALLBACK CTestTimeUpDlg::MyTimerProc(
HWND hWnd, // handle of CWnd that called SetTimer
UINT nMsg, // WM_TIMER
UINT_PTR nIDEvent, // timer identification
DWORD dwTime // system time
)
{
const int m_TimerValue=0;
double timeValueSec=m_TimerValue/1000.0;
CString valueString;
valueString.Format(L"%3.3f",timeValueSec);
m_TimerDisplayValue.SetWindowTextW(valueString);
}


void CTestTimeUpDlg::OnBnClickedButtonStart()
{
m_TimerValue=0;
m_Timer = SetTimer(1, 1, &CTestTimeUpDlg::MyTimerProc);

}

但是当我编译它的时候,我得到了这个错误:

 'CWnd::SetTimer' : cannot convert parameter 3 from 'void (__stdcall CTestTimeUpDlg::* )(HWND,UINT,UINT_PTR,DWORD)' to 'void (__stdcall *)(HWND,UINT,UINT_PTR,DWORD)'   

代码类似于微软文档中的代码:

http://msdn.microsoft.com/en-us/library/49313fdf.aspx

最佳答案

您应该使 CTestTimeUpDlg::MyTimerProc 静态。但是,通过这样做,您无法访问实例成员,例如 m_TimerDisplayValue

在这种情况下你不应该使用回调。将 lpfnTimer 设置为 NULL,作为 the link 样本中的第一个计时器.这样,计时器就会发送消息 WM_TIMER,您可以通过非静态成员函数处理它。

添加:
好像the document (加上我上面的话)缺乏解释。

按照以下步骤实现WM_TIMER的处理程序。

在类声明中声明处理程序:

afx_msg void OnTimer(UINT_PTR nIDEvent);

在您的 cpp 文件中,添加消息映射:

BEGIN_MESSAGE_MAP(CTestTimeUpDlg, ...)
ON_WM_TIMER()
END_MESSAGE_MAP()

和实现:

void CTestTimeUpDlg::OnTimer(UINT_PTR nIDEvent)
{
// your code here...
}

关于c++ - 为什么在编译 mfc 应用程序时会出现此错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24908913/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com