【问题标题】:How to check if the length or width of Row in a window is greater than the width of its parent window C++如何检查窗口中Row的长度或宽度是否大于其父窗口C ++的宽度
【发布时间】:2017-08-09 04:14:15
【问题描述】:

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

The image I want to show the checkbox string

The image where the string is cropped and only shows if window is resized or maximized

【问题讨论】:

    标签: c++ checkbox mfc cbutton


    【解决方案1】:

    恐怕你会有问题。

    复选框multiline的设置是ES_MULTILINE,如果你看here,你会看到它声明:

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

    因此,在我看来,您有三种前进方式,具体取决于您认为对您来说最好或最优雅的方式。

    1. 无论如何,将您在资源编辑器中的控件设置为多行。然后没关系,会换行。无需更改设置。

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

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

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

    更新

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 您应该编辑并更新您的问题。这不是一个答案。另外,我鼓励您显示结果的屏幕截图等,以便我们查看。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-29
      • 2013-06-03
      相关资源
      最近更新 更多