WS_VSCROLL,CreateWindow样式有效,SetWindowLong不行

4 winapi controls styles scrollbar

当我做

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);
Run Code Online (Sandbox Code Playgroud)

一切都很好,但是如果我删除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);
Run Code Online (Sandbox Code Playgroud)

efo*_*nis 8

创建窗口后无法更改某些控件样式.ES_AUTOHSCROLL样式(基本上控制自动换行)就是其中之一; 这是由编辑控件样式的MSDN部分(有些间接地)说明的.您可以使用SetWindowLong()设置位,但控件将忽略它们或行为不正常.

干净利落的唯一方法是使用所需的样式重新创建编辑控件.这实际上就是当你切换"自动换行"设置时记事本的作用.