这是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结构。进入时,该结构包含了建议的窗口矩形。返回时,该结构应该包含窗口客户区的屏幕坐标
当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结构。进入时,该结构包含了建议的窗口矩形。返回时,该结构应该包含窗口客户区的屏幕坐标
解决方案 »
- MFC对话框的一个小问题
- 能否将用Wizard创建的MFC 模态对话框程序,改成非模态的? 怎么改(都能交互)?
- 如何设一个指向十六进制字符串“FF FF FF FF 66 66 DA 41”的指针?
- 如何修改工具栏上每个按钮的图片大小?
- 在VC6.0的程序中读写*.js的java文件有何意义?
- 这个问题问了好多次,怎么没有人回答啊!!!!
- 软件界面开发套餐在CSDN被发表
- MSDN 2001 OCT DISC3哪里有下?
- VS2008 项目迁移 ,在线急等。
- 高分请教:ADO调用存储过程,参数传递顺序导致数据类型转换错误DB_E_CANTCONVERTVALUE
- dumpbin命令怎么不好使?
- IOCP中关于投递0字节缓冲区WSARecv的问题!
第二,这段话自己翻译一下:
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.
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]功能相同
但好像只说了wparam为假的时候,当你处理完后,需要将rgrc[0]修改成新的client坐标