第5章图形操作 内容摘要 1.CD和CDC类 2.GD和 CGdiobject类 3.绘图程序实例 4.绘图程序实例二
第5章 图形操作 内容摘要: 1. CD和CDC类 2. GDI和CGdiObject类 3. 绘图程序实例一 4. 绘图程序实例二 返回目录
5.1 51CD和CDC类 学习目标 1.了解设备环境( Device context,简称DC)和设 备环境类(CDC) 2.利用设备环境类进行简单绘图
5.1 CD和CDC类 学习目标 1.了解设备环境(Device Context,简称DC) 和设 备环境类(CDC) 2. 利用设备环境类进行简单绘图 5.1 返回第5章
5.1 使用设备环境类绘图的一个简单例子 1.利用 AppWizard生成基于对话框程序框架( Bmp Test) 2.添加画线和画椭圆的代码( OnPaint()函数)见下页 3.代码解释 (1) CPaintdc dc(this);这句代码是生成一个 CPaintDo类的实例dc,生成后 就可以调用他的函数来进行绘图了。 (2) dc. Move To(30,30);调用dc的 MoveTo函数把画线的起点定在对话框的 (30,30)坐标点。 Move To函数的一般调用格式为: Move To(intx,int y),其中参数x,y是要画直线的起始点坐标。 (3) dc Line To(30,30);调用dc的 Lineto函数画线到(100,100)坐标点。 Lineto函数的一般调用格式为: Lineto(ntx,inty),其中参数x,y是所 画直线的终止点坐标。 (4) dc Ellipse(120,120,160,160);本句代码的作用是调用设备环境对象dc 的画椭圆函数 Ellipse画椭圆。 Ellipse函数的一般调用格式为: Ellipse ( LPCRECTlpRect),其中参数 lpRect是所画椭圆的外接矩形
使用设备环境类绘图的一个简单例子 1. 利用AppWizard生成基于对话框程序框架(BmpTest ) 2. 添加画线和画椭圆的代码 (OnPaint()函数) 见下页 3. 代码解释: (1)CPaintDC dc(this);这句代码是生成一个CPaintDC类的实例dc,生成后 就可以调用他的函数来进行绘图了。 (2)dc.MoveTo(30,30);调用dc的MoveTo函数把画线的起点定在对话框的 (30,30)坐标点。MoveTo函数的一般调用格式为:MoveTo(int x,int y),其中参数x,y是要画直线的起始点坐标。 (3)dc.LineTo(30,30);调用dc的LineTo函数画线到(100,100)坐标点。 LineTo函数的一般调用格式为:LineTo(int x,int y),其中参数x,y是所 画直线的终止点坐标。 ( 4)dc.Ellipse(120,120,160,160);本句代码的作用是调用设备环境对象dc 的画椭圆函数Ellipse画椭圆。Ellipse函数的一般调用格式为: Ellipse (LPCRECT lpRect),其中参数 lpRect是所画椭圆的外接矩形 。 5.1
void CBmp TestDlg: OnPaint if (sIconico) CPaintDc dc(this): l/ devce context for painting SendMessage(WM ICoNERASEBKGND, (WPARAM)dc. GetSafeHdco, 0) 1/ Center icon in client rectangle int axIcon GetSystemMetrics(SM_CXICON) int cylon GetSystemMetrICs(SM CYICON): CRect rect int x=(rect Width(-CXlcon+1)/2 int y=(rect. Height0-cylcon 1)/2: ∥ Draw the icon dc. Drawlcon(x, y, m hIcon) CPaintDC dc(this); device context for painting dc. Move To(10, 10); dc Line To(100, 100) dc Ellipse(120,120,160,160); CDialog: OnPaint
5.1 void CBmpTestDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND,(WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CPaintDC dc(this); // device context for painting dc.MoveTo(10,10); dc.LineTo(100,100); dc.Ellipse(120,120,160,160); CDialog::OnPaint(); } }
4.改变画图颜色 2.1 void CBmp TestDlg: OnPaint if ( lsIconicO) ∥与前一页代码相同; else CPaintDC dc(this); /device context for painting CPen newpen(PS SOLID, 1, RGB(0, 255, 0)) CBrush newbrush(RGB(0, 0, 255)) CPen *pOldpen=dc Selectobject(&newpen) CBrush *pOldbrush=dc Selectobject(&newbrush) dc MoveTo(10, 10) dc LineTo(100, 100) dc. B ipse(8080,120.12 dc Selectobject(poldpen); dc Selectobject(poldbrush) CDialog On Paint
2.1 void CBmpTestDlg::OnPaint() { if (IsIconic()) { //与前一页代码相同; else { CPaintDC dc(this); // device context for painting CPen newpen(PS_SOLID,1,RGB(0,255,0)); CBrush newbrush(RGB(0,0,255)); CPen *pOldpen=dc.SelectObject(&newpen); CBrush *pOldbrush=dc.SelectObject(&newbrush); dc.MoveTo(10,10); dc.LineTo(100,100); dc.Ellipse(80,80,120,120); dc.SelectObject(pOldpen); dc.SelectObject(pOldbrush); CDialog::OnPaint(); } } 4.改变画图颜色