CTreeCtrl sendet ungewollt WM_TIMER - wParam=3?
-
Hallo,
ich habe ein TreeCtrl in dem die ToolTips deaktiviert sind (EnableToolTips(FALSE). Trotzdem werden vom Ctrl Nachrichten mit message = WM_TIMER gesendet. Lässt sich das verhalten deaktivieren? Dieser Timer scheint gänzlich undokumentiert zu sein.
Danke und Grüße
-
Ich weis zwar nicht on das Ctrl wirklich WM_Timer benutzt aber vorstellen kann ich mir das nicht, warum auch? Für die ToolTips wird man MouseMove Benutzen, was ja mehr Sinn macht.
Und selbst wenn das Ctrl den Timer benutzt, wenn du das nicht auswertest und dem eigentlichen Ctrl weiterleitest, dann kann dir die Sache doch eigentlich egal sein. Oder anders gesagt seh ich dein problem jetzt nicht wirklich, was ist schlimm drann wenn das Ctrl wirklich WM_Timer mit dem wParam=3 benutzt?
-
WM_TIMER wird vom CTreeCtrl gesendet, wenn man mit der Maus über dem Ctrl ist. Das mit dem Tooltip war eine Vermutung. Den WM_TIMER kann man eindeutig bestimmen.
Wenn man nun eine MDI-Anwendung mit sehr vielen geöffneten Frames hat. In den einzelnen Frames hat man individuelle Menü- und Toolbareinträge die wiederum über die UpdateUI (ON_UPDATE_COMMAND_UI) ein-/ausgeschaltet werden. Ein unnützer (vermutlich) WM_TIMER sorgt dafür, dass alle OnUpdateUI durchlaufen werden obwohl die UI gerade nicht sichtbar ist. Das sorgt für eine unnütze Grundlast. Mit einer Überschreibung von IsIdleMessage(...) kann man das verhindern, oder man frägt sich warum das überhaupt so ist, der WM_TIMER vom CTreeCtrl.
-
Das kann viele Ursachen haben. Zum Beispiel auch um Resourcen wieder frei zu geben... genaues weiß ich nicht.
Wie hoch ist denn die Frequenz?
Ansonsten verstehe ich Dein Problem nicht ganz. WM_IDLEUPDATECMDUI wird nur gesendet wenn die Anwednung sichtbar ist.
Siehe CWinThread::OnIdle.Ansonsten kann man auch dafür sorgen, dass die OnUpdate Handler schneller funktionieren, indem man zum Beispiel Kalkulationsergebisse cached und mit einem "changed flag" versieht... etc.