友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

C语言实例教程(PDF格式)-第63部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!

dc。MoveTo(330; 240);  



dc。LineTo(180; 220);  



dc。SelectObject(&pen2);  



CPoint pts''={CPoint(330; 160); CPoint(180; 220); CPoint(330; 240)};  



BYTE typs''={PT_BEZIERTO; PT_BEZIERTO; PT_BEZIERTO|PT_CLOSEFIGURE};  



dc。MoveTo(180; 140);  



dc。PolyDraw(pts; typs; 3);  



dc。TextOut(180; 245; 〃PolyDraw〃);  



}  



// 使用 Polygon 输出多边形  



{  



dc。SelectObject(&pen1);  



dc。Rectangle(350; 140; 500; 240);  



dc。Ellipse(375; 140; 475; 240);  



dc。SelectObject(&pen2);  



CPoint pts1'5';  



for (int i=0; iCreate(NULL; 〃刷子示例〃);  



// 显示应用程序主窗口并刷新其客户区  



pWnd…》ShowWindow(SW_SHOW);  



pWnd…》UpdateWindow();  



// 在主窗口关闭时终止应用程序的执行线程  


…………………………………………………………Page 545……………………………………………………………

m_pMainWnd=pWnd;  



return TRUE;  



}  



// 声明唯一的应用程序对象  



CMyApp MyApp;  



// 应用程序主窗口的消息映射  



BEGIN_MESSAGE_MAP(CMyWnd; CWnd)  



ON_WM_PAINT()  



END_MESSAGE_MAP()  



// 应用程序主窗口的重绘函数  



void CMyWnd::OnPaint()  



{  



// 获得窗口的客户区设备上下文句柄  



CPaintDC dc(this);  



// 更改设备上下文所使用的当前字体,使之更适合于文本输出  



LOGFONT lf;  



dc。GetCurrentFont()…》GetLogFont(&lf);  



lf。lfHeight=…12;  



lf。lfWidth=0;  



strcpy(lf。lfFaceName; 〃宋体〃);  



CFont font; *pOldFont;  



font。CreateFontIndirect(&lf);  



pOldFont=dc。SelectObject(&font);  



// 创建一个原色刷子  



{  



CBrush br; *pOldBrush;  


…………………………………………………………Page 546……………………………………………………………

br。CreateSolidBrush(RGB(128; 0; 128));  



pOldBrush=dc。SelectObject(&br);  



dc。Rectangle(10; 10; 160; 110);  



dc。SelectObject(pOldBrush);  



br。DeleteObject();  



dc。TextOut(10; 115; 〃原色刷子〃);  



}  



// 创建一个具有样式 HS_BDIAGONAL 的刷子  



{  



CBrush br; *pOldBrush;  



br。CreateHatchBrush(HS_BDIAGONAL; RGB(128; 0; 128));  



pOldBrush=dc。SelectObject(&br);  



dc。Rectangle(180; 10; 330; 110);  



dc。SelectObject(pOldBrush);  



br。DeleteObject();  



dc。TextOut(180; 115; 〃HS_BDIAGONAL〃);  



}  



// 创建一个具有样式 HS_CROSS 的刷子  



{  



CBrush br; *pOldBrush;  



br。CreateHatchBrush(HS_CROSS; RGB(128; 0; 128));  



pOldBrush=dc。SelectObject(&br);  



dc。Rectangle(350; 10; 500; 110);  



dc。SelectObject(pOldBrush);  



br。DeleteObject();  



dc。TextOut(350; 115; 〃HS_CROSS〃);  


…………………………………………………………Page 547……………………………………………………………

}  



// 创建一个具有样式 HS_DIAGCROSS 的刷子  



{  



CBrush br; *pOldBrush;  



br。CreateHatchBrush(HS_DIAGCROSS; RGB(128; 0; 128));  



pOldBrush=dc。SelectObject(&br);  



dc。Rectangle(520; 10; 670; 110);  



dc。SelectObject(pOldBrush);  



br。DeleteObject();  



dc。TextOut(520; 115; 〃HS_DIAGCROSS〃);  



}  



// 创建一个具有样式 HS_FDIAGONAL 的刷子  



{  



CBrush br; *pOldBrush;  



br。CreateHatchBrush(HS_FDIAGONAL; RGB(128; 0; 128));  



pOldBrush=dc。SelectObject(&br);  



dc。Rectangle(10; 140; 160; 240);  



dc。SelectObject(pOldBrush);  



br。DeleteObject();  



dc。TextOut(10; 245; 〃HS_FDIAGONAL〃);  



}  



// 创建一个具有样式 HS_VERTICAL 的刷子  



{  



CBrush br; *pOldBrush;  



br。CreateHatchBrush(HS_VERTICAL; RGB(128; 0; 128));  



pOldBrush=dc。SelectObject(&br);  


…………………………………………………………Page 548……………………………………………………………

dc。Rectangle(180; 140; 330; 240);  



dc。SelectObject(pOldBrush);  



br。DeleteObject();  



dc。TextOut(180; 245; 〃HS_VERTICAL〃);  



}  



// 创建一个使用位图图案的刷子  



{  



CBitmap bitmap;  



bitmap。LoadBitmap(IDB_BRUSH1);  



CBrush br; *pOldBrush;  



br。CreatePatternBrush(&bitmap);  



pOldBrush=dc。SelectObject(&br);  



dc。Rectangle(350; 140; 500; 240);  



dc。SelectObject(pOldBrush);  



br。DeleteObject();  



dc。TextOut(350; 245; 〃使用位图图案创建的刷子之一〃);  



}  



{  



CBitmap bitmap;  



bitmap。LoadBitmap(IDB_BRUSH2);  



CBrush br; *pOldBrush;  



br。CreatePatternBrush(&bitmap);  



pOldBrush=dc。SelectObject(&br);  



dc。Rectangle(520; 140; 670; 240);  



dc。SelectObject(pOldBrush);  



br。DeleteObject();  


…………………………………………………………Page 549……………………………………………………………

dc。TextOut(520; 245; 〃使用位图图案创建的刷子之二〃);  



}  



// 恢复设备上下文原有的 GDI 绘图对象  



dc。SelectObject(pOldFont);  



}  



                                                    



                 图9。 6 示例程序BrushDemo的运行结果  



以前几节讲述的方法编译并链接上面的应用程序,运行结果如图9。6 

所示。  



                     第四节 字体对象  



MFC类CFont封装了Windows图形设备接口中的字体对象。字体对象决 

定的设备上下文中进行文本输出的字符样式。在使用字体对象的时 

候,我们一般先创建一个CFont对象,然后调用CreateFont、 

CreateFontIndirect、CreatePointFont及CreatePointFontIndirect 

之一的成员函数来对该字体对象进行初始化。  



9。4。1 创建字体对象  



创建字体对象的最方便的方法是使用CreatePointFont函数, 

CreatePointFont函数仅需三个参数,其原型如下:  



BOOL CreatePointFont( int nPointSize; LPCTSTR lpszFaceName; CDC* pDC = NULL );  



第一个参数nPointSize以十分之一磅为单位设置字体的大小,磅是印 

刷行业中的常用度是单位,1磅=1/72英寸≈0。03528厘米。磅这个单 

位在涉及图形和文本输出的Windows应用程序中被大量的使用,因此 

我们应该熟知它和其它常用度量单位之间的换算关系。在后面的部分 

中我们还会讨论到在Windows编程中还会使用到的其它度量单位以及 


…………………………………………………………Page 550……………………………………………………………

它们之间的换算关系。  



参数lpszFaceName指定了创建字体对象所使用的字体名,pDC指向一 

个设备上下文对象,函数CreatePointFont将以磅表示的字体大小转 

换为pDC所指向的设备上下文中相应的逻辑单位。如果指针pDC为空, 

函数CreatePointFont将字体大小以设备单位表示。  



9。4。2 LOGFONT结构  



在Windows内部,字体是以一个名为LOGFONT的结构来表示的。结构 

LOGFONT的定义如下:  



typedef struct tagLOGFONT { // lf  



LONG lfHeight;  



LONG lfWidth;   



LONG lfEscapement;  



LONG lfOrientation;  



LONG lfWeight;   



BYTE lfItalic;   



BYTE lfUnderline;   



BYTE lfStrikeOut;   



BYTE lfCharSet;   



BYTE lfOutPrecision;   



BYTE lfClipPrecision;   



BYTE lfQuality;   



BYTE lfPitchAndFamily;   



TCHAR lfFaceName'LF_FACESIZE';   



} LOGFONT;  



各成员的含义如下:  



              lfHeight:               以逻辑单位指定字体字符元 

                                      (character        cell)或字符的高 


…………………………………………………………Page 551……………………………………………………………

              度。字符高度值为字符元高度值 

              减去内部行距 (internal

              leading)值。当lfHeight大于0 

              时,字体映射程序将该值转换为 

              设备单位,并将它与可用字体的 

              字符元高度进行匹配;当该参数 

              为0时,字体映射程度将使用一个 

              匹配的默认高度值;如果参数的 

              值小于0,则将其转换为设备单 

              位,并将其绝对值与可用字体的 

              字符高度进行匹配。  



              对于任何一种情况,字体映射程 

              度最终得到的字体高度值不会超 

              过所指定的值。以MM_TEXT映射模 

              式下,字体高度值和磅值有如下 

              的换算公式:  



              lfHeight=…MulDiv(PointSize;  

              GetDeviceCaps(hDC; LOGPIXELSY); 72);  



返回目录 上一页 下一页 回到顶部 1 1
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!