在我正在处理的应用程序中,相对于直接位于其左侧的CListBox
(我们称为myListBox
),在屏幕上绘制了2个按钮。
根据从myListBox.GetClientRect()
检索的值放置按钮。但是,当myListBox
中存在滚动条时,这些按钮放置不正确,因为GetClientRect
不考虑诸如滚动条之类的问题。
我很好奇是否有条件的方式可以检查列表框当前是否使用滚动条。这样,我可以将差异应用于移动按钮的功能,以便无论是否存在滚动条都可以实现正确的放置。
我尝试了GetWindowRect
,但是我想封装列表框的窗口比列表框本身大得多(事后看来这很明显)。
if (scrollbarinfo.rgstate[0] == (STATE_SYSTEM_INVISIBLE ||
STATE_SYSTEM_UNAVAILABLE))
{
visible = false;
}
最佳答案
您可以使用 CWnd::GetScrollBarInfo
函数并检查其rgstate
检索结构的SCROLLBARINFO
成员。
SCROLLBARINFO sbi { };
LONG lScrollBar = OBJID_VSCROLL; //can also be OBJID_HSCROLL or OBJID_CLIENT
GetScrollBarInfo(lScrollBar, &sbi);
if (sbi.rgstate[0] & STATE_SYSTEM_INVISIBLE)
{
//Scroll bar is not visible at the moment.
}
else if (sbi.rgstate[0] & STATE_SYSTEM_UNAVAILABLE)
{
//Scrol bar is disabled, but might be visible.
}