有没有办法创建一个优雅的类成员窗口函数?

Tar*_*Tar 5 winapi d dmd gdc

Win32 API 中的窗口过程必须是静态\全局函数,因为它不能采用类对象(the this)参数。当然可以使用 hWnd->object 字典等解决方法。

我想知道D是否有办法优雅地解决它,比如为每个对象创建一个微小的成员函数副本(以调用对象的真实处理程序)或我可以分配给的匿名函数WNDCLASS.lpfnWndProc(我知道有匿名函数,但我不能使用extern(Windows)他们的财产)?

我可以做这样的事情吗:


class Window {
    extern (Windows)
    LRESULT delegate (HWND hWnd, UINT msg, WPARAM w, LPARAM l) MyWinProcDelegate;

    this() {
        MyWinProcDelegate = &Events;
    }

    extern (Windows)
    LRESULT Events (HWND hWnd, UINT msg, WPARAM w, LPARAM l) {
        MessageBoxA(null , "Success!!!" , null ,0);
        return DefWindowProcA(hWnd, message, wParam, lParam);
    }
}
Run Code Online (Sandbox Code Playgroud)

(省略注册\创建\msg-loop...)

Events() 似乎没有触发...我错过了什么吗?

Vla*_*eev 1

使用SetWindowLongthis存储在窗口本身怎么样?