我正在尝试使用 WinApi 编写这个 win32 程序,但我被卡住了,因为我正在学习的教程似乎有问题。
主窗口.h:
class MainWindow
{
public:
MainWindow(HINSTANCE);
~MainWindow(void);
LRESULT CALLBACK WndProcedure(HWND, UINT, WPARAM, LPARAM);
// [...]
主窗口.cpp:
MainWindow::MainWindow(HINSTANCE hInstance) : hwnd(0)
{
WNDCLASSEX WndClsEx;
// [...]
WndClsEx.lpfnWndProc = &MainWindow::WndProcedure;
// [...]
}
LRESULT CALLBACK MainWindow::WndProcedure(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{
// [...]
}
我一定是引用了 MainWindow::WndProcedure 错误,因为我完全按照教程中的说明遵循签名,但是构造函数中的 lpfnWndProc 行给出了编译时错误:
错误 C2440:“=”:无法从“LRESULT (__stdcall MainWindow::*)(HWND,UINT,WPARAM,LPARAM)”转换为“WNDPROC”
最佳答案
替换
LRESULT CALLBACK WndProcedure(HWND, UINT, WPARAM, LPARAM);
由
static LRESULT CALLBACK WndProcedure(HWND, UINT, WPARAM, LPARAM);
this 指针是函数调用中的隐藏参数,通过将其声明为静态,this 指针不再是参数,并且两个函数的签名匹配。
关于c++ - C2440 无法在 C++ WinApi 中将 LRESULT 转换为 WNDPROC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7318893/