c++ - 使用滚动条时如何获得正确的窗口客户区大小?
问题描述
我创建了一个对话框窗口并尝试布置一些EditBoxArray, ComboBoxArray
控件和CStatic
标签。我使用以下方式设置窗口位置:
SetWindowPos(&wndTop, 10, 10, width, height, SWP_SHOWWINDOW);
我能够使用GetClientRect(&rect)
不包括任何边框或标题栏的窗口来检索正确的客户端大小。这允许我在窗口底部设置标签,如下所示:
GetClientRect(&rect);
y_position = rect.bottom - MY_LABEL_HEIGHT;
....
my_label.SetWindowPos(NULL, x, y_position , width, MY_LABEL_HEIGHT, SWP_SHOWWINDOW);
如果我的客户区大于当前可见区,就会出现问题,即需要滚动条来滚动剩余的“隐藏”区域。UsingGetClientRect
返回一个不正确的大小,导致标签不是位于“整个”客户区域的底部,而只是位于“可见”的区域:
使用GetWindowRect
不起作用,因为它也只检索“可见”区域+边框和标题标题栏。
本质上,我要问的是如何获得整个可见+不可见的客户区域,没有边框和标题?
解决方案
本质上,我要问的是如何获得整个可见+不可见的客户区域,没有边框和标题?
调用CWnd::GetScrollRange()
以获取最小和最大滚动位置。它们的区别在于您要求的值:
int minPos = 0, maxPos = 0;
GetScrollRange( SB_VERT, &minPos, &maxPos );
int scrollableClientHeight = abs( maxPos - minPos );
要获得可滚动宽度,请替换SB_VERT
为SB_HORZ
.
推荐阅读
- jquery - 当折叠元素已经显示时,Bootstrap 4展开全部/全部折叠按钮不起作用
- ios - сconstraints 在具有收藏视图的 iPad 上不起作用
- javascript - 鉴于以下代码,为什么我的 $_FILES 为空?
- azure-web-app-service - Azure Web App:为什么高级版比标准版便宜
- php - 在php中按日期(字符串)过滤和排序foreach循环
- text - 如何在星期一通过 Twilio 接收入站文本?
- python - ImportError:无法从“urllib3.util.url”导入名称“IPV6_ADDRZ_RE”
- amazon-web-services - 在 AWS - 不可变和蓝/绿部署之间的区别?
- android - 在执行后台作业时禁用 RecyclerView 项目 onClick
- ffmpeg - 使用 ffmpeg 录制 X 屏幕时获得一致的 60fps