InvalidateRect в WM_CREATE не работает - PullRequest
2 голосов
/ 31 марта 2009

Я хочу сделать недействительным окно при его создании. Как я могу это сделать? вызов InvalidateRect во время WM_CREATE не работает.

Дело в том, что я вызываю SetWindowLongPtr в WM_CREATE и устанавливаю 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 ]

3 голосов
/ 31 марта 2009
  1. Ваше окно уже недействительно при создании
  2. PostMessage помещает сообщение в очередь, поэтому, скорее всего, оно придет после обычных сообщений о создании (WM_CREATE/WM_SIZE/WM_PAINT и т. Д.).

Если ваша картина терпит неудачу из-за того, что GWLP_USERDATA имеет значение NULL, то происходит что-то еще ...

1 голос
/ 31 марта 2009

Попробуйте ::UpdateWindow(...) после ::CreateWindow(...) вызова вместо отправки вашего сообщения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...