Когда сообщение Paint вызывается при вызове CCmdUI :: Enable ()?

Я пытаюсь отладить эту проблему в библиотеке, где набор элементов управления не обновляется для отключения. Я пробурил до точки, где я попал в черный ящик. mfc120ud.dll!CCmdUI::DoUpdate() позвони потом позвони CCmdUI::Enable(), Затем он пройдет через несколько звонков через один ntdll.dll и через 4 user32.dll для которого у меня нет источника, а затем иногда сунуть голову нашему возвращению mfc123ud.dll или же иногда не.

Я не знаю почему WM_PAINT сообщение иногда вызывается. Кто-нибудь знает?

стек вызовов

0

Решение

Ваш стек вызовов показывает причину.

Наконец, CCmdUI :: DoUodate вызывает CCmdUI :: Enable.

Посмотрите в CCmdUI :: Включить код MFC. Есть случаи, когда WM_NEXTDLGCTL вызывается или EnableWindow. WM_NEXTDLGCTL может вызвать изменение фокуса. Это зависит от того, как элементы управления будут обрабатывать это сообщение. Возможно, что они напрямую вызывают UpdateWindow или RedrawWindow, чтобы отразить изменения в пользовательском интерфейсе, вместо того, чтобы просто вызывать Invalidate (Rec). На вашей ленте может быть элемент управления, который получает сообщение WM_PAINT.

Вызов EnableMenuItem должен быть безопасным, и я уверен, что он не вызывает вызов WM_PAINT.

0

Другие решения


По вопросам рекламы [email protected]