如何通知程序设置滚动条值的应用程序?

时间:2010-06-11 13:12:20

标签: winapi scrollbar notifications

我的代码涉及标准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_VERTSB_HORZ的滚动条)执行此操作。我可以将WM_HSCROLLWM_VSCROLL发送到窗口,如下所示:

::SendMessage( windowContainingScrollBar,
               WM_HSCROLL,
               MAKEWPARAM( SB_THUMBPOSITION, si.nPos ), NULL );

但是,在我的情况下,滚动条有一个自己的窗口句柄(它具有类型SB_CTL)。这意味着我不知道滚动条的方向(所以我无法分辨是否发送WM_HSCROLLWM_VSCROLL),我不知道将消息发送到哪个窗口。

1 个答案:

答案 0 :(得分:1)

尝试在调用SetScrollInfo()后发送WM_VSCROLL消息。