Winapi WS_VSCROLL,CreateWindow样式有效,SetWindowLong无效

Winapi WS_VSCROLL,CreateWindow样式有效,SetWindowLong无效,winapi,controls,scrollbar,styles,Winapi,Controls,Scrollbar,Styles,当我这样做的时候 wnd = CreateWindow("EDIT", 0, WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN, x, y, w, h, parentWnd, NULL, NULL, NULL); 一切都很好,但是如果我删除WS_VSCROLL和WS_HSCROL

当我这样做的时候

wnd = CreateWindow("EDIT", 0,
    WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE | 
    ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN,
    x, y, w, h,
    parentWnd,
    NULL, NULL, NULL);
一切都很好,但是如果我删除WS_VSCROLL和WS_HSCROLL,然后执行以下操作,我不会得到它们,因此窗口不正确。为什么? 我不仅得到了一个错误的窗口,而且如果WS_VSCROLL和WS_HSCROLL都丢失了,它就不可用了

style = WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_HSCROLL | ES_MULTILINE |
    ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN;
SetWindowLong(wnd, GWL_STYLE, style);

创建窗口后,无法更改某些控件样式。ES_AUTOHSCROLL样式(本质上控制单词包装)就是其中之一;MSDN关于的章节对此进行了说明(有些间接)。您可以使用SetWindowLong()设置位,但控件将忽略它们或行为不稳定


干净地执行此操作的唯一方法是使用所需的样式重新创建编辑控件。这实际上是记事本在切换“Word Wrap”设置时所做的操作。

您可以使用ShowScrollBar()函数来完成。 如果要启用/禁用窗口的滚动条,还可能会发现函数EnableScrollBar()很有趣。 致以最良好的祝愿