栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++游戏梦 | EasyX详解 | ④:EasyX函数-图形样式

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++游戏梦 | EasyX详解 | ④:EasyX函数-图形样式


<<<上一篇—③:EasyX函数-颜色模型

系列文章

①:安装及基本概念
②:EasyX函数-设备相关
③:EasyX函数-颜色模型
④:EasyX函数-图形样式


文章目录
  • 系列文章
  • 前言
  • 五、图像对象 - IMAGE

  • 六、填充样式对象 - FILLSTYLE

  • 七、画线样式对象 - LINESTYLE

  • 八、EasyX函数 之 图形样式

    • Ⅰ.背景
      • ⅰ.背景颜色

        • α.设置背景颜色 - setbkcolor()

        • β.获取背景颜色 - getbkcolor()

      • ⅱ.背景模式

        • α.设置背景模式 - setbkmode()

        • β.获取背景模式 - getbkmode()

    • Ⅱ.绘图模式
      • ⅰ.填充颜色
        • α.设置填充颜色 - setfillcolor()

        • β.获取填充颜色 - getfillcolor()

      • ⅱ.填充样式
        • α.设置填充样式 - setfillstyle()

        • β.获取填充样式 - getfillstyle()

      • ⅲ.画线颜色

        • α.设置画线颜色 - setlinecolor()

        • β.获取画线颜色 - getlinecolor()

      • ⅳ.画线样式

        • α.设置画线样式 - setlinestyle()

        • β.获取画线样式 - getlinestyle()

      • ⅴ.多边形样式

        • α.设置多边形填充样式 - setpolyfillmode()

        • β.获取多边形样式 - getpolyfillmode()

      • ⅵ.二元光栅

        • α.获取二元光栅操作模式 - getrop2()

        • β.设置二元光栅操作模式 - setrop2()

  • 结语


前言

作者也是个小白,本【教程】充其量算个学习笔记,若有写的不正确的地方还请指教。

五、图像对象 - IMAGE

  • 类定义:
    class IMAGE(int _width = 0, int _height = 0);
    
  • 类原型:
    //IMAGE在easyx.h中的定义
    class IMAGE
    {
    public:
    	int getwidth() const;	// 获取对象的宽度
    	int getheight() const;	// 获取对象的高度
    
    private:
    	...
    public:
    	IMAGE(int _width = 0, int _height = 0);			// 创建图像
    	IMAGE(const IMAGE &img);						// 拷贝构造函数
    	IMAGE& operator = (const IMAGE &img);			// 赋值运算符重载函数
    	virtual ~IMAGE();
    	virtual void Resize(int _width, int _height);	// 调整尺寸
    };
    
  • 公有成员:
    • i n t   g e t w i d t h ( ) ; intspace getwidth(); int getwidth(); - 获取 IMAGE 对象的宽度,以像素为单位:
    public : int IMAGE::getwidth() const
    
    • i n t   g e t h e i g h t ( ) ; intspace getheight(); int getheight(); - 获取 IMAGE 对象的高度,以像素为单位:
    public : int IMAGE::getheight() const
    
    • o p e r a t o r = operator= operator= :重载运算符=,实现IMAGE赋值。该操作仅拷贝源图像的内容,不拷贝源图像的绘图窗口:
    public : IMAGE & IMAGE::operator=(const IMAGE img)
    
六、填充样式对象 - FILLSTYLE

  • 类定义:

    class FILLSTYLE();
    
  • 类原型:

    //FILLSTYLE在easyx.h中的定义
    class FILLSTYLE
    {
    public:
    	FILLSTYLE();
    	FILLSTYLE(const FILLSTYLE &style);
    	FILLSTYLE& operator = (const FILLSTYLE &style);			// 赋值运算符重载函数
    	virtual ~FILLSTYLE();
    
    	int			style;			// 填充形式
    	long		hatch;			// 填充图案样式
    	IMAGE*		ppattern;		// 填充图像
    };
    
  • 公有成员:

    • int s t y l e style style - 填充形式。
    • long h a t c h hatch hatch - 填充图案样式。仅当 s t y l e style style=BS_HATCHED时有效。
    • IMAGE* p p a t t e r n ppattern ppattern - 填充图像或图案。仅当 s t y l e style style=BS_PATTERN或BS_DIBPATTERN时有效。
  • 说明:

    s t y l e style style可以是以下宏(值):

    含义
    BS_SOLID0固实填充。
    BS_NULL1不填充。
    BS_HATCHED2图案填充(见 h a t c h hatch hatch)。
    BS_PATTERN3自定义图案填充(见 p p a t t e r n ppattern ppattern)。
    BS_DIBPATTERN5自定义图像填充(见 p p a t t e r n ppattern ppattern)。

    h a t c h hatch hatch可以是以下宏(值):

    含义
    HS_HORIZONTAL0
    HS_VERTICAL1
    HS_FDIAGONAL2
    HS_BDIAGONAL3
    HS_CROSS4
    HS_DIAGCROSS5

    p p a t t e r n ppattern ppattern:

    • 当 s t y l e style style=BS_PATTERN时, p p a t t e r n ppattern ppattern指向的IMAGE为填充图案,其中BLACK对于背景,非BLACK对于图案。
    • 当 s t y l e style style=BS_DIBPATTERN时, p p a t t e r n ppattern ppattern指向的IMAGE为填充图像,以其为填充单元填充。

    使用方法见下 setfillstyle()


七、画线样式对象 - LINESTYLE

  • 类定义:

    class LINESTYLE();
    
  • 类原型:

    //LINESTYLE在easyx.h中的定义
    class LINESTYLE
    {
    public:
    	LINESTYLE();
    	LINESTYLE(const LINESTYLE &style);
    	LINESTYLE& operator = (const LINESTYLE &style);			// 赋值运算符重载函数
    	virtual ~LINESTYLE();
    
    	DWORD	style;
    	DWORD	thickness;
    	DWORD	*puserstyle;
    	DWORD	userstylecount;
    };
    
  • 公有成员:

    • DWORD   s t y l e space style  style - 画线样式。
    • DWORD   t h i c k n e s s space thickness  thickness - 线宽,以像素为单位。
    • DWORD* p u s e r s t y l e puserstyle puserstyle - 自定义样式数组,仅当 s t y l e style style为PS_USERSTYLE时有效。
    • DWORD u s e r s t y l e c o u n t userstylecount userstylecount - 自定义数组个数,仅当 s t y l e style style=PS_USERSTYLE时有效。
  • 说明:

    s t y l e style style,指定了画线样式,该样式由 **直线样式** 、 **端点样式** 、**连接样式** 三类组成。可以是其中一类或多类的组合。同一类型中只能指定一个样式。

    直线样式 可为:

    含义
    PS_SOLID线形为实线:—
    PS_DASH线形为:------------
    PS_DOT线形为:············
    PS_DASHDOT线形为:-·-·-·-·-·-·
    PS_DASHDOTDOT线形为:-··-··-··-··
    PS_NULL线形为不可见。
    PS_USERSTYLE线形样式为用户自定义,见 p u s e r s t y l e puserstyle puserstyle参数

    宏 PS_STYLE_MASK 是直线样式的掩码,可以通过该宏从画线样式中分离出直线样式。

    _端点样式_可为:

    含义
    PS_ENDCAP_ROUND端点为圆形。
    PS_ENDCAP_SQUARE端点为方形。
    PS_ENDCAP_FLAT端点为平坦。

    宏 PS_ENDCAP_MASK 是端点样式的掩码,可以通过该宏从画线样式中分离出端点样式。

    _连接样式_可为:

    含义
    PS_JOIN_BEVEL连接处为斜面。
    PS_JOIN_MITER连接处为斜接。
    PS_JOIN_ROUND连接处为圆弧。

    宏 PS_JOIN_MASK 是连接样式的掩码,可以通过该宏从画线样式中分离出连接样式。

    掩码宏表示对应样式组所占用的所有位。例如,对于一个已经混合了多种样式的 style 变量,如果想仅从其中将直线样式改为点划线,只需:

    style = (style & ~PS_STYLE_MASK) | PS_DASHDOT;
    ,,,,...};
    



  • 实例

    DWORD a[5]={5,4,1,9,7};
    LINESTYLE s;
    s.style=PS_USERSTYLE;
    s.thickness=1;
    s.puserstyle=a;
    s.userstylecount=5;
    setlinestyle(s);//总之就是设置样式
    /* 这段代码会是线段样式为:
     * 粗细为1,
     * 画5(像素)留空 4 ,再画 1 空 9 ,再画 7 ,(重复)画 5 ...
     * /
    
  • 注:DWORD即unsigned long:

    typedef unsigned long DWORD;
    




八、EasyX函数 之 图形样式

  • Ⅰ.背景
    • ⅰ.背景颜色

      α.设置背景颜色 - setbkcolor()

      作用:设置设备背景色。

      函数原型:

      void setbkcolor(COLORREF color);
      

      参数:

      • COLORREF c o l o r color color:设置的背景色。(COLORREF见①,EasyX中的颜色,即unsigned long:
      typedef unsigned long DWORD;
      typedef DWORD COLORREF;
      


      返回值: /
      注:setbkcolor()后不会改变背景色,只有在下一次执行绘图指令时才会改变,因此,使用cleardevice()【用背景色清空设备】在设置背景色后。


      β.获取背景颜色 - getbkcolor()

      作用:获取当前设备背景色。

      函数原型:

      COLORREF getbkcolor();
      

      参数: /

      返回值:当前设备背景色。



    • ⅱ.背景模式

      α.设置背景模式 - setbkmode()

      作用:设置当前设备图案填充和文字输出时的背景模式。

      函数原型:

      void setbkmode(int mode);
      

      参数:

      • int m o d e mode mode :指定图案填充和文字输出时的背景模式,可以是以下值:
        描述
        OPAQUE背景用当前背景色填充(默认)。即使用特定填充颜色作为所绘物体背景。
        TRANSPARENT背景是透明的。即还是原来背景。

      返回值: /



      β.获取背景模式 - getbkmode()

      作用:获取当前设备图案填充和文字输出时的背景模式。

      函数原型:

      int getbkmode();
      

      参数: /

      返回值: int,如果函数执行成功,返回值表示当前设备背景混合模式,值为 OPAQUE 或 TRANSPARENT。如果函数执行失败,返回值为 0。



  • Ⅱ.绘图模式
    • ⅰ.填充颜色 α.设置填充颜色 - setfillcolor()

      作用:设置当前设备填充颜色。

      函数原型:

      void setfillcolor(COLORREF color);
      

      参数:

      • COLORREF c o l o r color color:填充颜色。

      返回值: /

      实例:设置背景色为蓝色:

      setfillcolor(BLUE);
      



      β.获取填充颜色 - getfillcolor()

      作用:获取当前设备填充颜色。

      函数原型:

      COLORREF getfillcolor();
      

      参数: /

      返回值: COLORREF,当前设备填充颜色。



    • ⅱ.填充样式 α.设置填充样式 - setfillstyle()

      作用:设置当前设备填充样式。

      函数原型:

      void setfillstyle(
      	FILLSTYLE* pstyle
      );
      
      void setfillstyle(
      	int style,
      	long hatch = NULL,
      	IMAGE* ppattern = NULL
      );
      
      void setfillstyle(
      	BYTE* ppattern8x8
      );
      

      参数:

      • FILLSTYLE* p s t y l e pstyle pstyle:指向填充样式的指针(见 <六>)
      • { i n t   s t y l e l o n g   h a t c h I M A G E ∗   p p a t t e r n begin{cases} intspace style\ longspace hatch\ {rm{IMAGE*}}space ppattern end{cases} ⎩⎪⎨⎪⎧​int stylelong hatchIMAGE∗ ppattern​相当于将一个pstyle拆开写了,作用一致。
      • BYTE* p p a t t e r n 8 x 8 ppattern8x8 ppattern8x8:指定自定义填充图案,效果同 BS_PATTERN,该重载以 BYTE[8] 数组定义 8 x 8 区域的填充图案。数组中,每个元素表示一行的样式,BYTE 类型有 8 位,按位从高到低表示从左到右每个点的状态,由此组成 8 x 8 的填充单元,将填充单元平铺实现填充。对应的二进制位为 0 表示背景区域,为 1 表示图案区域。

      返回值: /



      β.获取填充样式 - getfillstyle()

      作用:获取当前设备填充样式。

      函数原型:

      void getfillstyle(
      	FILLSTYLE* pstyle
      );
      

      参数:

      • FILLSTYLE* p s t y l e pstyle pstyle:返回填充样式

      返回值: /



    • ⅲ.画线颜色

      α.设置画线颜色 - setlinecolor()

      作用:设置当前设备画线颜色。

      函数原型:

      void setlinecolor(COLORREF color);
      

      参数:

      • COLORREF c o l o r color color:要设置的画线颜色。

      返回值: /



      β.获取画线颜色 - getlinecolor()

      作用:获取当前设备画线颜色。

      函数原型:

      COLORREF getlinecolor();
      

      参数: /

      返回值: COLORREF,当前设备画线颜色。



    • ⅳ.画线样式

      α.设置画线样式 - setlinestyle()

      作用:设置当前设备画线样式。

      函数原型:

      void setlinestyle(
      	const LINESTYLE* pstyle
      );
      
      void setlinestyle(
      	int style,
      	int thickness = 1,
      	const DWORD *puserstyle = NULL,
      	DWORD userstylecount = 0
      );
      

      参数:

      • const LINESTYLE* p s t y l e pstyle pstyle:指向画线样式的指针(见<七>)
      • { i n t   s t y l e i n t   t h i c k n e s s c o n s t   D W O R D ∗   p u s e r s t y l e D W O R D   u s e r s t y l e c o u n t begin{cases} intspace style\ intspace thickness\ constspace{rm{DWORD*}}space puserstyle\ {rm DWORD}space userstylecount end{cases} ⎩⎪⎪⎪⎨⎪⎪⎪⎧​int styleint thicknessconst DWORD∗ puserstyleDWORD userstylecount​相当于将LINESTYLE分开写。(见<七>)

      返回值: /



      β.获取画线样式 - getlinestyle()

      作用:获取当前设备画线样式。

      函数原型:

      void getlinestyle(
      	LINESTYLE* pstyle
      );
      

      参数:

      • LINESTYLE* p s t y l e pstyle pstyle:指针,返回当前画线样式。

      返回值: /



    • ⅴ.多边形样式

      α.设置多边形填充样式 - setpolyfillmode()

      作用:设置当前设备多边形填充模式。

      函数原型:

      void setpolyfillmode(int mode);
      

      参数:

      • int m o d e mode mode:多边形填充样式,可为:

        A L T E R N A T E ALTERNATE ALTERNATE 交替填充模式(默认值)。在该模式中,对于每条水平扫描线,从左向右逐像素扫描,当遇到多边形的奇数条边时,开始填充;当遇到偶数条边时,停止填充。例如五角星,五条边多次相交,采用 ALTERNATE 模式填充时,中心的五边形不被填充。

        W I N D I N G WINDING WINDING 根据绘图方向填充的模式。在该模式中,对于每条水平扫描线,从左向右逐像素扫描,当遇到多边形的奇数条边时,开始填充;当遇到偶数条边时,需要进一步根据穿过该扫描线的边的方向判断:如果从上向下穿越扫描线的边数和从下向上穿越扫描线的边数不同,则开始填充,边数相同,则停止填充。例如五角星,五条边多次相交,采用 WINDING 模式填充时,中心的五边形会被填充。

      返回值: /

      :该设置影响 fillpolygon、solidpolygon、clearpolygon 三个绘制多边形函数的执行效果。


      β.获取多边形样式 - getpolyfillmode()

      作用:获取当前设备多边形填充模式。

      函数原型:

      int getpolyfillmode();
      

      参数:/


      返回值: int,如果函数执行成功,返回值表示当前设备多边形填充模式,值为 ALTERNATE 或 WINDING.如果函数执行失败,返回值为 0。



    • ⅵ.二元光栅

      α.获取二元光栅操作模式 - getrop2()

      作用:获取当前设备二元光栅操作模式。

      函数原型:

      int getrop2();
      

      参数:/


      返回值: int,当前设备二元光栅操作码,详见 setrop2 函数。



      β.设置二元光栅操作模式 - setrop2()

      作用:设置当前设备二元光栅操作模式。

      函数原型:

      void setrop2(int mode);
      

      返回值: /

      参数:
      int m o d e mode mode:二元光栅操作码。该函数支持全部的 16 种二元光栅操作码,如下:1 , 2

    描述
    R2_BLACK绘制出的像素颜色 = 黑色
    R2_COPYPEN绘制出的像素颜色 = 当前颜色(默认)
    R2_MASKNOTPEN绘制出的像素颜色 = 屏幕颜色 & ( ! 当前颜色)
    R2_MASKPEN绘制出的像素颜色 = 屏幕颜色 & 当前颜色
    R2_MASKPENNOT绘制出的像素颜色 = ( ! 屏幕颜色) & 当前颜色
    R2_MERGENOTPEN绘制出的像素颜色 = 屏幕颜色 | ( ! 当前颜色)
    R2_MERGEPEN绘制出的像素颜色 = 屏幕颜色 | 当前颜色
    R2_MERGEPENNOT绘制出的像素颜色 = ( ! 屏幕颜色) | 当前颜色
    R2_NOP绘制出的像素颜色 = 屏幕颜色
    R2_NOT绘制出的像素颜色 = ! 屏幕颜色
    R2_NOTCOPYPEN绘制出的像素颜色 = ! 当前颜色
    R2_NOTMASKPEN绘制出的像素颜色 = ! (屏幕颜色 & 当前颜色)
    R2_NOTMERGEPEN绘制出的像素颜色 = ! (屏幕颜色 | 当前颜色)
    R2_NOTXORPEN绘制出的像素颜色 = ! (屏幕颜色 ^ 当前颜色)
    R2_WHITE绘制出的像素颜色 = 白色
    R2_XORPEN绘制出的像素颜色 = 屏幕颜色 ^ 当前颜色

结语

精力、时间有限,先写到这,下期见!





@HaohaoCppDebuger|寻兰 
2021/11/4 

-----THE END-----
THANK YOU !














  1. 注:
    1 . [ & ]表示与,[ | ]表示或,[ ! ]表示非,[ ^ ]表示异或

    2 . [ 背景颜色 ] 指绘制时经过的像素点的颜色
    3 . [ 当前颜色 ] 指将绘制的颜色(setfillcolor(),setlinecolor(),setpolyfillcolor()) ↩︎

  2. 注:该函数设置的二元光栅操作码仅影响线条和填充(包括 IMAGE 填充)的输出,不影响文字和 IMAGE 的输出。 ↩︎

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/433554.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号