先把这两个定义给弄清除 INT_PTR CALLBACK

typedef __int64 INT_PTR, *PINT_PTR;
#define CALLBACK    __stdcall

FillRect 填充矩形区域

WINUSERAPI
int
WINAPI
FillRect(__in HDC hDC,__in CONST RECT *lprc, //要填充的矩形区域__in HBRUSH hbr //画笔,这里的画笔可以不用选入DC直接填充,);

SetRect设置矩形区域的范围,可以直接用左上和右下四个点设置矩形区域的范围

WINUSERAPI
BOOL
WINAPI
SetRect(__out LPRECT lprc, //要设置的对象__in int xLeft,__in int yTop,__in int xRight,__in int yBottom);

FrameRect 指定的画刷为指定的矩形画边框。边框的宽和高总是一个逻辑单元。

WINUSERAPI
int
WINAPI
FrameRect(__in HDC hDC,__in CONST RECT *lprc,__in HBRUSH hbr);

InvertRect 对矩形区域内的颜色进行取反操作 (函数通过对矩形内部的像素点进行逻辑NOT操作而将窗口中的矩形反转。)

WINUSERAPI
BOOL
WINAPI
InvertRect(__in HDC hDC,__in CONST RECT *lprc);

OffsetRect 对矩形区域进行偏移,偏移distancex和distancey长度

WINUSERAPI
BOOL
WINAPI
OffsetRect(__inout LPRECT lprc,__in int dx,__in int dy);

SetRectEmpty 将矩形lpRect设为一个空矩形
IsRectEmpty 矩形区域是否为空

WINUSERAPI
BOOL
WINAPI
SetRectEmpty(__out LPRECT lprc);WINUSERAPI
BOOL
WINAPI
SetRectEmpty(__out LPRECT lprc);

InflateRect函数增大或减小指定矩形的宽和高。InflateRect函数在矩形的左和右增加dx,在矩形的上下增加dy。 dx和dy参数是有符号值。正数增加宽和高,负数减小。

WINUSERAPI
BOOL
WINAPI
InflateRect(__inout LPRECT lprc,__in int dx,__in int dy);

GetClientRect、GetWindowRect 获得窗体的矩形区域
长为rect.right,高为rect.bottom

WINUSERAPI
BOOL
WINAPI
GetClientRect(__in HWND hWnd,__out LPRECT lpRect);WINUSERAPI
BOOL
WINAPI
GetWindowRect(__in HWND hWnd,__out LPRECT lpRect);

IntersectRect获得两个矩形的相交区域
UnionRect获得两个矩形合并区域

//相交两个矩形区域
WINUSERAPI
BOOL
WINAPI
IntersectRect(__out LPRECT lprcDst,__in CONST RECT *lprcSrc1,__in CONST RECT *lprcSrc2);
//合并两个矩形区域
WINUSERAPI
BOOL
WINAPI
UnionRect(__out LPRECT lprcDst,__in CONST RECT *lprcSrc1,__in CONST RECT *lprcSrc2);

PtInRect点是否在矩形区域内

WINUSERAPI
BOOL
WINAPI
PtInRect(__in CONST RECT *lprc,__in POINT pt);

在这里编程的时候,学习到一个小技巧
DlgMainProc消息处理函数的最后一个参数,LPARAM lParam是传递了鼠标的指针
POINT pt;
pt.x = LOWORD(lParam);获得鼠标的x点
pt.y = HIWORD(lParam);获得鼠标的y点

下面是我写的代码

#include <Windows.h>
#include "resource.h"INT_PTR CALLBACK DlgMainProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{BOOL bRet = true;HDC hdc;PAINTSTRUCT ps;static int ix = 10;static int iy = 10;HBRUSH hBrush;TCHAR szBuffer[256];DWORD isEmpty;RECT rect;RECT rect_dest1,rect_dest2;RECT rect_src1,rect_src2;int wmId,b;POINT pt;switch(uMsg){case WM_COMMAND:wmId = LOWORD(wParam);b = HIWORD(wParam);switch(wmId){case IDC_BUTTON1:isEmpty = IsRectEmpty(&rect);wsprintf(szBuffer,TEXT("SetRectEmpty:\nx = %d \ny = %d \nIsRectEmpty:%d\n"),rect.left,rect.top,isEmpty);MessageBox(hWnd,szBuffer,TEXT("test"),MB_OK);break;case IDC_BUTTON2:EndDialog(hWnd,0);break;default:return DefWindowProc(hWnd,uMsg,wParam,lParam);}break;case WM_CLOSE:EndDialog(hWnd,0);break;case WM_PAINT:hdc = BeginPaint(hWnd,&ps);SetRect(&rect,ix,iy,ix+100,iy+100);FillRect(hdc,&rect,(HBRUSH)GetStockObject(GRAY_BRUSH ));SetRect(&rect,ix*2+100,iy,ix*2+200,iy+100);FrameRect(hdc,&rect,(HBRUSH)GetStockObject(BLACK_BRUSH));SetRect(&rect,ix*3+200,iy,ix*3+300,iy+100);hBrush = CreateSolidBrush(RGB(0,255,255));SelectObject(hdc,(HBRUSH)hBrush);Rectangle(hdc,rect.left,rect.top,rect.right,rect.bottom);InvertRect(hdc,&rect);OffsetRect(&rect,50,50);//SetRect(&rect,ix*3+250,iy,ix*3+350,iy+100);InvertRect(hdc,&rect);OffsetRect(&rect,100,100);OffsetRect(&rect,-320,10);InflateRect(&rect,50,50);FrameRect(hdc,&rect,(HBRUSH)GetStockObject(LTGRAY_BRUSH));//SetRectEmpty(&rect);isEmpty = IsRectEmpty(&rect);wsprintf(szBuffer,TEXT("SetRectEmpty:\nx = %d \ny = %d \nIsRectEmpty:%d\n"),rect.left,rect.top,isEmpty);//MessageBox(NULL,szBuffer,TEXT("test"),MB_OK);GetClientRect(hWnd,&rect);SetRect(&rect_src1,rect.right-200,rect.bottom-200,rect.right-10,rect.bottom-10);SetRect(&rect_src2,rect.right-300,rect.bottom-300,rect.right-110,rect.bottom-110);IntersectRect(&rect_dest1,&rect_src1,&rect_src2);UnionRect(&rect_dest2,&rect_src1,&rect_src2);FillRect(hdc,&rect_src1,(HBRUSH)GetStockObject(BLACK_BRUSH));FillRect(hdc,&rect_src2,(HBRUSH)GetStockObject(WHITE_BRUSH));FillRect(hdc,&rect_dest1,(HBRUSH)GetStockObject(DKGRAY_BRUSH));FrameRect(hdc,&rect_dest2,(HBRUSH)GetStockObject(DKGRAY_BRUSH));EndPaint(hWnd,&ps);break;case WM_LBUTTONDOWN:break;case WM_MOUSEMOVE:GetClientRect(hWnd,&rect);rect.left = rect.right-200;rect.top = rect.bottom-200;pt.x = LOWORD(lParam);pt.y = HIWORD(lParam);if(PtInRect(&rect,pt)){MessageBox(hWnd,TEXT("鼠标移动到选择区域了"),TEXT("测试"),MB_OK);}break;default:bRet = false;break;}return bRet;}int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR szCmdLine,int nCmdLine)
{DialogBox(hInstance,MAKEINTRESOURCE(IDD_DIALOG1),NULL,DlgMainProc);return 0;
}

46.矩操作函数SetRect、FillRect、FrameRect、PtInRect、InvertRect、Offsetrect、SetRectEmpty、IsRectEmpty、Intersect相关推荐

  1. python查看dataframe数据类型_python pandas中DataFrame类型数据操作函数的方法

    python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFrame数 ...

  2. python科学计算笔记(九)pandas中DataFrame数据操作函数

    Python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFrame数 ...

  3. mysql日期时间操作函数详解

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. win7可以设定每周从哪一天开始,win2003等不能方便的修改.有的是周日开始,有的是周一开始.而 ...

  4. 封装一个信号量集操作函数的工具

    信号量的概念参见这里. 与消息队列和共享内存一样,信号量集也有自己的数据结构: struct semid_ds { struct ipc_perm sem_perm;  /* Ownership an ...

  5. python dataframe函数_python pandas中DataFrame类型数据操作函数的方法

    这篇文章主要介绍了关于python pandas中DataFrame类型数据操作函数的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 python数据分析工具pandas中Data ...

  6. python常用数值处理函数_SciPy基础数据操作函数

    2. SciPy基础 SciPy以NumPy为基础,与NumPy一样,SciPy有着稳定,成熟,且应用广泛的数值运算库.方便.易于使用.专为科学和工程设计的python工具包,它包括了统计.优化.整合 ...

  7. 图解数据分析(13) | Pandas - 核心操作函数大全(数据科学家入门·完结)

    作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/33 本文地址:https://www.showmeai.tech/article-d ...

  8. matlab对图像操作函数的详解(笔记1)

    matlab对图像操作函数的详解 一. 读写图像文件 1. imread imread函数用于读入各种图像文件,如:a=imread('e:\w01.tif') 注:计算机E盘上要有w01相应的.ti ...

  9. day3----编码-集合-深浅copy-文件操作-函数初识

    day3----编码-集合-深浅copy-文件操作-函数初识 本文档主要内容: 一 编码 二 集合 三 深浅copy 四 文件操作 五 函数初识 首先,我们来看看两个字符串的比较 打开cmd,进入do ...

最新文章

  1. 20180513模拟赛
  2. 干货丨从感知机到深度神经网络,带你入坑深度学习
  3. 写给过去的自己-No.2-数据结构篇-初尝柔性数组
  4. 奥迪坚SVRM(Screen-Voice Recording Manager)录屏软件正式发布
  5. Hadoop集群环境下网络架构的设计与优化
  6. 统计python文件中的代码,注释,空白对应的行数
  7. 电脑上玩和平精英_和平精英新手怎么玩 和平精英新手攻略
  8. oracle 11g数据库安装教程
  9. css更改鼠标指针样式,几种鼠标点击效果
  10. Lasso-Logistic回归-R语言应用详解
  11. 全国高等教师资格证考试复习笔记-高等教育学(1)-教育学概述
  12. 在PHP中如何获取用户的真实IP
  13. 如何在MATLAB中调用(运行)“用Python写成的函数或脚本”
  14. Three Character Classic 三字经
  15. 如何将Myeclipse的一个工作空间的配置文件复制到另一个工作空间
  16. 中国顶级程序员,从金山WPS走出来,自研了“表格编程”神器
  17. UG NX 8.5有限元分析入门与实例精讲(PPT、视频、模型)
  18. Image Segmentation论文学习翻译-SLIC Superpixels Compared to State-of-the-Art Superpixel Methods
  19. matlab编程入门学习(2)
  20. 利用 FFmpeg 进行简单的音频拼接 降噪 合成

热门文章

  1. arduino无源蜂鸣器歌曲编码_基于Arduino使用低电平触发无源蜂鸣器模块
  2. 北京四季度平均月薪1.3万,算法类岗位最吸金
  3. 我当DeFi农民的一个月:浅谈Balancer流动性挖矿的风险与潜在收益
  4. MongoDB删除数据后释放磁盘空间
  5. OData与SAP Annotation
  6. 基于JavaWeb的汽车销售管理系统设计与实现 项目源码及数据库文件+论文
  7. 汽车销售管理系统源代码
  8. 【一文读懂】如何用编码器测速
  9. linux下PHP安装gd库
  10. 基于小波神经网络的交通流预测