WM_CREATE中的InvalidateRect不起作用

时间:2009-03-30 20:53:11

标签: c++ c windows winapi

我希望在创建窗口时使窗口无效。我怎样才能做到这一点?在WM_CREATE期间调用InvalidateRect不起作用。

问题是我在WM_CREATE中调用SetWindowLongPtr并设置GWLP_USERDATA。 WM_PAINT在USER_DATA中查找一些指针,但是第一次收到WM_PAINT时,数据显然仍然存在,所以它会绘制我的东西。

还试过这个:

#define MyDefinedMsg (WM_APP+1)
//...//
case WM_CREATE:
  //...//
  SetWindowLongPtr(hWnd,GWLP_USERDATA,ptr);
  PostMessage(hWnd,MyDefinedMsg,0,0);

  break;
case MyDefinedMsg: 
  InvalidateRect(hWnd,NULL,TRUE);
  break;

但没有用。

提前致谢

2 个答案:

答案 0 :(得分:3)

  1. 您的窗口在创建时已无效
  2. PostMessage将消息放入队列中,因此很可能在常规创建消息(WM_CREATE/WM_SIZE/WM_PAINT等)之后到达。
  3. 如果您的绘画由于GWLP_USERDATA为NULL而失败,那么还会发生其他事情......

答案 1 :(得分:1)

::UpdateWindow(...)致电后尝试::CreateWindow(...),而不是发送您的信息。