友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
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);
}
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!