滚动条未被隐藏

时间:2015-08-22 09:50:24

标签: c winapi

Scrollbar documentation说:

  

系统在最小值相等时隐藏和禁用标准滚动条   并指定最大值。 系统还会隐藏和禁用   如果指定包含的页面大小,则为标准滚动条   滚动条的整个滚动范围

我已将页面大小设置为滚动范围值:

HWND hScroll = CreateWindowEx(0, "SCROLLBAR", NULL, WS_CHILD | WS_VISIBLE| SBS_HORZ, 10, 10, 400, 20, hWnd, NULL, hInstance, NULL);

SCROLLINFO scrollInfo;
scrollInfo.cbSize = sizeof(SCROLLINFO);
scrollInfo.fMask = SIF_PAGE | SIF_POS | SIF_RANGE;
scrollInfo.nMin = 0;
scrollInfo.nMax = 639;
scrollInfo.nPage = 640;
scrollInfo.nPos = 0;
SetScrollInfo(hScroll, SB_CTL, &scrollInfo, TRUE);

但滚动条没有隐藏!

1 个答案:

答案 0 :(得分:3)

这是正确的行为 你在这里错过了“标准”关键字。

  

标准滚动条位于窗口的非客户区域。它是使用窗口创建的,并在显示窗口时显示。标准滚动条的唯一目的是使用户能够生成用于查看客户区的整个内容的滚动请求。通过在创建窗口时指定WS_HSCROLL,WS_VSCROLL或两种样式,可以在窗口中包含标准滚动条。

这与“控制滚动条”相反:

  

滚动条控件是属于SCROLLBAR窗口类的控件窗口。

您在此处创建的内容不是标准滚动条,而是由CreateWindow(Ex)创建的控件类型。意思是窗户不会隐藏它。如果您在父窗口创建中使用指定WS_HSCROLL, WS_VSCROLL样式创建它 - 那么是,Windows将自动为您隐藏它。

如果您考虑一下,它会产生完美的API感(从Windows端)。如果您指定WS_?SCROLL,您基本上会说“我认为这个窗口可能对于其内容来说太小了,Windows,如果contnet很大并且隐藏它不再相关,请自动显示滚动条”。如果您使用CreateWindow(Ex)创建滚动条,则基本上说“不,我希望此滚动条存在并显示”。