我创建了一个对话框窗口,并尝试布置一些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);
如果我的客户区大于当前可见的客户区,即需要滚动条滚动剩余的“隐藏”区,则会出现问题。使用GetClientRect
返回的尺寸不正确,导致标签的位置不在“整个”客户区的底部,而仅在“可见”的位置:
使用GetWindowRect
不起作用,因为它也只检索“可见”区域+边框和标题标题栏。
本质上,我要问的是如何获得没有边框和标题的整个可见+不可见客户区域?
答案 0 :(得分:1)
本质上,我要问的是如何获得整个可见的+ 看不见的客户区域,没有边界和标题?
调用CWnd::GetScrollRange()
获得最小和最大滚动位置。它们的区别在于您所要求的价值:
int minPos = 0, maxPos = 0;
GetScrollRange( SB_VERT, &minPos, &maxPos );
int scrollableClientHeight = abs( maxPos - minPos );
要获得可滚动的宽度,请将SB_VERT
替换为SB_HORZ
。
答案 1 :(得分:-3)
为什么要尝试创建滚动条的窗口类并为此尝试每个位置? Window.h的创建者为此提供了一些样式。
只需使用窗口样式即可:
WS_VSCROLL
和
WS_HSCROLL