Я пытаюсь отладить эту проблему в библиотеке, где набор элементов управления не обновляется для отключения. Я пробурил до точки, где я попал в черный ящик. mfc120ud.dll!CCmdUI::DoUpdate()
позвони потом позвони CCmdUI::Enable()
, Затем он пройдет через несколько звонков через один ntdll.dll
и через 4 user32.dll
для которого у меня нет источника, а затем иногда сунуть голову нашему возвращению mfc123ud.dll
или же иногда не.
Я не знаю почему WM_PAINT
сообщение иногда вызывается. Кто-нибудь знает?
Ваш стек вызовов показывает причину.
Наконец, CCmdUI :: DoUodate вызывает CCmdUI :: Enable.
Посмотрите в CCmdUI :: Включить код MFC. Есть случаи, когда WM_NEXTDLGCTL вызывается или EnableWindow. WM_NEXTDLGCTL может вызвать изменение фокуса. Это зависит от того, как элементы управления будут обрабатывать это сообщение. Возможно, что они напрямую вызывают UpdateWindow или RedrawWindow, чтобы отразить изменения в пользовательском интерфейсе, вместо того, чтобы просто вызывать Invalidate (Rec). На вашей ленте может быть элемент управления, который получает сообщение WM_PAINT.
Вызов EnableMenuItem должен быть безопасным, и я уверен, что он не вызывает вызов WM_PAINT.