关于WM_WINDOWPOSCHANGING时间的一个小疑问

当在WTL中处理这个事件时,如果

MESSAGE_HANDLER(WM_WINDOWPOSCHANGING, OnPosChanging)
LRESULT OnPosChanging(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL
& bHandled)
{
WINDOWPOS wp
= *(LPWINDOWPOS)lParam;
WINDOWPOS
* wndPos =℘
....
}

按照MSDN中的说明,lParam是一个指向WINDOWPOS的指针。以我的理解可以直接使用这个数据来进行处理。

但是实验发现,如果我将这个结构数据复制一下(如上面代码所示)和直接使用的效果是不一样的。

当直接使用指针时,如果对其中的数据进行更改,比如更改了宽度, 然后调用defWindowProc,此时生成的窗口大小好像就变小了(实际的区域),

而将这个数据复制之后,在调用defWindowProc, 此时生成的窗口区域没变

这种现象可以通过自己处理WM_ERASEBKGND消息来观察。

具体的原因还未知,不过msdn上有这样一句话,While this message is being processed, modifying any of the values in WINDOWPOS affects the window's new size, position, or place in the Z order,但是不知道说的影响的是什么区域。。具体在看看


....

....

原文地址:https://www.cnblogs.com/kwliu/p/2131250.html