【问题标题】:Scrollbar is not being hidden滚动条没有被隐藏
【发布时间】:2015-08-22 18:09:23
【问题描述】:

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);

但滚动条并没有被隐藏!

【问题讨论】:

    标签: c winapi


    【解决方案1】:

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

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

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

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

    你在这里创建的不是标准滚动条,而是CreateWindow(Ex)创建的控件类型。意味着windows不会隐藏它。如果您在父窗口创建中使用指定 WS_HSCROLL, WS_VSCROLL 样式创建它 - 那么是的,窗口会自动为您隐藏它。

    如果你仔细想想,它是完美的 API 意义(从 Windows 方面)。如果您指定WS_?SCROLL,您基本上是在说“我认为这个窗口对于它的内容来说可能太小了,Windows,如果 contnet 太大,请自动显示一个滚动条并隐藏它不再相关”。如果您使用 CreateWindow(Ex) 创建滚动条,您基本上是在说“不,我希望这个滚动条存在并显示”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-01
      相关资源
      最近更新 更多