【发布时间】: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++