All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
定义标题的最好方法_[Html教程]
用php自带函数去除html标签_php资料_编程技术
实现在页面中单击按钮关闭页面_[Asp.Net教程]
PHP和MySQL基础教程(四)_[PHP教程]
轻松掌握Ajax.net系列教程十五:使用AutoCompleteExtender_[Asp.Net教程]
解决WIN2003安装sqlserver2000失败_[SQL Server教程]
ASP.NET从零起步设计网站全过程(2)_[Asp.Net教程]
ASP.NET,2.0移动开发入门之基础_[Asp.Net教程]
div+css布局技术漫谈_[Html教程]
在.NET2.0中使用自定义事务操作_[Asp.Net教程]
Reading number is top 10 pictures
美丽的少女1
陪睡门马睿菈自曝写真 称首拍大尺度照片1
The goddess of the single reason1
Look for from human art net, is good--2
清醇靓丽的美眉
The real super beauty7
清纯性感的美眉2
2012 national geographic daily picture3
徐若瑄展示美丽胸围1
心有鱼而力不足
Download software ranking
Tram sex maniac 2 (H) rar bag1
ASP.NET.2.0.XML.高级编程(第3版)
Photoshop 8.0图象编辑软件
Boxer vs Yellow4
Tram sex maniac 2 (H) rar bag9
Unix video tutorial14
Tram sex maniac 2 (H) rar bag15
Red cliff
WebService在.NET中的实战应用教学视频 → 第1集
VeryCD电驴(EasyMule) V1.1.9 Build09081
qq published in(发表于) 2014/7/9 22:40:14 Edit(编辑)
visual c++中的画笔类CPen使用实例

visual c++中的画笔类CPen使用实例

visual c++中的画笔类CPen使用实例

画笔类CPen

画笔是一种基本的GDI对象,在绘图之前,一般要为所绘制的图形选择定制的笔。MFC提供的一种名为CPen的包装类,使得使用画笔非常简单。

画笔由CPen类管理,使用CPen类对象时,需用对CPen类对象进行初始化。初始化CPen类的方法有3种:第1种是调用CPen()的构造函数;第2种是通过CPen::CreatePen()函数创建;第3种是通过CPen::CreatePenIndirect()函数,并通过LPLOGPEN结构来设置CPen的属性。

1.CPen的构造函数

CPen类的构造函数有3种形式,具体如下:

① CPen( );

② CPen( int nPenStyle, int nWidth, COLORREF crColor );

throw( CResourceException );

③ CPen( int nPenStyle, int nWidth, const LOGBRUSH* pLogBrush, int nStyleCount = 0,

const DWORD* lpStyle = NULL );

throw( CResourceException );

参数说明:

nPenStyle:线型,具体取值如表1所示。



表1 nPenStyle取值说明

n_Width:线宽,对于第②种构造函数,如果取值为0,则线宽永远为1个像素宽,与显示模式无关。对于第③种构造函数,如果线型为PS_GEOMETRIC,则线宽以逻辑单位度量;如果线型为PS_COSMETIC,线宽必须为1。

crColor:画线颜色。

polgBrush:为LOGBRUSH结构指针,如果nPenStyle为PS_COSMETIC,则LOGGBRUSH的lbColor成员变量设定画笔颜色,而LOGBRUSH的lbStyle成员变量必须是PS_SOLID。如果nPenStyle为PS_GEOMETRIC,所有的成员变量都必须用于指定画笔的画刷属性。

nStyles:指定线型类型的树目,即lpStyle数组的元素数目,只对PS_USERSTYLE类型的线型有效。对于其他线型,该项必须是0。

lpStyle:一个双字节(DWORD)的数组,数组的第1个元素设定第1个笔画的长度,第2个元素设定第一个间隔的长度,当笔画属性不是PS_USERSTYLE时,该项必须为0。

2.使用CreatePen()创建画笔

使用CPen::CreatePen()函数来创建画笔的方法与使用CPen类的构造函数创建画笔的方法类似,这里不再重复。

3.使用CreatePenIndirect()创建画笔

CreatePenIndirect()成员函数通过LPLOGPEN结构来生成CPen类对象,LPLOGPEN结构的定义如下所示:

typedef struct tagLOGPEN {

UINT lopnStyle;

POINT lopnWidth;

COLORREF lopnColor;

} LOGPEN;

其中,lopnStyle设定线型,lopnWidth设定线宽,lopnColor设定画线颜色。

4.CPen演示实例

(1)创建一个基于对话框的应用程序PenDemo。

(2)打开PenDemoDlg.cpp文件,找到CPenDemoDlg::OnDraw函数,修改这个函数的内容,如下所示:

void CCPenDlg::OnPaint()

{

CPaintDC dc(this);

//绘制白色背景

CRect rect;

this->GetClientRect(&rect);

CBrush brush;

brush.CreateSolidBrush(RGB(255,255,255));

dc.FillRect(&rect,&brush);

brush.DeleteObject();

//画线

CPen * pOldPen; //记录原始画笔

const int nLeft=30;

CPen LinePen;

long PenStyle[8]={PS_SOLID,PS_DASH,PS_DOT,PS_DASHDOT,PS_DASHDOTDOT,

PS_SOLID,PS_SOLID,PS_SOLID}; //线的类型

CString

PenStyleName[8]={"SOLID","DASH","DOT","DASHDOT","DASHDOTDOT","Width=10",

"Width=20","Width=30"}; //显示的提示文本

int nsize[8]={1,1,1,1,1,10,20,30}; //线的宽度

for(int i=0;i<8;i++)

{

dc.TextOut(nLeft,(i+1)*30,PenStyleName[i]); //绘制提示文本

LinePen.CreatePen(PenStyle[i],nsize[i],RGB(255,0,0)); //建立CPen对象

if(i==0)

pOldPen=dc.SelectObject(&LinePen); //记录原画笔

else

dc.SelectObject(&LinePen);

dc.MoveTo(140,(i+1)*30+10);

dc.LineTo(340,(i+1)*30+10); //画线

LinePen.DeleteObject(); //释放CPen类对象所占的存储空间

}

dc.SelectObject(pOldPen); //恢复原来的画笔

}

(3)运行结果如图1所示。



图1 CPen类使用实例




添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.