这个DeflateRect用法是什么意思?

时间:2022-06-01 18:04:32
这是在看别人一个载Button类时DrawItem函数内的代码,不知道他这个用法是什么意思?有高人麻烦指点一下:
CRect rect =  lpDrawItemStruct->rcItem;
rect.DeflateRect(CSize(GetSystemMetrics(SM_CXEDGE), GetSystemMetrics(SM_CYEDGE)));

上面这段代码是什么意思?
其中GetSystemMetrics(SM_CXEDGE)是获取什么信息?

6 个解决方案

#1


void   DeflateRect(int   x,int   y);   
  void   DeflateRect(SIZE   size);   
  void   DeflateRect(LPCRECT   lpRect);   
  void   DeflateRect(int   l,int   t,int   b);   
  参数:   
  x   指定要向左或向右移动CRect边的数量   
  y   指定要向上或向下移动CRect边的数量   
  size   指定CRect移动数量的SIZE或CSize。   
            cx   指定移动左右边的数;   
            cy   指定移动上下边的数;   
  lpRect   指向一个指定每边数量的RECT结构或者CRect。   
  说明:   DeflateRect   通过

#2


void   DeflateRect(int   x,int   y);   
  void   DeflateRect(SIZE   size);   
  void   DeflateRect(LPCRECT   lpRect);   
  void   DeflateRect(int   l,int   t,int   b);   
  参数:   
  x   指定要向左或向右移动CRect边的数量   
  y   指定要向上或向下移动CRect边的数量   
  size   指定CRect移动数量的SIZE或CSize。   
            cx   指定移动左右边的数;   
            cy   指定移动上下边的数;   
  lpRect   指向一个指定每边数量的RECT结构或者CRect。   
  说明:   DeflateRect   通过
SM_CXEDGE,SM_CYEDGE 以相素值为单位的3D边框的宽度和高度

#3


DeflateRect   通过朝它的中心移动边以缩小CRect

#4


SM_CXEDGE,SM_CYEDGE:
Dimensions, in pixels, of a 3-D border. These are the 3-D counterparts of SM_CXBORDER and SM_CYBORDER.
3d边框的大小

#5


我同楼主的情况相似,也是在看别人的自绘按钮代码的时候才知道这个函数的,自我感觉意思就是把CRect缩小一定的尺寸,缩小的时候以中心为基准

#6


GetSystemMetrics ();用于得到被定义的系统数据或者系统配置信息.


下面是GetSystemMetrics函数参数nIndex的定义:

SM_ARRANGE  返回是否预备最小化.
SM_CLEANBOOT 返回系统启动方式:
   0 正常启动
   1 安全模式启动
   2 网络安全模式启动 
SM_CMOUSEBUTTONS 返回值为系统支持的鼠标键数,返回0,则系统中没有安装鼠标。 
SM_CXBORDER, 
SM_CYBORDER 返回以相素值为单位的Windows窗口边框的宽度和高度,如果Windows的为3D形态,则
等同于SM_CXEDGE参数 
SM_CXCURSOR, 
SM_CYCURSOR 返回以相素值为单位的标准光标的宽度和高度 
SM_CXDLGFRAME,
SM_CYDLGFRAME 等同与SM_CXFIXEDFRAME and SM_CYFIXEDFRAME 
SM_CXDOUBLECLK, 
SM_CYDOUBLECLK 以相素值为单位的双击有效的矩形区域 
SM_CXEDGE,SM_CYEDGE 以相素值为单位的3D边框的宽度和高度 
SM_CXFIXEDFRAME,
SM_CYFIXEDFRAME 围绕具有标题但无法改变尺寸的窗口(通常是一些对话框)的边框的厚度 
SM_CXFRAME,SM_CYFRAME 等同于SM_CXSIZEFRAME and SM_CYSIZEFRAME 
SM_CXFULLSCREEN,
SM_CYFULLSCREEN 全屏幕窗口的窗口区域的宽度和高度 
SM_CXHSCROLL,
SM_CYHSCROLL 水平滚动条的高度和水平滚动条上箭头的宽度 
SM_CXHTHUMB 以相素为单位的水平滚动条上的滑动块宽度 
SM_CXICON,SM_CYICON 系统缺省的图标的高度和宽度(一般为32*32) 
SM_CXICONSPACING,
SM_CYICONSPACING 以大图标方式查看Item时图标之间的间距,这个距离总是大于等于
SM_CXICON and SM_CYICON. 
SM_CXMAXIMIZED,
SM_CYMAXIMIZED 处于顶层的最大化窗口的缺省尺寸 
SM_CXMAXTRACK,
SM_CYMAXTRACK 具有可改变尺寸边框和标题栏的窗口的缺省最大尺寸,如果窗口大于这个
尺寸,窗口是不可移动的。 
SM_CXMENUCHECK,
SM_CYMENUCHECK 以相素为单位计算的菜单选中标记位图的尺寸 
SM_CXMENUSIZE,
SM_CYMENUSIZE 以相素计算的菜单栏按钮的尺寸 
SM_CXMIN,SM_CYMIN 窗口所能达到的最小尺寸 
SM_CXMINIMIZED,
SM_CYMINIMIZED 正常的最小化窗口的尺寸 
SM_CXMINTRACK,
SM_CYMINTRACK 最小跟踪距离,当使用者拖动窗口移动距离小于这个值,窗口不会移动。 
SM_CXSCREEN,
SM_CYSCREEN 以相素为单位计算的屏幕尺寸。 
SM_CXSIZE,SM_CYSIZE 以相素计算的标题栏按钮的尺寸 
SM_CXSIZEFRAME,
SM_CYSIZEFRAME 围绕可改变大小的窗口的边框的厚度 
SM_CXSMICON,
SM_CYSMICON 以相素计算的小图标的尺寸,小图标一般出现在窗口标题栏上。 
M_CXVSCROLL,
SM_CYVSCROLL 以相素计算的垂直滚动条的宽度和垂直滚动条上箭头的高度 
SM_CYCAPTION 以相素计算的普通窗口标题的高度 
SM_CYMENU 以相素计算的单个菜单条的高度 
SM_CYSMCAPTION 以相素计算的窗口小标题栏的高度 
SM_CYVTHUMB 以相素计算的垂直滚动条中滚动块的高度 
SM_DBCSENABLED 如果为TRUE或不为0的值表明系统安装了双字节版本的USER.EXE,为FALSE或0则不是。 
SM_DEBUG 如果为TRUE或不为0的值表明系统安装了debug版本的USER.EXE,为FALSE或0则不是。 
SM_MENUDROPALIGNMENT 如果为TRUE或不为0的值下拉菜单是右对齐的否则是左对齐的。 
SM_MOUSEPRESENT 如果为TRUE或不为0的值则安装了鼠标,否则没有安装。 
SM_MOUSEWHEELPRESENT 如果为TRUE或不为0的值则安装了滚轮鼠标,否则没有安装。(Windows NT only) 
SM_SWAPBUTTON 如果为TRUE或不为0的值则鼠标左右键交换,否则没有。

#1


void   DeflateRect(int   x,int   y);   
  void   DeflateRect(SIZE   size);   
  void   DeflateRect(LPCRECT   lpRect);   
  void   DeflateRect(int   l,int   t,int   b);   
  参数:   
  x   指定要向左或向右移动CRect边的数量   
  y   指定要向上或向下移动CRect边的数量   
  size   指定CRect移动数量的SIZE或CSize。   
            cx   指定移动左右边的数;   
            cy   指定移动上下边的数;   
  lpRect   指向一个指定每边数量的RECT结构或者CRect。   
  说明:   DeflateRect   通过

#2


void   DeflateRect(int   x,int   y);   
  void   DeflateRect(SIZE   size);   
  void   DeflateRect(LPCRECT   lpRect);   
  void   DeflateRect(int   l,int   t,int   b);   
  参数:   
  x   指定要向左或向右移动CRect边的数量   
  y   指定要向上或向下移动CRect边的数量   
  size   指定CRect移动数量的SIZE或CSize。   
            cx   指定移动左右边的数;   
            cy   指定移动上下边的数;   
  lpRect   指向一个指定每边数量的RECT结构或者CRect。   
  说明:   DeflateRect   通过
SM_CXEDGE,SM_CYEDGE 以相素值为单位的3D边框的宽度和高度

#3


DeflateRect   通过朝它的中心移动边以缩小CRect

#4


SM_CXEDGE,SM_CYEDGE:
Dimensions, in pixels, of a 3-D border. These are the 3-D counterparts of SM_CXBORDER and SM_CYBORDER.
3d边框的大小

#5


我同楼主的情况相似,也是在看别人的自绘按钮代码的时候才知道这个函数的,自我感觉意思就是把CRect缩小一定的尺寸,缩小的时候以中心为基准

#6


GetSystemMetrics ();用于得到被定义的系统数据或者系统配置信息.


下面是GetSystemMetrics函数参数nIndex的定义:

SM_ARRANGE  返回是否预备最小化.
SM_CLEANBOOT 返回系统启动方式:
   0 正常启动
   1 安全模式启动
   2 网络安全模式启动 
SM_CMOUSEBUTTONS 返回值为系统支持的鼠标键数,返回0,则系统中没有安装鼠标。 
SM_CXBORDER, 
SM_CYBORDER 返回以相素值为单位的Windows窗口边框的宽度和高度,如果Windows的为3D形态,则
等同于SM_CXEDGE参数 
SM_CXCURSOR, 
SM_CYCURSOR 返回以相素值为单位的标准光标的宽度和高度 
SM_CXDLGFRAME,
SM_CYDLGFRAME 等同与SM_CXFIXEDFRAME and SM_CYFIXEDFRAME 
SM_CXDOUBLECLK, 
SM_CYDOUBLECLK 以相素值为单位的双击有效的矩形区域 
SM_CXEDGE,SM_CYEDGE 以相素值为单位的3D边框的宽度和高度 
SM_CXFIXEDFRAME,
SM_CYFIXEDFRAME 围绕具有标题但无法改变尺寸的窗口(通常是一些对话框)的边框的厚度 
SM_CXFRAME,SM_CYFRAME 等同于SM_CXSIZEFRAME and SM_CYSIZEFRAME 
SM_CXFULLSCREEN,
SM_CYFULLSCREEN 全屏幕窗口的窗口区域的宽度和高度 
SM_CXHSCROLL,
SM_CYHSCROLL 水平滚动条的高度和水平滚动条上箭头的宽度 
SM_CXHTHUMB 以相素为单位的水平滚动条上的滑动块宽度 
SM_CXICON,SM_CYICON 系统缺省的图标的高度和宽度(一般为32*32) 
SM_CXICONSPACING,
SM_CYICONSPACING 以大图标方式查看Item时图标之间的间距,这个距离总是大于等于
SM_CXICON and SM_CYICON. 
SM_CXMAXIMIZED,
SM_CYMAXIMIZED 处于顶层的最大化窗口的缺省尺寸 
SM_CXMAXTRACK,
SM_CYMAXTRACK 具有可改变尺寸边框和标题栏的窗口的缺省最大尺寸,如果窗口大于这个
尺寸,窗口是不可移动的。 
SM_CXMENUCHECK,
SM_CYMENUCHECK 以相素为单位计算的菜单选中标记位图的尺寸 
SM_CXMENUSIZE,
SM_CYMENUSIZE 以相素计算的菜单栏按钮的尺寸 
SM_CXMIN,SM_CYMIN 窗口所能达到的最小尺寸 
SM_CXMINIMIZED,
SM_CYMINIMIZED 正常的最小化窗口的尺寸 
SM_CXMINTRACK,
SM_CYMINTRACK 最小跟踪距离,当使用者拖动窗口移动距离小于这个值,窗口不会移动。 
SM_CXSCREEN,
SM_CYSCREEN 以相素为单位计算的屏幕尺寸。 
SM_CXSIZE,SM_CYSIZE 以相素计算的标题栏按钮的尺寸 
SM_CXSIZEFRAME,
SM_CYSIZEFRAME 围绕可改变大小的窗口的边框的厚度 
SM_CXSMICON,
SM_CYSMICON 以相素计算的小图标的尺寸,小图标一般出现在窗口标题栏上。 
M_CXVSCROLL,
SM_CYVSCROLL 以相素计算的垂直滚动条的宽度和垂直滚动条上箭头的高度 
SM_CYCAPTION 以相素计算的普通窗口标题的高度 
SM_CYMENU 以相素计算的单个菜单条的高度 
SM_CYSMCAPTION 以相素计算的窗口小标题栏的高度 
SM_CYVTHUMB 以相素计算的垂直滚动条中滚动块的高度 
SM_DBCSENABLED 如果为TRUE或不为0的值表明系统安装了双字节版本的USER.EXE,为FALSE或0则不是。 
SM_DEBUG 如果为TRUE或不为0的值表明系统安装了debug版本的USER.EXE,为FALSE或0则不是。 
SM_MENUDROPALIGNMENT 如果为TRUE或不为0的值下拉菜单是右对齐的否则是左对齐的。 
SM_MOUSEPRESENT 如果为TRUE或不为0的值则安装了鼠标,否则没有安装。 
SM_MOUSEWHEELPRESENT 如果为TRUE或不为0的值则安装了滚轮鼠标,否则没有安装。(Windows NT only) 
SM_SWAPBUTTON 如果为TRUE或不为0的值则鼠标左右键交换,否则没有。