WS_VSCROLL,CreateWindow样式有效,SetWindowLong不行

时间:2008-11-12 22:19:05

标签: 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_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);

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:2)

您可以使用ShowScrollBar()函数执行此操作。 如果要启用/禁用窗口的滚动条,您可能还会发现有趣的函数EnableScrollBar()。 最好的问候。