当前位置: 首页 > ds >正文

[Win32]画刷、矩形、不规则区域和剪裁

1. 画刷简介:

    1) Windows就是使用画刷来实现抖动色彩技术的(即显示比通常显示器可用颜色更多的色彩的技术),比如实心画刷就是通过建立抖动位图进行填充,因此其颜色并不一定是最接近的纯色,而是更为丰富的色彩;

    2) 画刷其实是一个8×8像素的小位图,即用该位图反复在水平方向和垂直方向使用来填充某一区域;

    3) 5种建立画刷的方式对应着三种画刷:

hBrush = CreateSolidBrush( crColor ); // 利用抖动位图建立实心画刷(不一定是最接近纯色)// 阴影线样式画刷,crColor为阴影线颜色(非抖动技术,最接近纯色),fnStlye指定阴影线的风格
// 阴影线之间的空隙利用空隙背景填充来决定(即SetBk函数)
hBrush = CreateHatchBrush( fnStlye, crColor );// 建立自定义的画刷(要使用位图技术以及资源编译器等),之后会讲
hBrush = CreatePatternBrush( hbmp );
hBrush = CreateDIBPatternBrushPt( lpPackedDIB, iUsage );
以上即三种类型的画刷,前两种是内部已经定义好的,第三种是自定义的,而最后一种建立画刷的方式包含以上所有函数的功能,即先建立逻辑画刷结构LOGBRUSH,再通过CreaeBrushIndirect来建立真正的画刷资源(出现在内存中),最后再使用SelecObject将画刷选入设备环境,首先看一下LOGBRUSH的定义:

typedef struct tagLOGBRUSH { UINT     lbStyle; COLORREF lbColor; LONG     lbHatch; 
} LOGBRUSH, *PLOGBRUSH;

其中第一个字段将决定后两个字段被如何解释:


和上述4个函数的参数一模一样!

    4) 由于画刷也是GDI对象,因此建立的画刷同样需要删除(但是StockObject画刷不能Delete),用DeleteObject来删除;

    5) 获取画刷信息通过GetObject( hBrush, sizeof( LOGBRUSH ), (LPVOID)&logbrush )函数调用即可;


2. 12个操作矩形的神器:

// 以下两个函数无需将画刷选入设备环境而可以直接指定画刷!// 用hBrush填充一个矩形区域(无边框)
FillRect( hdc, &rect, hBrush ); 
// 用hBrush绘制矩形边框(不填充),用画刷而不用画笔的好处就是可以使用抖动色!
FrameRect( hdc, &rect, hBrush ); // 将矩形区域中所有像素点反转(二进制位01反转),即变成相反色(黑变白、白变黑、绿变洋红)
InvertRect( hdc, &rect ); // 设定rect结构的各个字段(可以当成C++的构造函数)
SetRect( &rect, xLeft, yTop, xRight, yBottom );// 将矩形朝x方向或y方向移动
OffsetRect( &rect, x, y ); // x和y表示位移距离,负表示x左移y上移// 增大或减小矩形尺寸
InflateRect( &rect, x, y ); // x和y表示x方向和y方向上的长度该变量,负表示减少// 将RECT各字段设为0
SetRectEmpty( &rect );// 复制矩形结构
CopyRect( &DestRect, &SrcRect );// 矩形求交
IntersectRect( &DestRect, &SrcRect1, &SrcRect2 ); // 求交的结果必然为一矩形// 矩形求并
UnionRect( &DestRect, &SrcRect1, &SrcRect2 ); // 结果是能包含两个Src的最小面积矩形// 判空,即判断各字段是否为空
IsRectEmpty( &
http://www.xdnf.cn/news/11154.html

相关文章:

  • SD卡被写保护怎么解除?
  • 全网最详细的网络安全(白帽黑客)入门教程,282g资源无偿分享
  • mysql bulk update_91.一次性处理多条数据的方法:bulk_create,update,delete
  • 如何更改pcAnywhere的默认端口(zz)
  • linux c可变参数va_start、va_end、va_arg、va_list
  • 使用计算机的便利,allshare play:只要几个步骤立即使用这个非常便利的功能!...
  • adobe dreamweaver cs5序列号
  • Ubuntu 9.04安装教程(傻瓜版)
  • struts2通配符使用
  • 如何在VirtualBox虚拟机中安装XP系统? 转
  • Android签名机制及PMS中校验流程(雷惊风)
  • Cadence Allegro PCB设计88问解析(七) 之 Allegro位号反标OrCAD
  • Java版文本编辑器
  • socks5 运行几个小时后 端口10808不通了,ss5服务正常
  • Spring整合Quartz框架实现定时任务跑批(Maven完整版)
  • 超级详细的GitLab安装 与使用 【Gitlab添加组、创建用户和项目、权限管理】_gitlab群组
  • 探秘GPT:开启人工智能语言模型的新纪元
  • Yandex 邮箱添加
  • 麒麟短线王至尊版 软件及指标 应用!
  • Linux系统下安装部署Linux管理面板1panel
  • Win11系统提示找不到olecli32.dll文件的解决办法
  • web.xml中context-param的配置作用
  • dll和so文件区别与构成
  • 世界环保创业基金会简介
  • LDAP 目录服务器的现代化应用
  • 动态实现RelativeLayout,LinearLayout布局
  • Lenovo笔记本新版Veriface Pro(人像识别)软件介绍
  • InstallShield 12 制作安装包
  • anaconda安装gdal、Fiona、shapely、pyproj、geopandas
  • size mismatch: error 在搭建网络的时候