【问题标题】:How to get the handle of a SysTreeView32's scrollbar?如何获取 SysTreeView32 的滚动条的句柄?
【发布时间】:2020-04-02 16:00:12
【问题描述】:

我有一个带有两个关联滚动条的SysTreeView32 控件:

从树所在的窗口开始,我无法恢复滚动条的句柄;我编写了一个简单的递归函数来导航控件及其所有子控件:

TestScroll( HWND hwnd, UINT msg, UINT_PTR nId, DWORD nTickCount)
{
    CWnd* pNextWnd = tmpWnd->GetWindow( GW_CHILD) ;

    if ( pNextWnd != NULL)
        TestScroll( pNextWnd->GetSafeHwnd(), msg, nId, nTickCount) ;

    pNextWnd = tmpWnd->GetNextWindow( GW_HWNDNEXT) ;

    if ( pNextWnd != NULL)
        TestScroll( pNextWnd->GetSafeHwnd(), msg, nId, nTickCount) ;

}

当我到达 SysTreeView32 控件时,我无法深入到层次结构中,并且似乎没有更多的子控件;但 Spy++ 确认滚动条确实存在。

欢迎任何建议,非常感谢!

【问题讨论】:

  • 您要解决什么问题
  • 几乎可以肯定,您的问题的解决方案并不需要您戳中常用控件的内部实现细节
  • There are two types of scrollbars。您的解决方案只能与其中之一一起使用。另一个是禁区。
  • 使用Visual Styles API 为您的应用程序皮肤可能会更好。它相当不完整且记录不充分,但显然它允许您将 custom colors 分配给滚动条。
  • 作为窗口非客户区一部分的滚动条是为响应WM_NCPAINT 和其他消息而绘制的,有时也与消息无关。您可以通过子类化获得一些方法,但很难正确地做到这一点,因为 Windows 根本不适合让您自定义绘制这些元素。

标签: c++ user-interface winapi mfc spy++


【解决方案1】:

Windows 确实提供了一个可以作为 HWND 存在的滚动条类,但树视图控件(以及大多数其他常见控件)使用 the other scrollbar type,它是父 HWND 的一部分(WS_HSCROLL 和/或 WS_VSCROLL样式)。

【讨论】:

  • 我在写完我的问题后不久就找到了这篇文章,但是 spy ++ 给了我一些希望,因为我可以看到两个滚动条相关联的句柄;感谢您的澄清!
猜你喜欢
  • 1970-01-01
  • 2014-05-22
  • 2012-02-09
  • 1970-01-01
  • 2019-01-27
  • 1970-01-01
  • 2011-04-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多