Win32 WndProc as class member

前端 未结 3 989
野的像风
野的像风 2021-01-22 06:58

Is there a way to wrap WndProc as private member?

If I have this:

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

private         


        
相关标签:
3条回答
  • 2021-01-22 07:11

    Make it static:

    static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
    
    0 讨论(0)
  • 2021-01-22 07:15

    You should add the static modifier to it.

    The reason for this, is that when it's a member function (which I believe is a __thiscall in Visual C++), it's actually just a C function taking this as the first parameter. This would look like this:

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

    If you make it static, the compiler gets rid of the first Window& this parameter, making it compatible with lpfnWndProc .

    0 讨论(0)
  • 2021-01-22 07:19

    Yes, it is possible to include a WndProc as a class member. Furthermore, you can modify other class members from it. The trick is to use two WndProc functions, one of them static.

    0 讨论(0)
提交回复
热议问题