原文链接: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 );
绘画模式
在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)可选择 可选择
注意:
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;
。窗口坐标系统