c ++ - InvalidateRect i WM\_CREATE virker ikke

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg vil ugyldiggøre vinduet, når det er oprettet. Hvordan kan jeg gøre det? At ringe til InvalidateRect under WM\_CREATE virker ikke.


Sagen kalder jeg SetWindowLongPtr i WM\_CREATE og indstiller GWLP\_USERDATA. WM\_PAINT leder efter en vis markør i USER\_DATA, men første gang jeg modtager WM\_PAINT er dataene tilsyneladende stadig der, så det gør det muligt at male mine ting.


Også forsøgt dette:


#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;


men fungerede ikke.


Tak på forhånd

Bedste reference



  1. Dit vindue er allerede ugyldigt, når det er oprettet

  2. PostMessage lægger en besked i køen, så det sandsynligvis kommer efter de normale oprettelsesmeddelelser (WM\_CREATE/WM\_SIZE/WM\_PAINT osv.).



Hvis dit maleri fejler, fordi GWLP\_USERDATA er NULL, sker der noget andet ...

Andre referencer 1


Prøv ::UpdateWindow(...) efter ::CreateWindow(...) ring i stedet for at sende din besked.