这是palmax 给我讲解的:
当wParam为TRUE时,lPARAM指向一个NCCALCSIZE_PARAMS结构体,也就是说: 
NCCALCSIZE_PARAMS *pnccs = (NCCALCSIZE_PARAMS*)lParam; 
这时你可以修改窗口客户区的大小,如果你把客户区的bottom往上缩,那么底部的边框就会变粗: 
pnccs->rgrc[0].bottom -= (30 - ::GetSystemMetrics(SM_CYBORDER)); 
// pnccs->rgrc是一个含有3个RECT元素的数组,其中rgrc[0]指示的是当前客户区的RECT大小, 你要求底部厚度为30,我就用30减去原来底部的厚度 
// 原来底部的厚度通过::GetSystemMetrics(SM_CYBORDER)来获取 // 下来告诉系统你已经处理了这个消息,如果你是在 WndProc 中处理的,return 0 就可以了;如果你是MFC框架中afx_msg void OnNcCalcSize()中处理的,屏蔽掉基类的处理CWnd::OnNcCalcSize(或CDialog::OnNcCalcSize,具体取决你建立的是对话框还是其他窗口程序)但是我这样理解的:
rgrc[0]指向的是新的windows的RECT,rgrc[1]是之前的windows的RECT, 
rgrc[2]是之前客户区的RECT,是不是看错了。 我知道当wparam为假的时候 
lParam指向一个RECT结构。进入时,该结构包含了建议的窗口矩形。返回时,该结构应该包含窗口客户区的屏幕坐标

解决方案 »

  1.   

    第一,你自己试试;
    第二,这段话自己翻译一下:
    Specifies an array of rectangles. The first contains the new coordinates of a window that has been moved or resized, that is, it is the proposed new window coordinates. The second contains the coordinates of the window before it was moved or resized. The third contains the coordinates of the window's client area before the window was moved or resized. If the window is a child window, the coordinates are relative to the client area of the parent window. If the window is a top-level window, the coordinates are relative to the screen origin. 
      

  2.   

    据MSDN说法:
    WParam == TRUE时, rgrc[0] 传入的是window的rect(坐标相对于parent),当你处理完后,需要将rgrc[0]修改成新的client坐标(同样相对于parent坐标)。
    rgrc[1]传入的是move/resize前的window rect, rgrc[2]传入的是move/resize前的client rect. 这两个rect在返回值 == WVR_VALIDRECTS时,rgrc[1],rgrc[2]需要保存成目标rect和源rect, 源rect指定的窗口内容会用目标rect裁减后原封不动copy到新位置/大小的窗口中(也就是说这部分将被BeginPaint时从DC中裁减掉)
    WParam == FALSE时,指向的rect和TRUE时的rgrc[0]功能相同
      

  3.   

    MSDN上说当wparam为真和假的时候, rgrc[0] 传入的是window的rect(坐标相对于parent),
    但好像只说了wparam为假的时候,当你处理完后,需要将rgrc[0]修改成新的client坐标