GetWindowLongPtr失败返回检索用户数据

时间:2011-02-22 17:56:27

标签: c++ winapi

之前我创建了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 ...... 它似乎永远不会被召唤!

1 个答案:

答案 0 :(得分:2)

您的窗口可能会在WM_CREATE之前收到一些消息。我不久前做了类似的事情,并且在WM_NCCREATE之前到达了大小和定位消息以及WM_CREATE。所以你不应该期望看到那些消息的价值。

您是在编译32位还是64位?如果是64位,那么转换为LONG可能会打击你的指针。

而且,正如Rup在评论中所说,你必须确定没有其他人在使用WM_USERDATA