そうです、それです!WNDCLASS.cbWndExtra を使うのがミソです!
CreateWindow(..... 最後 (Derived)this);
extern "C" long CALLBACK WindProc(...) {
if (msg == WM_CREATE) {
p = (Derived*)((LPCREATESTRUCT)lp)->lpCreateParams;
SetWindowLong(hwnd, 0, (LONG)p);
p->hwnd = hwnd // これを見つけるのが大変だった
.
} else {
p = GetWindowLong(hwnd, 0)
return p->WindowProc() // goto Derived::WindowProc()
}
Derived::WindowProc() {
this->Base::WindowProc()
virtual Base::WindowProc() {
HWND hwnd // member instance variable
return ::DefWindowProc(this->hwnd, mwg, wp, lp);
温故知新…