这对我很好奇。
当我使用它时:
Helpers.WinApi.SendMessage(nextControl, Helpers.WinApi.WM_SETTEXT, 0, "My String");
如果nextControl是STATIC控件(标签),则控件不会立即刷新。好奇心是,只有当我按下Alt键时,控件才会显示更改的文本。当我强制控制刷新时,它甚至不显示更改的文本(例如,最小化然后恢复窗口时)。
这仅在STATIC控制时发生。使用EDIT控件,它不会发生。
如何解决?
的Jaime
答案 0 :(得分:0)
我已经解决了设置后更改标签的宽度。这是必要的,因为如果文本大于标签的宽度,它将被剪切。作为副作用,幸运的是,静态控件被重新绘制,看到WM_SETTEXT消息设置的文本。
扩大静态控制的代码是:
// 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);
答案 1 :(得分:0)
发生这种情况的一个常见原因是STATIC控件是否具有SS_SIMPLE样式。例如,如果您将样式更改为SS_LEFT,则会在文本更改时重绘正确。 (例如,如果新文本比旧文本短,则不会在新文本的右侧留下残留字符。)