2016-04-01 22 views
0

Bu beni merak ediyor. STATİK metin için WM_SETTEXT denetim içeriğini yenilemez

bunu kullanmaktan

:

nextControl bir STATİK kontrolünü (bir etiket) 'dir
Helpers.WinApi.SendMessage(nextControl, Helpers.WinApi.WM_SETTEXT, 0, "My String"); 

kontrol hemen yenilemez. Merak, kontrolün değiştirilen metni sadece Alt tuşuna bastığımda göstermesidir. Denetim yenilemeyi zorladığımda (örneğin, pencereyi en aza indirirken ve sonra geri yüklerken) değişen metni bile göstermez.

Bu yalnızca STATIC kontrolü ile olur. EDIT kontrolleri ile gerçekleşmez.

Nasıl çözülür?

Jaime

cevap

0

sette sonra etiketin değiştirildi genişliği ile çözmüştür. Bu gerekliydi çünkü eğer metin etiketin genişliğinden daha büyükse, kesilecek. Bir yan etki olarak, şanslı bir şekilde, statik kontrol WM_SETTEXT mesajıyla belirlenen metni görerek yeniden boyanmıştır.

statik kontrol büyütmek için kod

oldu: STATİK kontrol SS_SIMPLE tarzı vardır bu olayların meydana gelmesi

     // 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

Zorunlu pencere rötuşunun benzer etkisini elde etmek için UpdateWindow() öğesini kullanabilirsiniz. – bunglehead

+0

@bunglehead Ben öyle düşünmüyorum. Tüm pencere (ön plan penceresini en üst düzeye çıkarma veya değiştirme nedeniyle) yeniden boyanırken, UpdateWindow otomatik olarak çağrılmalı ve sözde söylediğim gibi Kontrol, yalnızca Alt Tuşa bastığımda yenilenir. Meraklı. – jstuardo

+0

Statik kontrol penceresinin kendisi üzerinde UpdateWindow() komutunu kullanıyorum, tüm diyaloğunuz ya da bu statik olan her ne varsa ebeveyniniz. Bunu ControlSpy test programı ile yeniden oluşturamıyorum garip, her iki sürüm 5 ve 6 hemen zorla güncelleme olmadan güncelleme. – bunglehead

0

yaygın bir nedenidir. Örneğin, stili SS_LEFT olarak değiştirirseniz, metin değiştirmeyi yeniden yapmak doğru şekilde gerçekleşir. (ör. yeni metin eski metinden kısasa, yeni metnin sağında kalan artık karakterlerle kalmazsınız.)

İlgili konular