C ++ Win32 Multiline静态标签

时间:2013-03-04 09:17:48

标签: c++ winapi label

我在标签上有多行问题。

我尝试过使用ES_MULTILINE,但每当我使用它时,我会在标签的位置上看到一个灰色/黑色矩形,而没有标签的文字。

CreateWindowW(L"STATIC", selectedPatternProblem, WS_CHILD | WS_VISIBLE | SS_LEFT | ES_MULTILINE | WM_CTLCOLORSTATIC,500, 190, 380, 90,*hwnd, (HMENU) 1, NULL, NULL);

当我添加WM_CTLCOLORSTATIC时,矩形消失了,但我的文字也是如此。 'selectedPatternProblem'太大而无法只在一行显示,所以我的问题是:

如何在多行显示我的标签?

编辑:删除ES_MULTILINE和WM_CTLCOLORSTATIC后,我发现我的话太长了。但现在我想知道如何在多行上显示一个长字?

3 个答案:

答案 0 :(得分:5)

您正在使用带有静态控件的编辑控件样式(ES_MULTILINE),而静态控件并非旨在支持它。该样式可能会映射到SS_BLACKRECTSS_GRAYRECT,这可以解释您正在观察的行为。

您不必为当前控件添加任何样式以达到您想要的效果,因为您已经指定了SS_LEFT,并且documentation说:

  

<强> SS_LEFT

     

一个简单的矩形并左对齐矩形中的文本。文本   在显示之前格式化。延伸到结尾的词   一行自动包装到下一行的开头   左对齐线。长于控件宽度的单词   截断。

由于您既未指定SS_LEFTNOWORDWRAP也未指定其中一种SS_*ELLIPSIS样式,因此文本应包含在字边界之间。

请注意,您还使用WM_CTLCOLORSTATIC 消息作为样式,这肯定无法按预期工作。您应该从控件的样式中删除该值。

答案 1 :(得分:2)

ES_MULTILINE适用于编辑控件而非标签

MSDN

  

指定多行编辑控件。默认为单行编辑   控制。

     

当多行编辑控件位于对话框中时,默认为   按ENTER键的响应是激活默认按钮。

答案 2 :(得分:1)

我使用编辑控件作为多行编辑控件的替代方法。我在资源文件

中设置了以下属性

EDITTEXT IDC_COMMENT,58,53,75,41,ES_MULTILINE | ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER