Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
1.1k views
in Technique[技术] by (71.8m points)

c++ - Win32 WndProc as class member

Is there a way to wrap WndProc as private member?

If I have this:

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

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

And in my create() this:

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

I get this warning:

warning: converting from 'LRESULT (Window::*)(HWND, UINT, WPARAM, LPARAM) {aka long int (Window::*)(HWND__*, unsigned int, unsigned int, long int)}' to 'WNDPROC {aka long int (__attribute__((__stdcall__)) *)(HWND__*, unsigned int, unsigned int, long int)}' [-Wpmf-conversions]

And my window HWND is NULL, GetLastError() also returns 0.

How can this be fixed?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Make it static:

static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...