矩形和区域

简介: 下面有三个绘图函数需要一个指向矩形结构的指针: FillRect(hdc,&rect,hbursh);//填充 FrameRect(hdc,&rect,hbrush);//掏空 InvertRect(hdc,&rect);//内部取反 [cpp] view plaincopy ...

下面有三个绘图函数需要一个指向矩形结构的指针:

FillRect(hdc,&rect,hbursh);//填充

FrameRect(hdc,&rect,hbrush);//掏空

InvertRect(hdc,&rect);//内部取反

[cpp]   view plain copy
  1. case WM_PAINT:  
  2.             hdc=BeginPaint(hwnd,&ps);  
  3.             //GetClientRect(hwnd,&rect);  
  4.               
  5.             //hrgn=CreateRectRgn(100,100,300,300);  
  6.             //hbrush=CreateSolidBrush(RGB(255,0,0));  
  7.             //FillRgn(hdc,hrgn,hbrush);  
  8.             //InvertRgn(hdc,hrgn);//取反  
  9.             //FrameRgn(hdc,hrgn,hbrush,0,0);  
  10.   
  11.               
  12.             r1.left=100;  
  13.             r1.top=100;  
  14.             r1.right=200;  
  15.             r1.bottom=200;  
  16.             hbrush=CreateSolidBrush(RGB(255,0,0));//创建画刷  
  17.             FillRect(hdc,&r1,hbrush);  
  18.   
  19.             r2.left=200;  
  20.             r2.top=100;  
  21.             r2.right=300;  
  22.             r2.bottom=200;  
  23.             FrameRect(hdc,&r2,hbrush);  
  24.   
  25.             r3.left=300;  
  26.             r3.top=100;  
  27.             r3.right=400;  
  28.             r3.bottom=200;  
  29.             InvertRect(hdc,&r3);  
  30.   
  31.             EndPaint(hwnd,&ps);  
  32.             return 0;  

下面还有八个关于矩形的操作:

OffsetRect(&rect,x,y) 将矩形移动
InflateRect(&rect,x,y) 增大缩小矩形的尺寸
SetRectEmpty(&rect) 把矩形结构各字段设置为0
CopyRect(&DestRect,&ScrRect) 将一个矩形结构复制到另一个矩形结构
IntersectRect(&destRect,&SrcRect1,&SrcRect2) 获取两个矩形的交集
UnionRect(&DestRect,&SrcRect1,&SrcRect2) 获取两个矩形的并集
bEmpty=IsRectEmpty(&Rect) 判断矩形是否为空
bInRect=PtInRect(&rect,point) 判断点是否在矩形内部

 

区域跟矩形一样,有以下四个绘图函数

[cpp]   view plain copy
  1. FillRgn(hdc,hrgn,hbrush);  
  2. FrameRgn(hdc,hbrush,xFrame,yFrame);  
  3. InvertRgn(hdc,hrgn);  
  4. PaintRgn(hdc,hrgn);  
[cpp]   view plain copy
  1. DeleteObject(hrgn);  
[cpp]   view plain copy
  1. SelectObject(hdc,hrgn)=SelectClipRgn(hdc,hrgn);  

使得矩形,区域有效和无效的函数

[cpp]   view plain copy
  1. InvalidateRect       ValidateRect  
  2. InvalidateRgn        ValidateRgn  

下面是简单的例子:

[cpp]   view plain copy
  1. case WM_PAINT:  
  2.             hdc=BeginPaint(hwnd,&ps);  
  3.             //GetClientRect(hwnd,&rect);  
  4.               
  5.             //hrgn=CreateRectRgn(100,100,300,300);  
  6.             //hbrush=CreateSolidBrush(RGB(255,0,0));  
  7.             //FillRgn(hdc,hrgn,hbrush);  
  8.             //InvertRgn(hdc,hrgn);//取反  
  9.             //FrameRgn(hdc,hrgn,hbrush,0,0);  
  10.   
  11.               
  12.             r1.left=100;  
  13.             r1.top=100;  
  14.             r1.right=200;  
  15.             r1.bottom=200;  
  16.             hbrush=CreateSolidBrush(RGB(255,0,0));//创建画刷  
  17.             //FillRect(hdc,&r1,hbrush);  
  18.   
  19.             r2.left=150;  
  20.             r2.top=100;  
  21.             r2.right=250;  
  22.             r2.bottom=200;  
  23.             //FrameRect(hdc,&r2,hbrush);  
  24.   
  25.             IntersectRect(&r3,&r1,&r2);//r1,r2矩形取交集,存放在r3  
  26.             FillRect(hdc,&r3,hbrush);  
  27.             flag=(int)IsRectEmpty(&r3);//判断矩形是否为空  
  28.             TextOut(hdc,300,300,szBuffer,wsprintf(szBuffer,TEXT("%d"),flag));  
  29.   
  30.             EndPaint(hwnd,&ps);  
  31.             return 0;  


[cpp]   view plain copy
  1. hrgn=CreateRectRgn(xleft,ytop,xright,ybottom);  
  2. hrgn=CreateRectRgnIndirect(&rect);  
  3. hrgn=CreateEllipticRgn(xleft,ytop,xright,ybottom);  
  4. hrgn=CreatePolygonRgn(&point,icount,ipolyFillMode);  
目录
相关文章
|
移动开发 JavaScript 小程序
uniapp中间加号点击弹窗怎么实现?完整教程
uniapp中间加号点击弹窗怎么实现?完整教程
1001 1
uniapp中间加号点击弹窗怎么实现?完整教程
|
消息中间件 Kafka 网络安全
kafka SSL证书生成及配置
apache kafka可以使用SSL加密连接,还可以限制客户端访问, 给客户端发行证书,只允许持有证书的客户端访问。 下面使用jdk的keytool工具来生成证书,配置kafka。
5540 0
|
人工智能 自然语言处理 Java
使用通义灵码插件提高开发效率
【2月更文挑战第2天】 通义灵码是阿里云开发的一个编码助手,基于AI大模型,提供代码智能生成,智能问答等功能,旨在加快编码,提高开发效率。
1897 3
使用通义灵码插件提高开发效率
|
10月前
|
人工智能 运维 双11
2024阿里云双十一云资源购买指南(纯客观,无广)
2024年双十一,阿里云推出多项重磅优惠,特别针对新迁入云的企业和初创公司提供丰厚补贴。其中,36元一年的轻量应用服务器、1.95元/小时的16核60GB A10卡以及1元购域名等产品尤为值得关注。这些产品不仅价格亲民,还提供了丰富的功能和服务,非常适合个人开发者、学生及中小企业快速上手和部署应用。
|
11月前
|
供应链 网络协议 数据安全/隐私保护
|
机器人 测试技术 Python
作为测试人员,RobotFramework框架真的是必须掌握的吗?
本文探讨了Robot Framework(RF)作为自动化测试框架的重要性,指出虽然RF具有易用性和灵活性,但并非测试人员必须掌握的工具,因为存在许多可替代的自动化测试解决方案。
246 0
作为测试人员,RobotFramework框架真的是必须掌握的吗?
|
JavaScript
Vue学习之--------Vue中自定义插件(2022/8/1)
这篇文章介绍了Vue中自定义插件的基本概念和实际应用,包括插件的定义、在`main.js`中使用`Vue.use()`引入插件,并通过代码实例展示了如何创建包含全局过滤器、指令和混入的插件,以及如何在Vue组件中使用这些自定义功能。同时,文章还解释了什么是mixin(混入)以及它的使用方式。
Vue学习之--------Vue中自定义插件(2022/8/1)
|
前端开发 JavaScript
Uncaught (in promise) Error: Request failed with status code 500
Uncaught (in promise) Error: Request failed with status code 500
725 0
|
数据可视化 机器人
使用RPA轻松实现淘宝评价自动回复
八爪鱼RPA是一款经验丰富的自动化流程处理软件,它可以模拟人在电脑上的操作,按照预设的规则自动执行任务。对于淘宝评价自动回复的场景,可以帮助卖家自动获取评价信息,并根据预设的关键词进行智能化回复。
|
网络协议 Linux 数据安全/隐私保护
Cloudreve离线下载Aria2安装教程
Aria2 是 轻量级 多协议多源命令行 下载实用程序 。Aria2下载教程非常多,一些跨了一两年的,版本已经更新了几代,部分操作已经失效。
870 0
Cloudreve离线下载Aria2安装教程