Win32 API の Window-Procedure は、クラス オブジェクト ( 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);
}
}
(registration\creation\msg-loopは省略…)
Events() が起動していないようです...何か不足していますか?