画笔与画刷&GDI坐标系

原文链接:http://blog.sina.com.cn/s/blog_50eb38e00100amoh.html

                    http://blog.sina.com.cn/s/blog_50eb38e00100amoi.html

在窗口客户区输出要使用画笔、画刷和字体。

1.画笔是用来画线的工具,是CPen类的对象。

其使用方法为:

CPaintDCdc(this);    // 声明设备环境对象

CPen penRed;// 声明画笔对象

penRed.CreatePen(PS_SOLID, 3, RGB(255, 0, 0)); //创建红色画笔

CPen*pOldPen; // 声明画笔指针

pOldPen =dc.SelectObject(&pOldPen); //使用新画笔,保存旧画笔

dc.Rectangle(0,0,100,100); // 作图

dc.SelectObject(pOldPen); // 恢复旧画笔

其中:

BOOL CreatePen (intnPenStyle, int nWidth, COLORREF crColor);

第1个参数是画笔样式,可取

PS_SOLID 创建实线笔

PS_DASH创建由短线构成的虚线

PS_DOT 创建由点构成的虚线

PS_DASHDOT创建由短线和点构成的虚线

PS_DASH_DOTDOT创建由短线、点、点构成的虚线

PS_NULL 创建空(空白)画笔

要注意恢复原来的缺省画笔或库存画笔。

2.画刷是用来填充图形的工具,是CBrush类的对象。

BOOL CreateSolidBrush ( COLORREF crColor );

BOOL CreateHatchBrush ( int nIndex, COLORREFcrColor );

其中参数nIndex指定了阴影风格,可取值为:

HS_BDIAGONAL 从左下角到右上角的45度斜线

HS_CROSS 水平线与垂直线

HS_DIAGCROSS 相互垂直的45度线

HS_FDIAGONAL 从左上角到右下角的45度斜线

HS_HORIZONTAL 水平线

HS_VERTICAL 垂直线

3. CDC类的SelectObject()函数

CPen* SelectObject( CPen* pPen );

CBrush* SelectObject( CBrush* pBrush );

virtual CFont* SelectObject( CFont* pFont );

       SelectObject()是重载的CDC类成员函数。SelectObject( )将一个GDI对象选入到设备环境中,新选中的对象将替换原有的同类型对象,然后返回指向被替换的对象的指针。

 

绘画模式

在Windows中,绘图的最终效果不但取决于画笔和画刷的设置,还可以通过设定绘图模式来修正。屏幕绘图模式可通过CDC的成员函数SetROP2( )设定,该函数的返回值为原来的绘图模式,其原型为:

int SetROP2 ( intnDrawMode );

参数nDrawMode为选定的绘图模式,常用模式有:

R2_BLACK     无论画笔色如何,只用黑色绘图;

R2_WHITE     无论画笔色如何,只用白色绘图;

R2_NOP       无论画笔色如何,用无色笔绘图;

R2_NOT       用与背景色相反的颜色绘图;

R2_NOTCOPYPEN 用与画笔色相反的颜色绘图;

R2_COPYPEN    用画笔色绘图;

R2_XORPEN    对画笔色和背景色作异或(XOR)运算。

缺省绘画模式为R2_COPYPEN 。



GDI支持两种类型的坐标系,即逻辑坐标系和设备坐标系。

1.逻辑坐标系:

映射模式    逻辑单位     x递增方向    y递增方向

MM_TEXT       像素        向右        向下

MM_LOMETRIC    0.1mm      向右        向上

MM_HIMETRIC    0.01mm      向右        向上

MM_LOENGLISH   0.01inch    向右        向上

MM_HIENGLISH   0.001inch   向右        向上

MM_TWIPS       1/1440inch  向右        向上

MM_ISOTROPIC   可调整(x=y) 可选择      可选择

MM_ANISOTROPIC  可调整(x!=y)可选择      可选择

注意:

   所有映射模式的坐标原点均在设备输出区域(如窗口客户区或打印纸上的打印区域)的左上角。

   设置映射模式,可使用CDC类的SetMapMode()成员函数,其原型为

    virtualint SetMapMode ( int nMapMode );

其中参数nMapMode为欲设置的映射模式,返回值为原来的映射模式。

2.设备坐标系:

以像素点为单位,且x轴坐标值向右递增,y轴坐标值向下延伸。鼠标使用设备坐标系。

设备坐标系与逻辑坐标系之间使用CDC类的如下成员函数进行转换:

void LPtoDP ( LPPOINT lpPoints, int nCount = 1 ) const;

void LPtoDP ( LPRECT lpRect ) const;

void DPtoLP ( LPPOINT lpPoints, int nCount = 1 ) const;

void DPtoLP ( LPRECT lpRect ) const;

3.坐标系统

。客户区坐标系统

。屏幕坐标系统

以上两种坐标系统之间可以通过MFC全局函数进行转换:

void ScreenToClient ( LPPOINT lpPoint ) const;

void ScreenToClient ( LPRECT lpRect ) const;

void ClientToScreen ( LPPOINT lpPoint ) const;

void ClientToScreen ( LPRECT lpRect ) const;

。窗口坐标系统


猜你喜欢

转载自blog.csdn.net/Hdnrnfgf/article/details/21075695