Я пишу оболочку Windows Api и столкнулся с проблемой. Я абстрагирую оконную процедуру (WndProc) и написал статический MsgHandler, который будет вызывать WndProc моего класса WinHandler. Вот код:
LRESULT CALLBACK WinHandle::MsgHandler(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
WinHandle* wnd = 0;
if (msg == WM_NCCREATE)
{
::SetWindowLong(hwnd,GWL_USERDATA,
long((LPCREATESTRUCT(lParam))->lpCreateParams));
}
wnd = (WinHandle*) (::GetWindowLong(hwnd,GWL_USERDATA));
if (wnd)
return wnd->WndProc(msg,wParam,lParam);
else
return ::DefWindowProc(hwnd,msg,wParam,lParam);
}
Поскольку эта функция является статической, указатель this отсутствует и он отлично работает с WNDCLASSEX, но по какой-то причине он никогда не вызывает wnd-> WndProc () и всегда возвращает процедура окна по умолчанию. Нужна помощь. Что случилось? Кто-нибудь знает лучший подход?