首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用于静态文本的WM_SETTEXT不刷新控件内容。

用于静态文本的WM_SETTEXT不刷新控件内容。
EN

Stack Overflow用户
提问于 2016-04-01 18:30:04
回答 2查看 922关注 0票数 0

这对我来说很好奇。

当我用这个:

代码语言:javascript
运行
复制
Helpers.WinApi.SendMessage(nextControl, Helpers.WinApi.WM_SETTEXT, 0, "My String");

如果nextControl是静态控件(标签),则控件不会立即刷新。奇怪的是,只有当我按Alt键时,控件才会显示更改的文本。当我强制进行控件刷新时(例如,最小化并恢复窗口时),它甚至不会显示已更改的文本。

这种情况只发生在静态控制上。对于编辑控件,不会发生这种情况。

如何解决这个问题?

詹姆

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-01 21:53:20

我已经解决了通过改变标签的宽度设置后。这是必要的,因为如果文本大于标签的宽度,它将被剪切。作为一个副作用,幸运的是,静态控件被重新绘制,看到由WM_SETTEXT消息设置的文本。

放大静态控件的代码是:

代码语言:javascript
运行
复制
                        // 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
EN

Stack Overflow用户

发布于 2016-09-20 17:13:38

发生这种情况的一个常见原因是静态控件是否具有SS_SIMPLE样式。例如,如果将样式更改为SS_LEFT,则重新绘制文本更改将正确进行。(例如,如果新文本比旧文本短,则新文本的右侧不会留下剩余字符。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36363428

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档