这对我来说很好奇。
当我用这个:
Helpers.WinApi.SendMessage(nextControl, Helpers.WinApi.WM_SETTEXT, 0, "My String");
如果nextControl是静态控件(标签),则控件不会立即刷新。奇怪的是,只有当我按Alt键时,控件才会显示更改的文本。当我强制进行控件刷新时(例如,最小化并恢复窗口时),它甚至不会显示已更改的文本。
这种情况只发生在静态控制上。对于编辑控件,不会发生这种情况。
如何解决这个问题?
詹姆
发布于 2016-04-01 21:53:20
我已经解决了通过改变标签的宽度设置后。这是必要的,因为如果文本大于标签的宽度,它将被剪切。作为一个副作用,幸运的是,静态控件被重新绘制,看到由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);
发布于 2016-09-20 17:13:38
发生这种情况的一个常见原因是静态控件是否具有SS_SIMPLE样式。例如,如果将样式更改为SS_LEFT,则重新绘制文本更改将正确进行。(例如,如果新文本比旧文本短,则新文本的右侧不会留下剩余字符。)
https://stackoverflow.com/questions/36363428
复制相似问题