46.矩操作函数SetRect、FillRect、FrameRect、PtInRect、InvertRect、Offsetrect、SetRectEmpty、IsRectEmpty、Intersect
先把这两个定义给弄清除 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相关推荐
- python查看dataframe数据类型_python pandas中DataFrame类型数据操作函数的方法
python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFrame数 ...
- python科学计算笔记(九)pandas中DataFrame数据操作函数
Python数据分析工具pandas中DataFrame和Series作为主要的数据结构. 本文主要是介绍如何对DataFrame数据进行操作并结合一个实例测试操作函数. 1)查看DataFrame数 ...
- mysql日期时间操作函数详解
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. win7可以设定每周从哪一天开始,win2003等不能方便的修改.有的是周日开始,有的是周一开始.而 ...
- 封装一个信号量集操作函数的工具
信号量的概念参见这里. 与消息队列和共享内存一样,信号量集也有自己的数据结构: struct semid_ds { struct ipc_perm sem_perm; /* Ownership an ...
- python dataframe函数_python pandas中DataFrame类型数据操作函数的方法
这篇文章主要介绍了关于python pandas中DataFrame类型数据操作函数的方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 python数据分析工具pandas中Data ...
- python常用数值处理函数_SciPy基础数据操作函数
2. SciPy基础 SciPy以NumPy为基础,与NumPy一样,SciPy有着稳定,成熟,且应用广泛的数值运算库.方便.易于使用.专为科学和工程设计的python工具包,它包括了统计.优化.整合 ...
- 图解数据分析(13) | Pandas - 核心操作函数大全(数据科学家入门·完结)
作者:韩信子@ShowMeAI 教程地址:https://www.showmeai.tech/tutorials/33 本文地址:https://www.showmeai.tech/article-d ...
- matlab对图像操作函数的详解(笔记1)
matlab对图像操作函数的详解 一. 读写图像文件 1. imread imread函数用于读入各种图像文件,如:a=imread('e:\w01.tif') 注:计算机E盘上要有w01相应的.ti ...
- day3----编码-集合-深浅copy-文件操作-函数初识
day3----编码-集合-深浅copy-文件操作-函数初识 本文档主要内容: 一 编码 二 集合 三 深浅copy 四 文件操作 五 函数初识 首先,我们来看看两个字符串的比较 打开cmd,进入do ...
最新文章
- 20180513模拟赛
- 干货丨从感知机到深度神经网络,带你入坑深度学习
- 写给过去的自己-No.2-数据结构篇-初尝柔性数组
- 奥迪坚SVRM(Screen-Voice Recording Manager)录屏软件正式发布
- Hadoop集群环境下网络架构的设计与优化
- 统计python文件中的代码,注释,空白对应的行数
- 电脑上玩和平精英_和平精英新手怎么玩 和平精英新手攻略
- oracle 11g数据库安装教程
- css更改鼠标指针样式,几种鼠标点击效果
- Lasso-Logistic回归-R语言应用详解
- 全国高等教师资格证考试复习笔记-高等教育学(1)-教育学概述
- 在PHP中如何获取用户的真实IP
- 如何在MATLAB中调用(运行)“用Python写成的函数或脚本”
- Three Character Classic 三字经
- 如何将Myeclipse的一个工作空间的配置文件复制到另一个工作空间
- 中国顶级程序员,从金山WPS走出来,自研了“表格编程”神器
- UG NX 8.5有限元分析入门与实例精讲(PPT、视频、模型)
- Image Segmentation论文学习翻译-SLIC Superpixels Compared to State-of-the-Art Superpixel Methods
- matlab编程入门学习(2)
- 利用 FFmpeg 进行简单的音频拼接 降噪 合成