gpt4 book ai didi

c++ - 有没有办法有条件地检查窗口是否正在使用滚动条?

转载 作者:行者123 更新时间:2023-11-30 04:46:40 26 4
gpt4 key购买 nike

在我正在处理的应用程序中,屏幕上绘制了 2 个按钮,它们的左边是 CListBox(我们称它为 myListBox)。

按钮根据从 myListBox.GetClientRect() 检索到的值放置。但是,当 myListBox 中存在滚动条时,这些按钮的位置不正确,因为 GetClientRect 没有考虑滚动条等内容。

我很好奇是否有条件方法可以检查列表框当前是否正在使用滚动条,如果这有意义的话。这样我就可以将差异应用到移动按钮的函数中,这样无论是否存在滚动条,我都可以实现正确的放置。

我尝试了 GetWindowRect,但我认为封装列表框的窗口比列表框本身大得多(事后看来这是显而易见的)。

if (scrollbarinfo.rgstate[0] == (STATE_SYSTEM_INVISIBLE || 
STATE_SYSTEM_UNAVAILABLE))
{
visible = false;
}

最佳答案

您可以使用 CWnd::GetScrollBarInfo函数并检查其 SCROLLBARINFO 检索结构的 rgstate 成员。

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.
}

关于c++ - 有没有办法有条件地检查窗口是否正在使用滚动条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56638457/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com