Один элемент управления MFC / Win32, кажется, заставляет перекрашивать весь мой рабочий стол - PullRequest
3 голосов
/ 23 февраля 2010

У меня есть пользовательский элемент управления, который владеет окном редактирования и перемещает его, и т. Д. Поле редактирования обычно модифицируется с помощью кода, подобного этому:

edit.MoveWindow( &rc );
edit.SetWindowText( text );
edit.SetLimitText( N );
edit.ShowWindow(SW_SHOW);
edit.SetFocus();
edit.SetSel(0, CB_ERR);

RECT rc находится в координатах, локальных для пользовательского элемента управления, редактирование создается с использованием пользовательского элемента управления в качестве родительского элемента. Я даже не уверен, что это является определенно проблемой, но при запуске этого кода иногда он бывает приятным и плавным, в других случаях весь мой рабочий стол мерцает, как будто его перерисовывают. Я не вижу, что я нигде явно называю Invalidate (Rect).

Есть идеи?

1 Ответ

1 голос
/ 23 февраля 2010

Это не будет тот код, который вы нам показываете. Флэш-память рабочего стола почти всегда где-то в вашем коде, которая вызывает InvalidateRect(NULL,...), так что продолжайте копать.

Некоторые из этих вызовов приведут к отправке сообщений в родительское окно редактирования, скорее всего, InvalidateRect происходит при обработке этого сообщения.

Если бы я был букмекером, я бы поставил на вызов SetFocus () как тот, который вызывает перерисовку.

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