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

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

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





        MoveTo        移动当前位置  



        LineTo        从当前位置向指定绘制一条不包括终点的 

                      直线  



        Arc           绘制一个椭圆弧  



        ArcTo         绘制一个椭圆弧,该函数与Arc类似,但当 

                      前位置会被更新  



        AngleArc      绘制一条线段和一个椭圆弧,并将当前位 

                      置移到椭圆弧的终点  



        GetArcDirection  返回设备上下文上当前的画弧方向  



                                                    续表9。4 



        成员函数         描述  



        SetArcDirection   设置当前弧和矩形函数的绘图方向  



        PolyDraw     绘制一系列直线段和贝塞尔(B zier)曲线段 

                                       é 

                     并更新当前位置  



        Polyline     绘制连接指定点的一系列直线段  



        PolyPolyline  绘制多系列的相连直线段,当前位置既不被 

                     使用也不被更新  



        PolylineTo   绘制一条或多条直线,并移动当前位置到最 

                     末一条线的终点  



        PolyBezier   绘制一条或多条贝塞尔曲线,当前位置既不 

                     被使用也不被更新  



        PolyBezierTo  绘制一条或多条贝塞尔曲线,并将当前位置 

                     移动到最后一条曲线的末端  



        FillRect     用指定的刷子填充给定的矩形  



        FrameRect    绘制矩形的边框  


…………………………………………………………Page 536……………………………………………………………

        InvertRect  反转矩形的内容  



        DrawIcon    绘制一个图标  



        DrawDragRect  在矩形区域被拖动时擦除并重绘它  



        FillSolidRect  以原色填充一个矩形区域  



        Draw3dRect  填充一个三维矩形区域  



        DrawEdge    绘制矩形的边界  



                     

        DrawFrameControl 绘制一个框架控件  



        DrawState   显示一幅图象并对图象应用表示其状态的可 

                    视效果  



        Chord       绘制一个 “弓形”,一个 “弓形”是由一个 

                    椭圆弧和一条线段所围成的区域  



        DrawFocusRect  绘制一个矩形以用来表示其焦点  



        成员函数        描述  



        Ellipse     绘制一个椭圆  



        Pie         绘制一个饼块  



        Polygon     绘制一个由多条线段连接而成的多边形  



        PolyPolygon  绘制一个或多个以当前多边形填充模式填充 

                    的多边形。这些多边形可能互不相交,也可 

                    能互相覆盖  



        Polyline    绘制一个包括一系列连接指定点的线段的多 

                    边形  



        Rectangle   使用当前笔和刷子绘制并填充一个矩形  



        RoundRect   使用当前笔和刷子绘制并填充一个圆角矩形  



示例程序DrawingDemo演示了表9。4中的一些绘图函数的使用和输出效 

果。程序中涉及了较多的设备上下文输出函数,但由于这些函数的使 

用相对比较简单,因此我们仅给出示例程序DrawingDemo的代码清 

单,而不过多的分析各段程序代码。这些代码清单都有比较详细的注 

释,结构也非常清晰,很容易就可以看懂。同本章中前面的应用程序 

一样,示例程序DrawingDemo使用了MFC的应用程序框架,但我们没有 

使用AppWizard来生成它。程序中还涉及了一些我们 目前还未作系统 

阐述的内容,在现阶段并不要求读者理解这些内容,尽管实际上它们 


…………………………………………………………Page 537……………………………………………………………

并不复杂。  



#include   



#include   



#include   



// 派生应用程序类  



class CMyApp : public CWinApp  



{  



public:  



virtual BOOL InitInstance();  



};  



// 派生窗口类  



class CMyWnd : public CFrameWnd  



{  



protected:  



// 声明消息处理函数  



afx_msg void OnPaint();  



DECLARE_MESSAGE_MAP();  



};  



// 初始化应用程序实例  



BOOL CMyApp::InitInstance()  



{  



// 创建应用程序的主窗口  



CMyWnd *pWnd=new CMyWnd;  



pWnd…》Create(NULL; 〃CDC 绘图函数示例〃);  



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



pWnd…》ShowWindow(SW_SHOW);  


…………………………………………………………Page 538……………………………………………………………

pWnd…》UpdateWindow();  



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



m_pMainWnd=pWnd;  



return TRUE;  



}  



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



CMyApp MyApp;  



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



BEGIN_MESSAGE_MAP(CMyWnd; CWnd)  



ON_WM_PAINT()  



END_MESSAGE_MAP()  



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



void CMyWnd::OnPaint()  



{  



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



CPaintDC dc(this);  



CPen pen1(PS_SOLID; 1; RGB(192; 192; 192)); pen2(PS_SOLID; 1; RGB(0; 0; 255));  

*pOldPen;  



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



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);  


…………………………………………………………Page 539……………………………………………………………

// 使用函数 Arc 和 ArcTo 输入弧形  



{  



pOldPen=dc。SelectObject(&pen1);  



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



dc。MoveTo(85; 60);  



dc。LineTo(160; 60);  



dc。MoveTo(85; 60);  



dc。LineTo(10; 10);  



dc。SelectObject(&pen2);  



dc。MoveTo(10;10);  



dc。ArcTo(10; 10; 160; 110; 160; 60; 10; 10);  



dc。Arc(10; 10; 160; 110; 10; 30; 160; 110);  



dc。TextOut(10; 115; 〃Arc & ArcTo〃);  



}  



// 使用函数 PolyPolyline 输出多段折线  



{  



dc。SelectObject(&pen1);  



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



CPoint pts''={CPoint(190; 20); CPoint(200; 60); CPoint(270; 40); CPoint(210; 80);  



CPoint(250; 100); CPoint(300; 30); CPoint(310; 80); CPoint(320; 50)};  



DWORD pps''={5; 3};  



dc。SelectObject(&pen2);  



dc。PolyPolyline(pts; pps; 2);  



CRect rc(200; 30; 310; 90);  



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



}  


…………………………………………………………Page 540……………………………………………………………

// 使用函数 DrawFocusRect 和 Draw3dRect 输出特殊样式的矩形  



{  



dc。SelectObject(&pen1);  



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



dc。SelectObject(&pen2);  



dc。DrawFocusRect(CRect(370; 25; 480; 95));  



dc。Draw3dRect(CRect(390; 40; 460; 80); RGB(192; 192; 192); RGB(64; 64; 64));  



dc。SetBkColor(RGB(255; 255; 255));  



dc。TextOut(350; 115; 〃Draw3dRect & DrawFocusRect〃);  



}  



// 使用 Pie 和 Chord 输出弓形和扇形  



{  



dc。SelectObject(&pen1);  



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



dc。SelectObject(&pen2);  



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



dc。Pie(20; 150; 150; 230; 160; 160; 10; 160);  



dc。Chord(20; 150; 150; 230; 10; 220; 160; 220);  



dc。TextOut(10; 245; 〃Ellipse; Pie & Chord〃);  



}  



// 使用 PolyDraw 输出贝塞尔曲线  



{  



dc。SelectObject(&pen1);  



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



dc。MoveTo(180; 140);  



dc。LineTo(330; 160);  


…………………………………………………………Page 541……………………………………………………………

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