gpt4 book ai didi

c++ - Win32 WndProc 作为类成员

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:27:23 24 4
gpt4 key购买 nike

有没有办法将 WndProc 包装成私有(private)成员?

如果我有这个:

class Window
{
public:
Window();
virtual ~Window();
void create();

private:
LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
};

在我的 create() 中:

WNDCLASSEX wc;
wc.lpfnWndProc = (WNDPROC) &Window::WndProc;

我收到这个警告:

警告:从 'LRESULT (Window::*)(HWND, UINT, WPARAM, LPARAM) {aka long int (Window::*)(HWND__*, unsigned int, unsigned int, long int) 转换}' 到 'WNDPROC {aka long int (__attribute__((__stdcall__)) *)(HWND__*, unsigned int, unsigned int, long int)}' [-Wpmf-conversions]

而我的窗口HWNDNULLGetLastError()也返回0。

如何解决这个问题?

最佳答案

您应该为其添加 static 修饰符。

这样做的原因是,当它是一个成员函数(我相信它是 Visual C++ 中的 __thiscall)时,它实际上只是一个将 this 作为第一个参数。这看起来像这样:

LRESULT CALLBACK WndProc(Window& this, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);

如果将其设为静态,编译器会去掉第一个 Window& this 参数,使其与 lpfnWndProc 兼容。

关于c++ - Win32 WndProc 作为类成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14424150/

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