2016-04-01 4 views
0

Das ist neugierig auf mich.WM_SETTEXT für STATIC Text aktualisiert den Steuerinhalt nicht

Wenn ich dies:

Helpers.WinApi.SendMessage(nextControl, Helpers.WinApi.WM_SETTEXT, 0, "My String"); 

Wo nextControl eine STATIC Kontrolle ist (ein Etikett), geht die Steuerung nicht sofort aktualisieren. Die Neugier ist, dass das Steuerelement den geänderten Text nur anzeigt, wenn ich die Alt-Taste drücke. Der geänderte Text wird nicht einmal angezeigt, wenn ich die Steueraktualisierung erzwinge (z. B. beim Minimieren und anschließenden Wiederherstellen des Fensters).

Dies geschieht nur mit STATIC-Steuerung. Mit EDIT-Steuerelementen passiert es nicht.

Wie löst man es?

Jaime

Antwort

0

I verändert die Breite des Etiketts nach Satz gelöst haben. Dies war notwendig, da Text, der größer ist als die Breite des Etiketts, abgeschnitten wird. Als Nebeneffekt wurde das statische Steuerelement glücklicherweise neu gezeichnet, da der von der WM_SETTEXT-Nachricht festgelegte Text angezeigt wurde.

Der Code der statischen Kontrolle zu vergrößern war:

     // Si es un label, debe agrandar el ancho para que se acomode a la cantidad de caracteres del control 
         System.Drawing.Size size = Helpers.WinApi.MeasureString(System.Drawing.Graphics.FromHwnd(hWnd).GetHdc(), formatted.ToString()); 
         Helpers.WinApi.RECT rect = new Helpers.WinApi.RECT(); 
         if (Helpers.WinApi.GetWindowRect(nextControl, out rect)) 
          Helpers.WinApi.MoveWindow(nextControl, rect.Left, rect.Top, rect.Right - rect.Left + size.Width, rect.Bottom - rect.Top, true); 
+0

Sie können UpdateWindow() verwenden, um einen ähnlichen Effekt des erzwungenen Fenster-Repaint zu erhalten. – bunglehead

+0

@buldelehead glaube ich nicht. Wenn das ganze Fenster neu gezeichnet wird (wegen Maximierung oder Änderung des Vordergrundfensters), sollte UpdateWindow automatisch aufgerufen werden, und wie ich in der Frage gesagt habe, wurde Control nur aktualisiert, wenn ich die Alt-Taste drücke. Neugierig. – jstuardo

+0

Ich meine UpdateWindow() auf statische Steuerfenster selbst natürlich nicht Ihren gesamten Dialog oder was auch immer Elternteil diese statische hat. Seltsam, dass ich dies mit dem ControlSpy-Testprogramm nicht reproduzieren kann, werden sowohl Version 5 als auch 6 sofort ohne erzwungenes Update aktualisiert. – bunglehead

0

Eine häufige Ursache für dieses Ereignis ist, wenn die Kontrolle der statischen Aufladung der SS_SIMPLE Stil. Wenn Sie den Stil beispielsweise in SS_LEFT ändern, wird das Neuzeichnen bei Textänderungen korrekt ausgeführt. (Wenn der neue Text beispielsweise kürzer ist als der alte Text, bleiben rechts neben dem neuen Text keine Zeichen übrig.)

Verwandte Themen