2015-01-09 56 views
0

我正試圖在庫中調試這個問題,其中一組控件沒有被更新爲禁用。我已鑽到一個點,我打了一個黑匣子。電話將撥打CCmdUI::Enable()。然後,它會通過一堆電話一個都經過ntdll.dll和4至user32.dll對此我沒有來源,然後有時堅持它的頭我們回來mfc123ud.dll有時沒有。什麼時候在CCmdUI :: Enable()調用中調用Paint msg?

我不知道爲什麼有時會調用WM_PAINT消息。有人知道嗎?

call stack

+0

你的問題很廣泛。你能否添加細節來爲你的問題提供某種上下文? – rrirower 2015-01-09 18:56:37

+1

'WM_PAINT'是低優先級消息。它是由系統在無效區域非空時生成的,並且消息隊列中沒有更高優先級的消息(輸入消息,張貼消息)。 – IInspectable 2015-01-09 21:58:28

回答

0

你調用堆棧顯示的原因。

CCmdUI :: DoUodate終於調用CCmdUI :: Enable。

查看MFC的CCmdUI :: Enable代碼。有些情況下稱爲WM_NEXTDLGCTL或EnableWindow。 WM_NEXTDLGCTL可能會導致焦點更改。這取決於控件如何處理此消息。他們可能會直接調用UpdateWindow或RedrawWindow來反映對UI的更改,而不是隻調用Invalidate(Rec)。您的功能區中可能有一個控件接收WM_PAINT消息。

對EnableMenuItem的調用應該是安全的,我確信它不會導致WM_PAINT調用。