Window-процедура в Win32 API должна быть статической \ глобальной функцией, поскольку она не может принимать параметр объекта класса (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);
}
}
(без регистрации \ создания \ msg-loop ...)
Кажется, что события () не запускаются ... я что-то упустил?