我的代码涉及标准Scroll Bar控件,在某些情况下我需要以编程方式更改其值。我使用SetScrollInfo函数执行此操作,如下例所示:
void setScrollBarValue( HWND scrollBar, int value )
{
SCROLLINFO si = { sizeof( SCROLLINFO ); }
si.fMask = SIF_POS;
si.nPos = value;
::SetScrollInfo( scrollBar, SB_CTL, &si, true /* redraw */ );
}
这似乎工作正常(滚动条的拇指移动)但它无法通知应用程序的新滚动条值。例如,使用滚动条的编辑控件(很像在Windows记事本应用程序中)无法滚动,因为它没有收到有关新滚动条值的通知。
如果重要:我正在修改的滚动条与上面的滚动条不同
setScrollBarValue
功能。
有人知道如何实现这个目标吗?
编辑:我发现了如何使用默认窗口滚动条(类型为SB_VERT
或SB_HORZ
的滚动条)执行此操作。我可以将WM_HSCROLL和WM_VSCROLL发送到窗口,如下所示:
::SendMessage( windowContainingScrollBar,
WM_HSCROLL,
MAKEWPARAM( SB_THUMBPOSITION, si.nPos ), NULL );
但是,在我的情况下,滚动条有一个自己的窗口句柄(它具有类型SB_CTL
)。这意味着我不知道滚动条的方向(所以我无法分辨是否发送WM_HSCROLL
或WM_VSCROLL
),我不知道将消息发送到哪个窗口。