MFC学习心得【画笔字体类】
来源:互联网 发布:矢量量化算法 编辑:程序博客网 时间:2024/05/12 23:42
在MFC中画笔是CPen类的对象,它用来在DC上完成绘制线条的任务。所谓自定义画笔就越是大家按照自己来创建CPen类对象。在创建了对象之后如果要使用它,则需要调用CDC的成员函数SelectObject()用自定义的画笔替换原有的画笔,该函数的原型为:CPen* SelectObject(CPen *pPen);其参数为想要载入的画笔,返回值为原来画笔的指针。下面是一个绘制多个线条的短代码。
void CMy9222View::OnDraw(CDC* pDC){CMy9222Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereint red=0,green=0,blue=0;int width=2;int row=20;for(int s=0;s<8;s++){int color=RGB(red,green,blue);CPen newPen(PS_SOLID,width,color); //创建一个新画笔。CPen *oldPen=pDC->SelectObject(&newPen);//将自己新定义的画笔载入设备环境中,并返回旧画笔。pDC->MoveTo(20,row);pDC->LineTo(800,row); //绘制线条。pDC->SelectObject(oldPen); //将旧画笔载入设备中。red+=32;blue+=8;green+=16;width+=2;row+=30;}}
下面是设置线条类型的一些代码
void CMy9222View::OnDraw(CDC* pDC){CMy9222Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereint style[]={PS_SOLID,PS_DASH,PS_DOT,PS_DASHDOT,PS_DASHDOTDOT};//定义了一个线条类型数组int row=20;for(int s=0;s<5;s++){CPen newPen(style[s],1,RGB(0,0,0));//定义了一个新画笔CPen *oldPen=pDC->SelectObject(&newPen);//将新画笔载入设备中,并返回旧画笔pDC->MoveTo(20,row);pDC->LineTo(300,row);pDC->SelectObject(oldPen);//将旧画笔载入设备环境中row+=30;}}
这里简单说一些常用线条的类型
PS_SOLID 实线画笔
PS_DASH 虚线画笔
PS_DOT 点线画笔
PS_DASHDOT 点划线画笔
PS_DASHDOTDOT 双点划线画笔
下面是对画刷的介绍。
画刷是CBrush类的对象,是对封闭图形内部用颜色或图案进行填充的工具,在使用画刷前要创建CBrush类对象,其原型为CBrush(COLORREF color)和
CBrush(int style,COLORREF color);其中第二个函数中的style决定画刷的样式,color决定画刷的颜色。
其中一些常见的style这里说一下
HS_BDIAGONAL 以自左下角至右上角的四十五度斜线填充
HS_CROSS 以十字交叉线填充
HS_DIAGCROSS 以互相交叉的四十五度线填充
HS_FDIAGONAL 以自左上角至右下角的四十五度斜线填充
与使用画笔一样,在创建了画刷之后,如果要是用该画刷,则应该使用CDC的成员函数:CBrush* SelectObject(CBrush *pBrush);
下面是代码
void CMy9222View::OnDraw(CDC* pDC){CMy9222Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data hereint red=0,green=0,blue=0;int row=20;for(int s=0;s<6;s++){int clr=RGB(red,green,blue);CBrush newBrush(clr);//创建新画刷CBrush *oldBrush=pDC->SelectObject(&newBrush);//将新画刷填入设备中,并且返回旧画刷pDC->Rectangle(20,row,200,row+20);//画矩形pDC->SelectObject(oldBrush);//将旧画刷填入设备中red+=34;green+=16;blue+=4;row+=30;}int style[]={HS_BDIAGONAL,HS_CROSS,HS_DIAGCROSS,HS_FDIAGONAL,HS_HORIZONTAL,HS_VERTICAL}; //定义了一个填充效果数组row=20;for(s=0;s<6;s++){CBrush newBrush(style[s],RGB(0,0,0));//创建了新的画刷CBrush *oldBrush=pDC->SelectObject(&newBrush);//将新画刷填入设备中,并且返回旧画刷pDC->Rectangle(220,row,400,row+20);//画矩形pDC->SelectObject(oldBrush);//将旧画刷填入设备中row+=30;}}
在windows中,绘图的最终效果可以通过设定不同的绘图模式 来修饰。设置绘图模式的CDC成员函数为SetROP2(int nDrawMode);其中,参数为绘图模式,返回值为原来的绘图模式。常用的绘图模式如下所说:
R2_BLACK 无论画笔的颜色如何,只用黑色绘图
R2_WHITE 无论画笔的颜色如何,只用白色绘图
R2_NOP 无论画笔的颜色如何,只用无色绘图
R2_NOT 用与背景色相反的颜色绘图
R2_NOTCOPYPEN 用与画笔颜色相反的颜色绘图
R2_COPYPEN 用画笔颜色绘图
R2_XORPEN 把画笔色与背景色进行异或(XOR)运算后的颜色绘图
下面说一些关于字体的一些函数,显示文本要用到TextOut(),其原型为BOOL TextOut(int x,int y,const CString &str);
其中,参数x为文本显示在应用程序窗口用户区的水平位置;y为文本的垂直位置;str为要显示的字符串,它是一个CString类的对象。
设置文本的颜色可以使用成员函数SetTextColor()来进行文本颜色的设置,其原型为irtual COLORREF SetTextColor(COLORREF crColor),其中,参数为文本颜色的RGB值,函数返回原来的颜色。COLORREF GetTextColor() const 为获取当前文本颜色的函数。
virtual COLORREF SetBkColor(COLORREF crColor)为设置当前文本的背景色。同样的也有获取当前文本的背景色的函数COLORREF GetBkColor() const;
void CMy9222View::OnDraw(CDC* pDC){CMy9222Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data herepDC->TextOut(30,30,"文本的颜色");pDC->SetTextColor(RGB(255,0,0));pDC->TextOut(130,30,"文本的颜色");pDC->SetTextColor(RGB(255,255,255));pDC->SetBkColor(RGB(0,0,255));pDC->TextOut(230,30,"文本的颜色");}
如果需要改变文本字符之间的间隔时可以使用CDC类的成员函数:int SetTextCharacterExtra(int nCharExtra);该参数是以像素为单位的。另外还有一个获取当前字符间距的函数int GetTextCharacterExtra() const;
void CMy9222View::OnDraw(CDC* pDC){CMy9222Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data herefor(int s=0;s<5;s++){pDC->SetTextCharacterExtra(s*4);pDC->TextOut(20,20+s*20,"文本字符的间距");}}
另外还有一些函数可以用来设置文本的对齐方式,如 UINT SetTextAlign(UINT nFlags);
一些常用的参数值如TA_LEFT为左对齐
TA_CENTER为中间对齐
TA_RIGHT为右对齐
TA_TOP为顶部对齐
TA_BOTTOM为底部对齐
TA_BASELINE为以基线对齐
void CMy9222View::OnDraw(CDC* pDC){CMy9222Doc* pDoc = GetDocument();ASSERT_VALID(pDoc);// TODO: add draw code for native data herepDC->SetTextAlign(TA_LEFT); //左对齐pDC->TextOut(220,20,"AAAAAAAAA");pDC->TextOut(220,40,"HHHHH");pDC->TextOut(220,60,"SSSSSSSSSSSSSSSSSSS");pDC->SetTextAlign(TA_CENTER); //中间对齐pDC->TextOut(220,80,"AAAAAAAAA");pDC->TextOut(220,100,"HHHHH");pDC->TextOut(220,120,"SSSSSSSSSSSSSSSSSSSSSS");pDC->SetTextAlign(TA_RIGHT); //右对齐pDC->TextOut(220,140,"AAAAAAAAAAAAA");pDC->TextOut(220,160,"HHHHH");pDC->TextOut(220,180,"SSSSSSSSSSSSSSSSS");}
- MFC学习心得【画笔字体类】
- MFC画笔CPen类
- MFC画笔
- MFC简单创建画笔
- [MFC]CPen画笔类、CBrush画刷类使用介绍
- MFC 学习心得
- 详解MFC画笔的使用
- MFC之改变画笔颜色
- win32开发(画笔、刷子、字体)
- MFC 字体
- MFC字体
- MFC基本图形的绘制(一)设备环境类CDC、画笔和画刷
- [MFC]CPen画笔类、CBrush画刷类、背景颜色和背景模式
- c++ MFC 画笔画一个圆形
- VS2010 + MFC 学习心得
- MFC学习心得第一篇
- MFC 控件学习心得:
- mfc学习心得一
- 解决MySQL"is marked as crashed and should be repaired"问题
- 2015美团笔试题目
- 动态加载USB Audio Device
- Http协议中 get和post的区别
- 5分钟了解Mockito
- MFC学习心得【画笔字体类】
- Android 音频系统
- linux 打印当前所在目录,并展示当前内目录列表
- sort--uva10474
- 复杂数据类型
- php 安装memcached扩展
- Leetcode_num7_Linked List Cycle
- UVa 10881 - Piotr's Ants
- 搜索引擎:solr--搭建和分析中文分词器。上