Visual c++ CView::OnInitialUpdate()为我提供了较低的宽度和高度

Visual c++ CView::OnInitialUpdate()为我提供了较低的宽度和高度,visual-c++,mfc,size,screen,getclientrect,Visual C++,Mfc,Size,Screen,Getclientrect,在CView::OnInitialUpdate()中使用GetClientRect比在CView::OnSize中使用相同的代码在宽度和高度上的值要低 即 我得到的最新消息 tagRECT = {top=0 bottom=468 left=0 right=1009} 当我在里面的时候 tagRECT = {top=0 bottom=518 left=0 right=1062} 这里似乎有什么问题?为什么假设从GetClientRect返回的值相同?毕竟,OnSize会被调用以响应大小的更改。

在CView::OnInitialUpdate()中使用GetClientRect比在CView::OnSize中使用相同的代码在宽度和高度上的值要低

我得到的最新消息

tagRECT = {top=0 bottom=468 left=0 right=1009}
当我在里面的时候

tagRECT = {top=0 bottom=518 left=0 right=1062}

这里似乎有什么问题?

为什么假设从
GetClientRect
返回的值相同?毕竟,
OnSize
会被调用以响应大小的更改。窗口将以最大化状态启动,并且在初始更新后调用OnSize,而不会更改窗口大小。我怀疑在最初的更新调用中水平和垂直滚动条的空间。滚动条的宽度只有大约20像素,所以这不可能。在
HWND
准备就绪之前,在
CreateWindow
中设置初始大小,因此不会调用
WM_size
/
OnSize
。在
OnInitialUpdate
之后的某个时刻,会调用
SetWindowPos
,更改大小并发送
WM_size
消息。如果你没有直接改变大小,那么一定是框架工作。是的,我从乞求中知道,额外的空间对滚动条来说太多了。我认为你是对的,某个地方的框架改变了视图的位置和大小。问题是:是否有一个安全的地方可以只获取一次或初始化的最终大小?当然,我可以在onsize中执行此操作,但是如果我只想在视图创建时将其用于初始化,我该怎么做?为什么需要一个“安全的地方”?当尺寸改变时,你必须做所有你需要的计算。所以答案很简单:尺寸改变->好,让我做新的计算。