之前我创建了win32包装但我丢失了文件......所以我要再次创建它们。问题出在我的路由器(静态窗口处理器)上 这是我的代码
CFramework *wnd = 0;
// retrieve associated Window instance
wnd = reinterpret_cast<CFramework *>(::GetWindowLongPtr(hWnd, GWL_USERDATA));
// call the windows message handler
wnd->WndProc(hWnd, msg, wParam, lParam);
return true;
当我致电GetWindowLongPtr
时,它无法检索用户数据
的更新:
我也厌倦了使用SetWindowLongPtr
if ( msg == WM_CREATE )
{
SetWindowLongPtr( hWnd, GWLP_USERDATA, (LONG)((CREATESTRUCT *)lParam)->lpCreateParams );
}
Window *targetApp = (Window*)GetWindowLongPtr( hWnd, GWLP_USERDATA );
if ( targetApp )
{
return targetApp->WndProc( hWnd, msg, wParam, lParam );
}
return DefWindowProc( hWnd, msg, wParam, lParam );
我使用了我的第二个代码。^^^^
我把突破点放在SetWindow ......
它似乎永远不会被召唤!
答案 0 :(得分:2)
您的窗口可能会在WM_CREATE
之前收到一些消息。我不久前做了类似的事情,并且在WM_NCCREATE
之前到达了大小和定位消息以及WM_CREATE
。所以你不应该期望看到那些消息的价值。
您是在编译32位还是64位?如果是64位,那么转换为LONG
可能会打击你的指针。
而且,正如Rup在评论中所说,你必须确定没有其他人在使用WM_USERDATA
。