




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WIN32 API(第六章)绘图和字体Windows绘图 1 绘图相关绘图设备 DC(Device Context),HDC - DC句柄,表示绘图设备GDI - Windows graphics device interface(绘图编程 GDI编程)Win32提供的绘图API 2 颜色 颜色的表示 计算机使用红、绿、蓝,R - 0255一个字节就可以保存255G - 0255B - 0255 每一个点颜色是3个字节24位保存 0-(224 1)种颜色16位:5,5,632位:8,8,8, 8绘图或透明度前三字节保存三种底色,第四字节是透明度 颜色的使用COLORREF - 实际DWORD= unsign long,32位 例如:COLORREF nColor = 0;赋值使用RGB宏,例如:nColor = RGB( 255, 0, 0 );宏RGB的返回值就是COLORREF型获取RGB值,GetRValue/GetGValue/GetBValue例如:BYTE nRed = GetRValue( nColor );BYTE(unsign char (0255) 点的使用GetPixel 获取指定点的颜色COLORREF GetPixel(HDC hdc, / handle to DCint nXPos, / x-coordinate of pixelint nYPos / y-coordinate of pixel);SetPixel 设置指定点的颜色COLORREF SetPixel(HDC hdc,/DC句柄int X,/X坐标int Y,/Y坐标COLORREF crColor /设置的颜色); 返回点原来的颜色 线的使用(直线、圆形、弧线)MoveToEx - 移动 当前点 到 指定点并将指定点作为窗口的当前点BOOL MoveToEx( HDC hdc, / handle to device context int X, / x-coordinate of new current position int Y, / y-coordinate of new current position LPPOINT lpPoint / old current position旧位置);默认当前点左上角(0,0)LineTo - 从当前点(MoveToEx所指定的点)到指定点绘制一条直线 并将指定点作为窗口当前点LineTo也能够移动当前点BOOL LineTo( HDC hdc, / device context handle int nXEnd, / x-coordinate of ending point int nYEnd / y-coordinate of ending point);当前点:上一次绘图时的最后一点,初始为(0,0)点。两个函数都能够指定当前点的位置绘制弧线ArcBOOL Arc( HDC hdc, / handle to device contextDC句柄 int nLeftRect, / x-coord of rectangles upper-left corner int nTopRect, / y-coord of rectangles upper-left corner int nRightRect, / x-coord of rectangles lower-right corner int nBottomRect, / y-coord of rectangles lower-right corner确定矩形左上,右下两点的坐标 int nXStartArc, / x-coord of first radial ending point int nYStartArc, / y-coord of first radial ending point起点的坐标 int nXEndArc, / x-coord of second radial ending point int nYEndArc / y-coord of second radial ending point终点的坐标);起点和终点确定弧 起点和终点都和圆心连线,从起点到终点按逆时针取弧 默认逆时针SetArcDirection 取弧规则int SetArcDirection( HDC hdc, / handle to device context int ArcDirection / new arc direction);第二个参数的值AD_COUNTERCLOCKWISE 默认方式(逆时针)AD_CLOCKWISE顺时针扇形 Pi(r)e 封闭图形(能够用画刷填充的图形叫做封闭图形)Rectangle(矩形)BOOL Rectangle( HDC hdc, / handle to DC int nLeftRect, / x-coord of upper-left corner of rectangle int nTopRect, / y-coord of upper-left corner of rectangle int nRightRect, / x-coord of lower-right corner of rectangle int nBottomRect / y-coord of lower-right corner of rectangle);RoundRect(绘制圆角矩形)BOOL RoundRect( HDC hdc, / handle to DC int nLeftRect, / x-coord of upper-left corner of rectangle int nTopRect, / y-coord of upper-left corner of rectangle int nRightRect, / x-coord of lower-right corner of rectangle int nBottomRect, / y-coord of lower-right corner of rectangle前四个参数可以确定个直角矩形 int nWidth, / width of ellipse int nHeight / height of ellipse弧度的宽度和弧度的高度(用这两个参数来切割四个角));Ellipse (圆)GDI绘图对象 1. GDI绘图对象-画笔 画笔的作用线的颜色、线型、线粗。HPEN - 画笔句柄 画笔的使用1 创建画笔HPEN CreatePen(int fnPenStyle, /画笔的样式int nWidth, /画笔的粗细COLORREF crColor /画笔的颜色);创建成功返回句柄PS_SOILD - 实心线,可以支持多个像素宽其他(PS_DASH)线型只能是一个像素宽。2 将画笔应用到DC中HGDIOBJ SelectObject(HDC hdc,/绘图设备句柄HGDIOBJ hgdiobj /GDI绘图对象句柄,画笔句柄);返回原来的GDI绘图对象句柄注意保存原来DC当中画笔(要接收返回值)HGDIOBJ句柄(兼容画笔,画刷句柄)。3 绘图4 取出DC中的画笔将原来的画笔,使用SelectObject函数,放入到设备DC中,就会将我们创建的画笔取出。5 释放画笔BOOL DeleteObject(HGDIOBJ hObject /GDI绘图对象句柄,画笔句柄);只能删除不被DC使用的画笔,所以在释放前,必须将画笔从DC中取出。2. GDI绘图对象-画刷 画刷相关画刷 - 封闭图形的填充的颜色、图案HBRUSH - 画刷句柄 画刷的使用1 创建画刷CreateSolidBrush - 创建实心画刷(填充单一颜色)HBRUSH CreateSolidBrush(COLORREF crColor / brush color value);CreateHatchBrush - 创建填充(阴影)画刷(填充的是很多阴影线)HBRUSH CreateHatchBrush( int fnStyle, / hatch style COLORREF clrref / foreground color );填充类型各种水平的垂直的交叉的都有HS_CROSS水平垂直CreatePatternBrush 创建位图画刷HBRUSH CreatePatternBrush( HBITMAP hbmp / handle to bitmap);直接画的是位图,传的是位图句柄2 将画刷应用到DC中SelectObject3 绘图4 将画刷从DC中取出SelectObject5 删除画刷DeleteObject 其他可以使用 GetStockObject 函数获取系统维护的画刷、画笔等。HGDIOBJ GetStockObject(int fnObject / stock object type);参数是各种系统维护的画刷,画笔如果不使用画刷填充,需要使用NULL_BRUSH参数,获取不填充的画刷。GetStockObject返回的画刷不需要DeleteObjectGDI绘图对象- 位图DAY08 :AM 位图相关光栅图形 - 记录图像中每一点的颜色等信息。矢量图形 - 记录图像算法、绘图指令等。HBITMAP - 位图句柄 位图的使用 图片的绘制笔一般绘图要麻烦些1 在资源中添加位图资源2 从资源中加载位图LoadBitmapHBITMAP LoadBitmap( HINSTANCE hInstance, / handle to application instance LPCTSTR lpBitmapName / name of bitmap resource);3 创建一个与当前DC相匹配的DC(内存DC)在内存中画图HDC CreateCompatibleDC(HDC hdc /当前DC句柄(和内存中相匹配的DC),可以为NULL(使用屏幕DC)); 返回创建好的DC句柄4 将位图放入匹配的DC(内存DC)中 SelectObject5 绘制位图(成像)BOOL BitBlt(HDC hdcDest, /目的DCint nXDest, / 目的左上X坐标屏幕上的int nYDest, / 目的左上Y坐标int nWidth, / 目的宽度int nHeight, / 目的高度HDC hdcSrc, /源DC(内存中)int nXSrc, / 源左上X坐标虚拟区域(资源图中)的哪个坐标点开始成像int nYSrc, / 源左上Y坐标虚拟区域(资源图中)的哪个坐标点开始成像DWORD dwRop /绘制方法(定图片成像规则 ));真正的画图时在内存DC上画的,然后通过第五步,在屏幕上成像 缩放绘制BOOL StretchBlt(HDC hdcDest, / handle to destination DCint nXOriginDest, / x-coord of destination upper-left cornerint nYOriginDest, / y-coord of destination upper-left cornerint nWidthDest, / width of destination rectangleint nHeightDest, / height of destination rectangleHDC hdcSrc, / handle to source DCint nXOriginSrc, / x-coord of source upper-left cornerint nYOriginSrc, / y-coord of source upper-left cornerint nWidthSrc, / 源DC宽int nHeightSrc, / 源DC高DWORD dwRop / raster operation code); 6 取出位图SelectObject(获取图片的宽和高) 7 释放位图DeleteObject 8 释放匹配的DCDeleteDC 其他使用 GetObject 获取位图信息。坐标系 坐标系分类设备坐标系以像素为单位,以设备左上角为原点,X右为正,Y下为正的坐标系。1 屏幕坐标系 - 以当前屏幕左上角为原点坐标系。2 窗口坐标系 - 以窗口左上角为原点坐标系。3 客户区坐标系 - 以窗口的客户区左上角为原点的坐标系。逻辑坐标系在GDI绘图中,都是使用逻辑坐标绘图。逻辑坐标系可以设置坐标系单位。 坐标系映射映射模式逻辑坐标系和设备坐标系单位之间映射关系。设备坐标系的单位是由设备决定,大小固定。逻辑坐标系的单位,可以通过程序设置,int SetMapMode(HDC hdc, /DC句柄int fnMapMode /映射模式); 返回旧的映射模式fnMapMode 映射模式如下:MM_TEXT - 默认模式,1个逻辑单位对应1设备单位。X右为正,Y下为正MM_LOENGLISH - 1个逻辑单位 = 0.01英寸。X右为正,Y上为正MM_HIENGLISH - 1个逻辑单位 = 0.001英寸。X右为正,Y上为正MM_LOMETRIC - 1个逻辑单位 = 0.1毫米。X右为正,Y上为正MM_HIMETRIC - 1个逻辑单位 = 0.01毫米。X右为正,Y上为正MM_TWIPS - 1个逻辑单位 = 1/1440英寸,打印机使用单位。MM_ISOTROPIC - 1个逻辑单位 = 自定义。X和Y正方向也可以自定义MM_ANISOTROPIC - X的1个逻辑单位 = 自定义1Y的1个逻辑单位 = 自定义2X和Y正方向也可以自定义DPToLP 设备到逻辑 / LPToDP 逻辑到设备MM_ISOTROPIC / MM_ANISOTROPIC模式通过函数设置逻辑单位与设备单位的对应关系设备单位BOOL SetViewportExtEx(HDC hdc, /DC句柄int nXExtent, /设备单位的X比例int nYExtent, /设备单位的Y比例LPSIZE lpSize /旧比例);逻辑单位BOOL SetWindowExtEx(HDC hdc, /DC句柄int nXExtent, /逻辑单位的X比例int nYExtent, /逻辑单位的Y比例LPSIZE lpSize /旧比例); 文字的绘制TextOut - 将文字绘制在指定坐标位置。int DrawText( HDC hDC, /DC句柄 LPCTSTR lpString, /字符串 int nCount, /字符数量 LPRECT lpRect, /绘制文字的矩形框 UINT uFormat /绘制的方式); 文字的绘制BOOL ExtTextOut(一般用在字符创比较少的地方,且考虑较美观 HDC hdc, /DC句柄 int X, /输出X位置
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年三沙事业单位真题
- 2025江苏泰州市泰兴市医疗卫生事业单位招聘43人考前自测高频考点模拟试题及参考答案详解1套
- 2025年节能、高效果蔬保鲜装置项目建议书
- 2025北京市规划和自然资源委员会事业单位招聘工作人员55人模拟试卷及一套完整答案详解
- 2025甘肃省卫生健康委系统招聘51人考前自测高频考点模拟试题及答案详解(必刷)
- 2025广东韶关市乐昌市人民政府办公室招聘1人模拟试卷及答案详解(历年真题)
- 2025年滁州南谯城市投资控股集团有限公司招聘10人考前自测高频考点模拟试题带答案详解
- 2025年驱肠虫药项目发展计划
- 土地使用证转让协议
- 2025贵州安顺市平坝区人力资源和社会保障局招聘公益性岗位人员1人考前自测高频考点模拟试题及完整答案详解1套
- 风机叶片吊装安全培训课件
- 2025年安徽萧县县直事业单位招聘115人笔试备考题库附答案详解
- 风险分级管控和隐患排查治理体系培训考试试题(附答案)
- 2025年保安员考试经典例题附完整答案详解(典优)
- 网络安全宣传周网络安全知识竞答考试题及答案
- 新能源电厂培训课件
- 司法局社区矫正工作汇报
- 生物安全培训上岗证课件
- 蜜蜂科普知识教学课件
- 新质生产力区域经济发展
- 质量信得过班组知识培训课件
评论
0/150
提交评论