如何检查窗口中 Row 的长度或宽度是否大于其父窗口C++的宽度

How to check if the length or width of Row in a window is greater than the width of its parent window C++

本文关键字:窗口 是否 何检查 大于 C++ Row 检查      更新时间:2023-10-16

如果行的宽度超过其父窗口的宽度,我想将复选框的现有文本包装成多行。我真的不知道该怎么做。

我要显示复选框字符串的图像

裁剪字符串的图像,仅在窗口大小或最大化时显示

恐怕你会有问题。

将复选框设置为多行的设置是ES_MULTILINE,如果您查看此处,您将看到它指出:

若要使用CreateWindowCreateWindowEx函数创建编辑控件,请指定 EDIT 类、相应的窗口样式常量以及以下编辑控件样式的组合。创建控件除非另有说明,否则无法修改这些样式。

所以,在我看来,你有三条前进的道路,这取决于你觉得什么对你来说是最好或最优雅的。

  1. 无论如何,在资源编辑器中将控件设置为多行。那么没关系,会包裹。无需更改设置。

  2. 实现所需的功能以限制窗口可以减小到的大小。如果你有兴趣,我可以告诉你如何。这样,如果正确设置了控件调整大小属性,它可以调整更大的大小,但只能减小已知维度(即:在资源编辑器中创建的维度)。

  3. 可能在同一位置有两个控件,一个为多行,一个为单行。当您决定要显示哪个时,请交换可见性。但我认为这是一个坏主意,有点头疼,不值得麻烦。

恕我直言,我会同时做想法 1 和 2,我很乐意扩展我的答案以提供更多信息。

更新

看了你的图片和关于翻译的评论,然后有第四个想法。如果您使用第三方应用程序来管理翻译并使用附属 DLL 文件,则可以按语言调整资源。由于某些窗口的冗长性质,我有时不得不使某些窗口的默认宽度变宽。

我已经为复选框设置了BS_MULTILINE。窗口的最小大小是固定的,但我只希望复选框适合它。我希望它与其他标签在同一行中至少显示一个单词,并在第二行显示剩余单词。所以我正在检查第一行的总宽度是否大于窗口的宽度,然后显示带有\r的字符串,否则显示普通字符串。但是,我想将复选框的第一行或第一个单词与复选框对齐,其余单词应位于第一个单词下方。目前,该复选框位于两行之间,看起来很奇怪。无论如何我能做到这一点吗?