2

WndProc をプライベート メンバーとしてラップする方法はありますか?

私がこれを持っている場合:

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;

次の警告が表示されます。

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]

そして私のウィンドウHWNDNULLGetLastError()また0を返します。

これはどのように修正できますか?

4

3 に答える 3

5

静的にします:

static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
于 2013-01-20T11:45:50.187 に答える
5

static修飾子を追加する必要があります。

この理由は、メンバー関数 (Visual C++ では a であると私は信じています) の場合、実際には最初のパラメーターとして__thiscall取る C 関数にすぎないためです。thisこれは次のようになります。

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

Window& this静的にすると、コンパイラは最初のパラメーターを取り除き、lpfnWndProc.

于 2013-01-20T12:01:33.520 に答える