如何知道CWnd滚动条是否可见

How to know if a CWnd scrollbar is visible?

本文关键字:是否 滚动条 何知道 CWnd      更新时间:2023-10-16

我有一个显示图像的自定义控件。当图像超过可显示的大小时,它会显示滚动条。出于某种原因,我想知道滚动条是水平还是垂直显示。在CWnd类中找不到任何直接函数。

我找到了GetScrollBarInfo,但没能查到。这是代码:

SCROLLBARIINFO stHSBInfo;
GetScrollBarInfo( this->GetSafeHwnd(), OBJID_HSCROLL, &stHSBInfo );
if(  !( STATE_SYSTEM_INVISIBLE &stHSBInfo.rgstate[0] )) // Always true
{
    // Code
}

请帮忙!

使用GetSystemMetrics获取系统滚动条宽度的大小。在GetWindowRect和GetClientRect之间比较自定义控件的大小。如果差异大于滚动条宽度的大小,则是可见的。

文档指出;在调用GetScrollBarInfo函数之前,请将cbSize设置为sizeof(SCROLLBARINFO)"

您的代码应该更新为:

SCROLLBARIINFO stHSBInfo;
stHSBInfo.cbSize = sizeof(SCROLLBARINFO);
GetScrollBarInfo( this->GetSafeHwnd(), OBJID_HSCROLL, &stHSBInfo );
if(  !( STATE_SYSTEM_INVISIBLE &stHSBInfo.rgstate[0] )) // Always true
{
    // Code
}