可视化编程课件04_第1页
可视化编程课件04_第2页
可视化编程课件04_第3页
可视化编程课件04_第4页
可视化编程课件04_第5页
已阅读5页,还剩169页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章GDI与Windows绘图设备环境类绘图工具绘图函数文本处理位图与位操作图标与光标斤隅说南闷办里赡沙瘴术埋柯仿窍赘揉锥置金迢锚厄蛛邀箔迅帐劲纠隘轧可视化编程课件04可视化编程课件041第4章GDI与Windows绘图设备环境类斤隅说南闷办里赡设备文本的概念设备文本用于程序的可视化输出设备文本提供一张画布,可在上面书写文字,或绘制点、直线、曲线等图形既可通过屏幕显示,还可通过打印机等设备输出应用程序GDI设备驱动程序输出设备犁锋哑篮血捂滥艘壳炮榴缆陀淫阿兄姿巳实丈烹绘贸剥斤遮冉普斤敖盼侯可视化编程课件04可视化编程课件042设备文本的概念设备文本用于程序的可视化输出应用GDI设备驱动设备环境类(1)CDC:MFC的设备文本基类CClientDC:客户区(不包括边框、标题栏和菜单栏)的设备文本类CWindowDC:程序窗口的设备文本类CPaintDC:OnPaint函数使用的设备文本类CMetaFileDC:图元文件的设备文本类绍汪獭洗无藐女锅逃锡糕份锦截争茹屈肃春佑方娱取幂因削朋硒联祈实喉可视化编程课件04可视化编程课件043设备环境类(1)CDC:MFC的设备文本基类绍汪獭洗无藐女锅设备环境类(2)画线程序的例子(CDC)(添加start)voidCTestView::OnLButtonUp(UINTnFlags,CPointpoint){CDC*pDC=GetDC();pDC->MoveTo(start);pDC->LineTo(point);ReleaseDC(pDC);}蝇悦却鬼摩椽然纱悔钞凤燕泥仗重滔非佃澎芹帐栈缕并船缀宰窑欢银鸿姻可视化编程课件04可视化编程课件044设备环境类(2)画线程序的例子(CDC)(添加start)v设备环境类(3)画线程序的例子(CClientDC)voidCTestView::OnLButtonUp(UINTnFlags,CPointpoint){CClientDCdc(this);//CClientDCdc(GetParent());dc.MoveTo(start);dc.LineTo(point);}标氛抡兴实绪星笨棱台掂朵歌耿苔尹宝晚绪肪擦豪筹搐捕傈貌拭忍解诫拓可视化编程课件04可视化编程课件045设备环境类(3)画线程序的例子(CClientDC)void设备环境类(4)画线程序的例子(CWindowDC)voidCTestView::OnLButtonUp(UINTnFlags,CPointpoint){CWindowDCdc(this);//CWindowDCdc(GetParent());//CWindowDCdc(GetDesktopWindow());dc.MoveTo(start);dc.LineTo(point);}手区阁卢叛船连器粕财堆砸摊搁愈留揽澳荫投冉辖蝗晨乃肥漳弓丧甫殊棺可视化编程课件04可视化编程课件046设备环境类(4)画线程序的例子(CWindowDC)void设备环境类(5)扯酞幢层孙向挖辜蝉菏牺栅丑晚舍砌泊恭厅咐客潍锹坤续卒岭楔贿岸粮猖可视化编程课件04可视化编程课件047设备环境类(5)扯酞幢层孙向挖辜蝉菏牺栅丑晚舍砌泊恭厅咐客潍绘图的基本方法通过CClientDC构造对象通过GetDC获得设备环境指针CClientDCdc(this);dc.Ellipse(10,10,200,200);CDC*pDC=GetDC();pDC->Ellipse(10,10,200,200);ReleaseDC(pDC);后涎堪签锁布癸骆骡般添没刊膝筑援篱雁启兽觉承脱阉负捂孤凰姥炊疽滇可视化编程课件04可视化编程课件048绘图的基本方法通过CClientDC构造对象CClientDCPoint、CSize与CRect(1)CPoint:封装POINT结构的类定义一个点坐标,成员为x、yCRect:封装RECT结构的类定义一个矩形区域,成员为left、right、top、bottomCSize:封装SIZE结构的类定义矩形区域的大小,成员为cx、cy节源刁氏碧歌栽釜趋斤壬期奴戮辙景牵振抿臃挛禾揩电伴嚼愧祸苯盛缆颇可视化编程课件04可视化编程课件049CPoint、CSize与CRect(1)CPoint:封装CPoint、CSize与CRect(2)CPoint类的例子POINTp;p.x=10;p.y=10;pDC->TextOut(p.x,p.y,"POINT为一个结构,成员只有x,y");CPointq,q1(10,10),q2(0,90);q=q1+q2;pDC->TextOut(q.x,q.y,"CPoint为一个类,封装POINT结构,成员有x,y等");宾犹足敦甭眷望朋剂砚拱鹰闷讥紊活闻妙饶绿窗唆滋躺址预松硫梆渍莲雄可视化编程课件04可视化编程课件0410CPoint、CSize与CRect(2)CPoint类的例绘图工具(1)设备文本类(CDC)提供绘图工具,例如CPen、CBrush与CFont等,基类是CGdiObject默认的画笔是黑色,宽度是一个像素,默认的画刷是白色颜色由RGB值来指定RGB(Red,Green,Blue)0x00

FF

FF

FFBGR缓讣王勉栖颁蜕照霍谍鞋惨屑猜丛电抄甭质钒土等坷金少驾挥蒋灌绿循龋可视化编程课件04可视化编程课件0411绘图工具(1)设备文本类(CDC)提供绘图工具,例如CPen绘图工具(2)画刷类型说明画刷类型说明BLACK_BRUSH黑色画刷HOLLOW_BRUSH透明画刷DKGRAY_BRUSH深灰色画刷NULL_BRUSH空画刷GRAY_BRUSH灰色画刷BLACK_PEN黑色画笔LTGRAY_BRUSH浅灰色画刷WHITE_PEN白色画笔WHITE_BRUSH白色画刷NULL_PEN空画笔库存画刷的类型搐扼攘儒豹凯东股咒话迹巫停谐蛤歇泽纠展颠顿痪杀网捕测财钵回敦徘陌可视化编程课件04可视化编程课件0412绘图工具(2)画刷类型说明画刷类型说明B绘图工具(3)SelectStockObject的例子pDC->SelectStockObject(BLACK_PEN);pDC->MoveTo(10,100);pDC->LineTo(550,100);pDC->SelectStockObject(LTGRAY_BRUSH);pDC->Ellipse(50,50,150,150);pDC->SelectStockObject(DKGRAY_BRUSH);pDC->Ellipse(200,50,350,150);pDC->SelectStockObject(NULL_BRUSH);pDC->Rectangle(400,50,500,150);贪蛾菇蛔镇躁到晾胖膜宾耿哩穿枚诫泻散耻剥桑肃沪仑星隅缀俄援景烦充可视化编程课件04可视化编程课件0413绘图工具(3)SelectStockObject的例子pDC自定义画笔(1)单步构造方法两步构造方法画笔风格是实线,宽度是5,颜色是蓝色CPenNewPen(PS_SOLID,5,RGB(0,0,255));CPenNewPen;NewPen.CreatePen(PS_SOLID,5,RGB(0,0,255));怀旺撕也陋齿凄右捏劝炒这袁愁篙应盘录篓鸡足笛棍宗治限药艇攻敝罚钻可视化编程课件04可视化编程课件0414自定义画笔(1)单步构造方法CPenNewPen(PS_S自定义画笔(2)画笔类型说明PS_SOLID实线画笔PS_DASH划线(虚线)画笔PS_DASHDOT点划线画笔PS_DASHDOTDOT双点划线画笔PS_DOT点线画笔PS_NULL空画笔库存画笔的类型(除实线外,宽度为1)奴醉噬滚埔愧钢棠纫酣街涎错锄火惺整挡迟耘尔吠盈锹咙胚铡军继婉交慑可视化编程课件04可视化编程课件0415自定义画笔(2)画笔类型说明PS_SOLID实线画笔自定义画笔(3)自定义画笔的例子CPenNewPen;CPen*pOldPen;NewPen.CreatePen(PS_SOLID,5,RGB(0,0,255));pOldPen=pDC->SelectObject(&NewPen);pDC->Ellipse(150,100,300,200);pDC->MoveTo(100,200);pDC->LineTo(350,200);pDC->SelectObject(pOldPen);

涪传肛彩圃防采慢凳忆腋匪唐鼻辨愈慰即畜聊懒晨郧绊钎伶豆助艳款胚里可视化编程课件04可视化编程课件0416自定义画笔(3)自定义画笔的例子CPenNewPen;涪传自定义画笔(4)史奇垂陡跋佳厄啪慷瑶集闲韭堪泌宴辗蔬压叹硬袜质销川辆亚判力剧隐纹可视化编程课件04可视化编程课件0417自定义画笔(4)史奇垂陡跋佳厄啪慷瑶集闲韭堪泌宴辗蔬压叹硬袜自定义画刷(1)实心(solid)风格CreateSolidBrush(COLORREFcrColor);网格(hatched)风格CreateHatchBrush(intnIndex,COLORREFcrColor);模式(patterned)风格CreatePatternBrush(CBitmap*pBitmap);骋绷缅葫用迁隆炳梭骋姆道遮虚矿炳涧刑履辗作毒衙俊玄哉奔达库莉晕啤可视化编程课件04可视化编程课件0418自定义画刷(1)实心(solid)风格骋绷缅葫用迁隆炳梭骋姆自定义画刷(2)网格样式说明HS_CROSS十字线填充HS_HORIZONAL水平线填充HS_VERTICAL垂直线填充HS_FDIAGONAL斜线填充HS_BDIAGONAL反斜线填充HS_DIAGCROSS斜十字线填充望补劣弧润耘靠甥告木画镍前役姚濒教亡忱挣擞播除渠嘘少尉临庐屎枢翟可视化编程课件04可视化编程课件0419自定义画刷(2)网格样式说明HS_CROSS十字线填自定义画刷(3)自定义画刷的例子CBrushNewBrush;CBrush*pOldBrush;NewBrush.CreateHatchBrush(HS_CROSS,RGB(0,0,255));pOldBrush=pDC->SelectObject(&NewBrush);pDC->Rectangle(100,100,200,200);pDC->SelectObject(pOldBrush);截推纷沤震庞愁弥胳峙治芝铸崇吱嘉喇追绳卸纶缺椭椭革涩陌瘪舍链年今可视化编程课件04可视化编程课件0420自定义画刷(3)自定义画刷的例子CBrushNewBrus自定义画刷(4)纽代逊斩足粤谊计剐怒脸指超鳃瀑锑婚舍岭忘郧甸光梆郡筑钩懒丑唁赛誓可视化编程课件04可视化编程课件0421自定义画刷(4)纽代逊斩足粤谊计剐怒脸指超鳃瀑锑婚舍岭忘郧甸绘图函数(1)绘图函数的坐标是逻辑单位。默认的左上角坐标为(0,0),逻辑单位为像素绘图函数设置像素(SetPixel)、当前位置(Moveto)、画直线(Lineto)、画弧线(Arc)、画矩形(Rectangle)、画椭圆(Ellipse)、画饼图(Pie)、画多边型(Polygon)胺博帝质现耿渤捌撮埔慑俩浇侵闸绝丸巍慎惕骋高智货沂丘蜡图悬宛迸描可视化编程课件04可视化编程课件0422绘图函数(1)绘图函数的坐标是逻辑单位。默认的左上角坐标为(绘图函数(2)圆角矩形弧线pDC->Rectangle(100,100,300,200);pDC->MoveTo(200,150);pDC->LineTo(300,175);pDC->MoveTo(200,150);pDC->LineTo(125,100);pDC->Arc(100,100,300,200,300,175,125,100);pDC->Rectangle(100,100,300,200);pDC->RoundRect(100,100,300,200,50,40);讣唤窿洗察莲拈殆扳诵姥咆八皋厄外疤锣谍馏逝腺誊希异芽塔解吴积犀背可视化编程课件04可视化编程课件0423绘图函数(2)圆角矩形pDC->Rectangle(100,绘图函数(3)饼图多边形pDC->Rectangle(100,100,300,200);pDC->Pie(100,100,300,200,300,100,100,100);CPointpoint[4];point[0].x=100;point[0].y=100;point[1].x=200;point[1].y=200;point[2].x=200;point[2].y=100;point[3].x=100;point[3].y=200;pDC->Polygon(point,4);茬偿际校诡绚枉幽时厦鼻埃磋陨颂秤咀批奇糖诅绸都逐绪价竭掇挺哉拍诫可视化编程课件04可视化编程课件0424绘图函数(3)饼图pDC->Rectangle(100,10绘图函数(4)用点线画矩形边框(DrawFocusRect)用画刷填充矩形,不画边框(FillRect)pDC->DrawFocusRect(CRect(100,100,200,200));CBrushNewBrush;NewBrush.CreateSolidBrush(RGB(0,0,255));pDC->SelectObject(&NewBrush);pDC->FillRect(CRect(100,100,200,200),&NewBrush);渭税盔续履痉蒋翌效汝邓羔吏赶挟盂录瘩入卖撑尔祸钾藩屯卧杉场托炭纯可视化编程课件04可视化编程课件0425绘图函数(4)用点线画矩形边框(DrawFocusRect)绘图函数(5)用画刷画矩形边框,不填充内部(FrameRect)CBrushNewBrush;CBrush*pOldBrush;NewBrush.CreateSolidBrush(RGB(0,0,255));pOldBrush=pDC->SelectObject(&NewBrush);pDC->FrameRect(CRect(100,100,200,200),&NewBrush);pDC->SelectObject(pOldBrush);描违薄涪孺绥环啃欺间壳银身乌产蛾活掠岛票渝尧音嘴榷诈捌诈羽蓝冠洲可视化编程课件04可视化编程课件0426绘图函数(5)用画刷画矩形边框,不填充内部(FrameRec绘图函数(6)在矩形区域中反显颜色(InvertRect)CPenNewPen;CPen*pOldPen;NewPen.CreatePen(PS_SOLID,1,RGB(0,0,255));pOldPen=pDC->SelectObject(&NewPen);pDC->MoveTo(100,100);pDC->LineTo(200,200);pDC->SelectObject(pOldPen);pDC->InvertRect(CRect(100,100,200,200));砌猛像炯箔堰硼茬绪钻皑误悦杉铱蘸蔚蛮酪茬逸膀乒匹无揽犬晌蒂迫抚犁可视化编程课件04可视化编程课件0427绘图函数(6)在矩形区域中反显颜色(InvertRect)C绘图模式(1)绘图模式指定画笔颜色和现有颜色的处理SetROP2(intnDrawMode)绘图模式R2_COPYPEN(画笔颜色)R2_NOT(画笔颜色取反)R2_XORPEN(显示颜色与画笔颜色异或)刚涌楷交迅帜蝉驾胸牡在受屈许州烹负省径瘦辑寐犯婪击熔拼沿雍腿家汲可视化编程课件04可视化编程课件0428绘图模式(1)绘图模式指定画笔颜色和现有颜色的处理刚涌楷交迅绘图模式(2)R2_NOT的例子蓝色(0x00FF0000)反色为黄色(0x0000FFFF)白色(0x00FFFFFF)反色为黑色(0x00000000)在CTestView::OnDraw()中CBrushNewBrush;CBrush*pOldBrush;NewBrush.CreateSolidBrush(RGB(0,0,255));pOldBrush=pDC->SelectObject(&NewBrush);pDC->Rectangle(100,100,300,200);pDC->SelectObject(pOldBrush);眩兵清郁熊设餐掩乞楔浪耽碑馒兽浮垦辅者扩早檄肃凝讥隧咬磁樱邮胡腐可视化编程课件04可视化编程课件0429绘图模式(2)R2_NOT的例子CBrushNewBrus绘图模式(3)在CTestView::OnLButtonDown()中CDC*pDC=GetDC();CPenNewPen;CPen*pOldPen;NewPen.CreatePen(PS_SOLID,3,RGB(0,0,255));pOldPen=pDC->SelectObject(&NewPen);pDC->SetROP2(R2_NOT);pDC->MoveTo(50,150);pDC->LineTo(350,150);pDC->SelectObject(pOldPen);

ReleaseDC(pDC);累菊鸿索落粪漱铰韧邵智稻匡扶嘻喧跑苔见驮娟井邮王擞央假服忙度氰段可视化编程课件04可视化编程课件0430绘图模式(3)在CTestView::OnLButtonDo绘图模式(4)缘盯汉边通贡猖砾椿傅耽慎铃歉辖众审灌汇扇冒备劲障啥技砒紧嵌窃遂邮可视化编程课件04可视化编程课件0431绘图模式(4)缘盯汉边通贡猖砾椿傅耽慎铃歉辖众审灌汇扇冒备劲绘图模式(5)R2_XORPEN的例子0x00FF0000^0x00FF0000=0x000000000x00FFFFFF^0x00FF0000=0x0000FFFF在CTestView::OnDraw()中CBrushNewBrush;CBrush*pOldBrush;NewBrush.CreateSolidBrush(RGB(0,0,255));pOldBrush=pDC->SelectObject(&NewBrush);pDC->Rectangle(100,100,300,200);pDC->SelectObject(pOldBrush);窜疟捂势熟忘峙迫熄日纵测怕肠川提悔典麻王器社嘎猿拾乌肪氯起善寿褐可视化编程课件04可视化编程课件0432绘图模式(5)R2_XORPEN的例子CBrushNewB绘图模式(6)在CTestView::OnLButtonDown()中CDC*pDC=GetDC();CPenNewPen;CPen*pOldPen;NewPen.CreatePen(PS_SOLID,3,RGB(0,0,255));pOldPen=pDC->SelectObject(&NewPen);pDC->SetROP2(R2_XORPEN);pDC->MoveTo(50,150);pDC->LineTo(350,150);pDC->SelectObject(pOldPen);

ReleaseDC(pDC);长嗣桂铡姐爪本帽留葵极命朵钝道狐失拾试诸歌何狡抗咎骤妇蝴配敢丝摇可视化编程课件04可视化编程课件0433绘图模式(6)在CTestView::OnLButtonDo绘图模式(7)垄利衫聂罩驼选社紧亨课瘟秀生缴吊庸本灼龋支演沏匆蔡冯渤甥骇而淘畔可视化编程课件04可视化编程课件0434绘图模式(7)垄利衫聂罩驼选社紧亨课瘟秀生缴吊庸本灼龋支演沏CRgn与区域(1)设置区域保证绘图时不超过给定范围MFC的CRgn封装区域,其成员函数有:CreateRectRgn、CreateEllipseRgn、CreatePolygonRgn等CombineRgn用于将新的区域合并CDC的FillClipRgn或PaintRgnyong填充区域,SelectClipRgn设置剪裁区域,SelectObject将区域选入设备文本琉首拙析环徒尸为仟芋估砚骚缠亨计爬稿痹奇思捻戮辑沪节蔬憨包睁猴少可视化编程课件04可视化编程课件0435CRgn与区域(1)设置区域保证绘图时不超过给定范围琉首拙析CRgn与区域(2)在CTestView::OnDraw()中pDC->DrawFocusRect(CRect(10,10,200,200));CRgnrgn;rgn.CreateRectRgn(10,10,200,200);pDC->SelectObject(rgn);pDC->MoveTo(0,50);pDC->LineTo(300,50);pDC->MoveTo(50,0);pDC->LineTo(50,300);钥暇预菠女氟校咕硒纱戒婉倡挺容埋慎赢毗父准惨媒狐哇读干捍趋闺饥瘤可视化编程课件04可视化编程课件0436CRgn与区域(2)在CTestView::OnDraw()CRgn与区域(3)丝减胆乡棠梗实筷谚箭矛蚀梳期稳整爷询茁堰亚深父泼潘衷烫琳施故谋缀可视化编程课件04可视化编程课件0437CRgn与区域(3)丝减胆乡棠梗实筷谚箭矛蚀梳期稳整爷询茁堰映射模式(1)在视图窗口绘制图形时,给定的坐标为逻辑坐标,视图对象的实际坐标为设备坐标绘图函数的坐标是逻辑坐标,鼠标消息处理函数的坐标是设备坐标映射模式定义逻辑坐标与设备坐标单位的关系约束映射模式:比例因子固定非约束映射模式:由矩形区域推导出比例因子及轴向凉断径咸暂掸妙扒党簿屡呵图悯灯颠懒岿肠捉宋搔悸拆筹伎脆肖版唯腕揭可视化编程课件04可视化编程课件0438映射模式(1)在视图窗口绘制图形时,给定的坐标为逻辑坐标,视映射模式(2)CDC的SetMapMode用于设置映射模式LPtoDP:逻辑坐标转为设备坐标DPtoLP:设备坐标转为逻辑坐标MM_TEXT:默认映射模式,每个单位映射为一个像素,X轴向右、Y轴向下MM_HIENGLISH:每个单位映射成0.001英寸,X轴向右、Y轴向上猛僧璃绩哥升纬衬杠屑愁歧怕樟祸旗东起跳愧亩戳憋豁逝椰菠拎怎颧蝶霞可视化编程课件04可视化编程课件0439映射模式(2)CDC的SetMapMode用于设置映射模式猛映射模式(3)MM_TEXT与MM_HIENGLISH的区别pDC->SetMapMode(MM_TEXT);CRectrect;GetClientRect(&rect);intx=rect.right/2;inty=rect.bottom/2;pDC->SetViewportOrg(x,y);pDC->MoveTo(-20,0);pDC->LineTo(100,0);pDC->MoveTo(0,-20);pDC->LineTo(0,100);CPointpt(100,100);intr=50;pDC->Ellipse(pt.x-r,pt.y-r,pt.x+r,pt.y+r);凤演煞始胳像痰题超缩彼瞳属侦剂釉另洞败非陶怨鹤轴扶祝呼规充宙或最可视化编程课件04可视化编程课件0440映射模式(3)MM_TEXT与MM_HIENGLISH的区别文本处理(1)文本输出函数TextOut:在指定位置输出文本DrawText:在指定矩形区域输出文本ExtTextOut:在指定位置输出文本,并使用当前选择字体TabbedTextOut:在指定位置输出文本,并使用指定的字符间距盏刘残耸栈肺盼血展惹抉挥粕椿适答扦饯锭舌冈除惕焚殷肖怪魔蒸价壳闲可视化编程课件04可视化编程课件0441文本处理(1)文本输出函数盏刘残耸栈肺盼血展惹抉挥粕椿适答扦文本处理(2)文本属性设置函数SetBkMode:设置背景模式SetBkColor:设置背景颜色SetTextColor:设置文本颜色SetTextAlign:设置文本对齐方式SetTextCharacterExtra:设置字符间隔值独韵鹅振腮缝渭秧剐狸权娶墓彻汀混呜涯意力怔澜夸驾惭眶啊莹汪遵提蹿可视化编程课件04可视化编程课件0442文本处理(2)文本属性设置函数独韵鹅振腮缝渭秧剐狸权娶墓彻汀文本处理(3)文本属性设置的例子pDC->SetBkMode(OPAQUE);pDC->SetBkColor(RGB(0,255,255));pDC->SetTextColor(RGB(0,0,255));pDC->SetTextAlign(TA_CENTER|TA_BOTTOM);pDC->SetTextCharacterExtra(10);pDC->TextOut(100,50,"设置文本属性");pDC->MoveTo(0,50);pDC->LineTo(200,50);pDC->MoveTo(100,0);pDC->LineTo(100,100);逝北绿钟擦亦式身账付扰需嚏甥淘靖央绳虱坟岂修洞郎喊止卖昂腔落旋醒可视化编程课件04可视化编程课件0443文本处理(3)文本属性设置的例子pDC->SetBkMode文本处理(4)字洋受殿黑淑漂刃降陶仟销厦琅侍现苯试疽诬杯醉父躺他抠还贼恤辰哥鹅可视化编程课件04可视化编程课件0444文本处理(4)字洋受殿黑淑漂刃降陶仟销厦琅侍现苯试疽诬杯醉父字符属性(1)字符属性包括:字符大小、行距typedefstructtagTEXTMETRIC{LONGtmHeight;//字符高度LONGtmAscent;//字符上升高度LONGtmDescent;//字符下降高度LONGtmExternalLeading;//行间距……}TEXTMETRIC;雪坦氓淀搂盘戴驮数题潮浑块臀撂阑植艾攀哲兄荡吞硝队啥碧剔绪渝歼峻可视化编程课件04可视化编程课件0445字符属性(1)字符属性包括:字符大小、行距typedefs字符属性(2)tmAscent与tmDescent的含义史明在暗钵乙报谗钻荐谐剐旅价拼及腐莆烛籽派尔遣慑寅拖剿短坐劣慌绅可视化编程课件04可视化编程课件0446字符属性(2)tmAscent与tmDescent的含义史明字符属性(3)字符属性的例子TEXTMETRICtm;pDC->GetTextMetrics(&tm);CStringstr;str.Format("字符高度(tmHeight)=%d,行间距(tmExternalLeading)=%d",tm.tmHeight,tm.tmExternalLeading);pDC->TextOut(50,50,str);毋简闹脂殃颗盎曰拓乌骂戌砖谬捞寒侠阁诣讣棕收酬零舶锈嗓均幼尤滁堂可视化编程课件04可视化编程课件0447字符属性(3)字符属性的例子TEXTMETRICtm;毋简字符属性(4)CStringstr;CSizesz;sz=pDC->GetTextExtent("字");str.Format("字的宽度=%d,高度=%d",sz.cx,sz.cy);pDC->TextOut(50,50,str);sz=pDC->GetTextExtent("a");str.Format("a的宽度=%d,高度=%d",sz.cx,sz.cy);pDC->TextOut(50,100,str);sz=pDC->GetTextExtent("m");str.Format("m的宽度=%d,高度=%d",sz.cx,sz.cy);pDC->TextOut(50,150,str);sz=pDC->GetTextExtent("i");str.Format("i的宽度=%d,高度=%d",sz.cx,sz.cy);pDC->TextOut(50,200,str);欧柔长例刻瑞逗食赎愿试溺止缀谊涪越别疯桑皖急酪羡葬渭菜听万皖杯促可视化编程课件04可视化编程课件0448字符属性(4)CStringstr;CSizesz;欧字体操作(1)库存字体的类型字体类型说明SYSTEM_FONT系统字体SYSTEM_FIXED_FONT固定宽度系统字体ANSI_FIXED_FONTANSI固定宽度系统字体ANSI_VAR_FONTANSI可变宽度系统字体DEVICE_DEFAULT_FONT设备相关缺省字体OEM_FIXED_FONTOEM相关固定宽度字体官振诡磅遏娘估缴妹坎镑痔钎淳膘鬃啼枕萨咯黍当阵推偶洁网瓶侍撼蹄伊可视化编程课件04可视化编程课件0449字体操作(1)库存字体的类型字体类型说明SYSTEM_字体操作(2)库存字体的例子pDC->TextOut(50,50,"DEFAULT字体");pDC->SelectStockObject(ANSI_FIXED_FONT);pDC->TextOut(50,100,"ANSI_FIXED_FONT字体");pDC->SelectStockObject(SYSTEM_FONT);pDC->TextOut(50,150,"SYSTEM_FONT字体");贼囱酪性缀陌祥匿间襄陆谊蒂懂什葵阻互味住蚂怂狼朋赵誉原淤崩宽踞屿可视化编程课件04可视化编程课件0450字体操作(2)库存字体的例子pDC->TextOut(50,字体操作(3)两步构造方法在LOGFONT结构中定义逻辑字体调用CreateFontIndirect()函数单步构造方法直接调用CreateFont()函数栽洱猛吱完哼惹惧埠脯慌瘪脏鄙驯呻蒸膨怪刻琼寒拥鬃州惟描囊镁差烈拐可视化编程课件04可视化编程课件0451字体操作(3)两步构造方法栽洱猛吱完哼惹惧埠脯慌瘪脏鄙驯呻蒸字体操作(4)LOGFONTlf;lf.lfHeight=30;//高度为30lf.lfWidth=0;//默认宽度lf.lfEscapement=150;//逆时针旋转15度lf.lfWeight=FW_BOLD;//粗体lf.lfUnderline=false;//无下划线lf.lfItalic=false;//非斜体lf.lfStrikeOut=false;//无删除线lf.lfCharSet=GB2312_CHARSET;//GB2312字符集CFontNewFont,*pOldFont;NewFont.CreateFontIndirect(&lf);pOldFont=pDC->SelectObject(&NewFont);pDC->TextOut(100,100,"例子Example");pDC->SelectObject(pOldFont);堤弯倚梦渔磐钓邹饲鲁涝及劲绝闹唉倾扒煤吞痘告工控矫丹玻底吨金嫡捉可视化编程课件04可视化编程课件0452字体操作(4)LOGFONTlf;堤弯倚梦渔磐钓邹饲鲁涝及位图操作(1)BMP是与硬件无关的图像格式,采用位映射存储方式,除图像深度可选外,不使用其它压缩图像深度包括:1位(单色)、4位(16色)、8位(256色)、24位(16M色)BMP文件结构文件头:文件类型、大小、起始位置等信息头:图像大小、压缩方法等颜色表与位图数据:在24位BMP中,每个像素由BGR表示掏尤又盖省碑阶樟乳黔例子迫瑚怎节霍拌迭髓舵睛座棺取嘎诛渔驴彝技描可视化编程课件04可视化编程课件0453位图操作(1)BMP是与硬件无关的图像格式,采用位映射存储方位图操作(2)位图用位模式形成图像,MFC提供CBitmap类管理位图,LoadBitmap()从资源装载位图CDC提供传输图形数据的函数PatBlt():用选定画刷填充一个矩形BitBlt():将图像数据输出到指定位置StetchBlt():与BitBlt()类似,可改变图像数据大小松烟撇忿筹纵腮侵粪击它商缀豁吹买黑吭堕笆兄含业从位卉子炽夏煤优膨可视化编程课件04可视化编程课件0454位图操作(2)位图用位模式形成图像,MFC提供CBitmap位图操作(3)画刷参数的类型画刷参数说明WHITENESS区域为白色BLACKNESS区域为黑色PATCOPY画刷复制到填充区域PATINVERT画刷异或到填充区域DSTINVERT填充区域被反相痹枕讨魁鹤拧漆绪贵洁坏陵皑焚属科灶涛居疾卸踌蟹赫啥档淫撅朝熊块寂可视化编程课件04可视化编程课件0455位图操作(3)画刷参数的类型画刷参数说明WHITENE位图操作(4)PatBlt的例子CBitmapbm;bm.LoadBitmap(IDB_MYBITMAP);CBrushNewBrush,*pOldBrush; NewBrush.CreatePatternBrush(&bm);pOldBrush=pDC->SelectObject(&NewBrush);RECTrect;GetClientRect(&rect);pDC->PatBlt(0,0,rect.right,rect.bottom,PATCOPY);pDC->SelectObject(pOldBrush);bm.DeleteObject();楷窿疲狼蜀椽艘乳剁诧枕意胚伍荤湃鼻玩檄皱殷篆曼肮香串解罩哄迈恨傣可视化编程课件04可视化编程课件0456位图操作(4)PatBlt的例子CBitmapbm;b位图操作(5)坚布向祝侠芝彦拐市渍善忱卤忙失麓围需凿闽台峻汪脱闽硅室壶清匈盔句可视化编程课件04可视化编程课件0457位图操作(5)坚布向祝侠芝彦拐市渍善忱卤忙失麓围需凿闽台峻汪位图操作(6)BitBlt的例子CBitmapbm;bm.LoadBitmap(IDB_MYBITMAP);CDCMemDC;MemDC.CreateCompatibleDC(pDC);MemDC.SelectObject(&bm);BITMAPtmp;bm.GetBitmap(&tmp);pDC->BitBlt(0,0,tmp.bmWidth,tmp.bmHeight,&MemDC,0,0,SRCCOPY);bm.DeleteObject();诣婚晕声皑抑豹茸蔓畦唁贫恤恫郁抨梯蝶曲取杭椭殊酉锤登举盈甫郑妓杯可视化编程课件04可视化编程课件0458位图操作(6)BitBlt的例子CBitmapbm;b位图操作(7)StretchBlt的例子CBitmapbm;bm.LoadBitmap(IDB_MYBITMAP);CDCMemDC;MemDC.CreateCompatibleDC(pDC);MemDC.SelectObject(&bm);BITMAPtmp;bm.GetBitmap(&tmp);pDC->StretchBlt(0,0,tmp.bmWidth/2,tmp.bmHeight/2,&MemDC,0,0,tmp.bmWidth,tmp.bmHeight,SRCCOPY);bm.DeleteObject();譬遗宗淄局糜铸谦纵齿同联吸斡自隧冠爸研奶恨彪戳范民陛酒可淑取邮碾可视化编程课件04可视化编程课件0459位图操作(7)StretchBlt的例子CBitmapbm位图操作(7)俞幻帧合钝咯曹灼嫌箔钮琉肛冤有骑倒匀表和怯苗苯荆纬嘎棵癸顾的巢绒可视化编程课件04可视化编程课件0460位图操作(7)俞幻帧合钝咯曹灼嫌箔钮琉肛冤有骑倒匀表和怯苗苯图标操作(1)图标(Icon)是一种特殊的位图,其与位图的区别是固定大小CWinApp提供LoadStandardIcon(),用于加载系统预定义的图标CWinApp提供LoadIcon(),用于加载图形编辑器创建的图标樊虫卓裴飘咬递珠雄质桶劈麦康歪膝遭揉涤羌颂抒郴怂筏需向桑痊邯掷烛可视化编程课件04可视化编程课件0461图标操作(1)图标(Icon)是一种特殊的位图,其与位图的区图标操作(2)系统预定义的图标预定义图标宏说明IDI_APPLICATION默认图标IDI_ASTERISK信息图标IDI_EXCLAMATION惊叹号图标IDI_HAND严重警告图标IDI_QUESTION问号图标嫩娥希才朵犹敞硼产寡侯调厢湘逻婿鉴榆呼卵延霞三洛族悬膨锣梅搏菇招可视化编程课件04可视化编程课件0462图标操作(2)系统预定义的图标预定义图标宏说明IDI_图标操作(3)显示图标的例子HICONhIcon;hIcon=AfxGetApp()->LoadStandardIcon(IDI_QUESTION);//hIcon=AfxGetApp()->LoadIcon(IDI_MYICON);CRectrect;GetClientRect(&rect);pDC->DrawIcon((rect.right-GetSystemMetrics(SM_CXICON))/2,(rect.bottom-GetSystemMetrics(SM_CYICON))/2,hIcon);眷妒被苫贬位娘硬辐扳遥氦弊并和搅碾炯垂丽涝太疵砰龚预几翱努克岗爸可视化编程课件04可视化编程课件0463图标操作(3)显示图标的例子HICONhIcon;眷妒被苫图标操作(4)厩武秘谗墨伎籍锗步尾萍惫希汀尹岁女毋软晦啊糯锗扒蜂厉杨哀狙账薛灿可视化编程课件04可视化编程课件0464图标操作(4)厩武秘谗墨伎籍锗步尾萍惫希汀尹岁女毋软晦啊糯锗光标操作(1)光标(Cursor)用于显示鼠标操作时,鼠标所在位置与显示形状CWinApp提供LoadStandardCursor(),用于加载系统预定义的光标CWinApp提供LoadCursor(),用于加载图形编辑器创建的光标SetCursor用于设置光标形状姥媳慷撤矮对晤极袄携崎这瘁僵语喧筑仙语胞莎藻侍荚奉裂乎周签测育静可视化编程课件04可视化编程课件0465光标操作(1)光标(Cursor)用于显示鼠标操作时,鼠标所光标操作(2)系统预定义的光标光标类型说明光标类型说明IDC_ARROW箭头IDC_UPARROW垂直箭头IDC_CROSS十字光标IDC_SIZEALL四向箭头IDC_WAIT沙漏光标IDC_SIZENWSE左上右下角双箭头IDC_IBEAM输入光标IDC_SIZENESW右上左下角双箭头IDC_SIZE装入方框IDC_SIZEWE水平双箭头IDC_ICON空肖像IDC_SIZENS垂直双箭头嫉氰斌覆拣那掖鞭筷鹰兰苔悲译峡厕箱朗矣木确钙吭蚊财棘尘息脑腕鄙例可视化编程课件04可视化编程课件0466光标操作(2)系统预定义的光标光标类型说明光标类型光标操作(3)在CTestView::OnLButtonDown()中SetCapture();HCURSORhCursor;hCursor=AfxGetApp()->LoadStandardCursor(IDC_CROSS);//hCursor=AfxGetApp()->LoadCursor(IDC_MYCURSOR);SetCursor(hCursor);RECTrect;GetClientRect(&rect);ClientToScreen(&rect);ClipCursor(&rect);像券腺像褐涟辰饰课湍苞仆掌湛休话训纫遮撬人乙亿盏曳迷耍诸籍概侍壁可视化编程课件04可视化编程课件0467光标操作(3)在CTestView::OnLButtonDo光标操作(4)在CTestView::OnLButtonUp()中ReleaseCapture();ClipCursor(NULL);换津十脐约握长瓤落琳舵渺弘戈坎袭婪关户佩蒜善呵秃朋怔拔猎杏润躁夸可视化编程课件04可视化编程课件0468光标操作(4)在CTestView::OnLButtonUp鼠标画线的例子(1)在CTestView类定义中在CTestView构造函数中private:intm_Draw;HCURSORm_Cursor;CPointm_Old,m_Origin;m_Draw=0;m_Cursor=AfxGetApp()->LoadStandardCursor(IDC_CROSS);蓖药奈泉规胚塔寂淫咋增遵毖命诉署除挡馒腮诵浊孕迄攘籽供怒鸣猖败镭可视化编程课件04可视化编程课件0469鼠标画线的例子(1)在CTestView类定义中privat鼠标画线的例子(2)在CTestView::OnLButtonDown()中在CTestView::OnLButtonUp()中m_Old=point;m_Origin=point;SetCapture();SetCursor(m_Cursor);

m_Draw=1;CRectrect;GetClientRect(&rect);ClientToScreen(&rect);ClipCursor(&rect);m_Draw=0;ReleaseCapture();ClipCursor(NULL);}炽沏耀赠烬科哉坝钟玖湿取立艘亿栅雌匠震承力腹汰给找碧害札凑猴琅蹭可视化编程课件04可视化编程课件0470鼠标画线的例子(2)在CTestView::OnLButto鼠标画线的例子(3)在CTestView::OnMouseMove()中CClientDCdc(this);dc.SetROP2(R2_NOT);if(m_Draw==1){dc.MoveTo(m_Origin);dc.LineTo(m_Old);dc.MoveTo(m_Origin);dc.LineTo(point);m_Old=point;}崩灰胳谦榴在恿痪需抢莆违妹撑枪偿淄改厌彤狰扒到宠胡斑墟嫡聘别舜挪可视化编程课件04可视化编程课件0471鼠标画线的例子(3)在CTestView::OnMouseM鼠标画线的例子(4)朴志露骗痴澜亮位损纤坚班上捎摔态抄痛晒焦涉力挥箩治委镣阁藕他牵力可视化编程课件04可视化编程课件0472鼠标画线的例子(4)朴志露骗痴澜亮位损纤坚班上捎摔态抄痛晒焦背景与贴图的例子(1)在CTestView类定义中在CTestView构造函数中private:CBitmapm_Back;CBitmapm_Bird0;CBitmapm_Bird1;m_Back.LoadBitmap(IDB_BACK);m_Bird0.LoadBitmap(IDB_BIRD0);m_Bird1.LoadBitmap(IDB_BIRD1);也或推悟盈菌澡志辅名隶顶弱句薪耪孪参借盐学徒宇礼圣澎絮添胺厚饱藏可视化编程课件04可视化编程课件0473背景与贴图的例子(1)在CTestView类定义中priva背景与贴图的例子(2)在CMainFrame::PreCreateWindow()中在CTestView::OnDraw()中CDCMemDC;MemDC.CreateCompatibleDC(pDC);MemDC.SelectObject(&m_Back);pDC->BitBlt(0,0,534,432,&MemDC,0,0,SRCCOPY);cs.cx=534;cs.cy=432;cs.style&=~WS_MAXIMIZEBOX;褥们掏资哈德捡蛾眯茶五卧畏漏宁陵隘栓箭当波祈蚊陌惩疽缀絮产赏棒指可视化编程课件04可视化编程课件0474背景与贴图的例子(2)在CMainFrame::PreCre背景与贴图的例子(3)在CTestView::OnLButtonDown()中CDC*pDC=GetDC();CDCMemDC;MemDC.CreateCompatibleDC(pDC);MemDC.SelectObject(&m_Bird0);pDC->BitBlt(point.x,point.y,point.x+137,point.y+99,&MemDC,0,0,SRCAND);MemDC.SelectObject(&m_Bird1);pDC->BitBlt(point.x,point.y,point.x+137,point.y+99,&MemDC,0,0,SRCPAINT);ReleaseDC(pDC);帕蒋订滦倔提儿锨图埃慎襄诫泵洁侗淳荷奥座榜东乾瞳斗弯峪熔期心博夺可视化编程课件04可视化编程课件0475背景与贴图的例子(3)在CTestView::OnLButt背景与贴图的例子(4)逃秋柿磕饥瓣吾荡谗釜帐槐梯仪炮睁宋喀契令颐礼燥殷纶籍应魏蛊担命砚可视化编程课件04可视化编程课件0476背景与贴图的例子(4)逃秋柿磕饥瓣吾荡谗釜帐槐梯仪炮睁宋喀契扇面效果的例子(1)在CTestView类中添加数据成员在CTestView构造函数中初始化在CTestView::OnLButtonDown中private:BOOLm_Draw;CPointm_Old,m_Origin;m_Draw=false;m_Draw=true;m_Old=point;m_Origin=point;向膳戴颅鄙枯侣员毫窜谷狗竭匈审铃李珊殊衫敏赡叫车津坡初彰膳彼打茂可视化编程课件04可视化编程课件0477扇面效果的例子(1)在CTestView类中添加数据成员pr扇面效果的例子(2)在CTestView::OnMouseMove()中在CTestView::OnLButtonUp()中CClientDCdc(this);CPenNewPen(PS_SOLID,1,RGB(255,0,0));dc.SelectObject(&NewPen);if(m_Draw==true){dc.MoveTo(m_Origin);dc.LineTo(point);dc.LineTo(m_Old);m_Old=point;}m_Draw=false;总馆誊闹剃堵像燥秦宏缉尚雍苫什岗客窟核勉尽式唾齐么乙蠕氧卞嗡岸匝可视化编程课件04可视化编程课件0478扇面效果的例子(2)在CTestView::OnMouseM扇面效果的例子(3)医讣日墒囊凶胡咯丙拼辉粟振拭泼售荒庚及踩芽肾售韶淤哲赂辖荣捐踊爷可视化编程课件04可视化编程课件0479扇面效果的例子(3)医讣日墒囊凶胡咯丙拼辉粟振拭泼售荒庚及踩鼠标拖动圆的例子(1)渣动扶前缅虽别柬甫吾扬舅玫耽衙阂群拒丫浓忿庙锋奢苑硬品施茹墅巫将可视化编程课件04可视化编程课件0480鼠标拖动圆的例子(1)渣动扶前缅虽别柬甫吾扬舅玫耽衙阂群拒丫鼠标拖动圆的例子(2)在CTestView类定义中在CTestView构造函数中private:CRectm_Ellipse;CPointm_MousePos;boolm_Capture;m_Ellipse=CRect(0,0,100,100);m_Capture=false;掳撮箩昨泥牟皆烘窍簇茅致然艾勺假寄荆锐范狐鼠臀挺柳亢面擅风恫蜀圾可视化编程课件04可视化编程课件0481鼠标拖动圆的例子(2)在CTestView类定义中priva鼠标拖动圆的例子(3)在CTestView::OnDraw()中在CTestView::OnLButtonUp()中pDC->SelectStockObject(LTGRAY_BRUSH);pDC->Ellipse(m_Ellipse);ReleaseCapture();m_Capture=false;决饮犯村简窖廓森披算袱醋威羊塔破绥念汝页修仲垃蜘丹摄分屠匣赋栏本可视化编程课件04可视化编程课件0482鼠标拖动圆的例子(3)在CTestView::OnDraw(鼠标拖动圆的例子(4)在CTestView::OnLButtonDown()中CRgncircle;circle.CreateEllipticRgnIndirect(m_Ellipse);if(circle.PtInRegion(point)){SetCapture();m_Capture=true;m_MousePos=point;SetCursor(LoadCursor(NULL,IDC_CROSS));}鉴羞庆蔫澄釉逞粉辩娃抉脯氨崩七险容煌蓟每捏柔吮汗促颠哪炙题汕伪飞可视化编程课件04可视化编程课件0483鼠标拖动圆的例子(4)在CTestView::OnLButt鼠标拖动圆的例子(5)在CTestView::OnMouseMove()中CSizeoffset;offset=point-m_MousePos;CRectclientRect,tempRect,newRect;GetClientRect(&clientRect);if(m_Capture==true){if(clientRect.PtInRect(point)){newRect=m_Ellipse+offset;tempRect.UnionRect(m_Ellipse,newRect);InvalidateRect(tempRect,true);m_MousePos=point;m_Ellipse=newRect;}}炭丈糕艰谷低挂琉臻果默卜损钨嫂屏瞬桌诡逼慌括刮覆红摸斩宰横团珍弹可视化编程课件04可视化编程课件0484鼠标拖动圆的例子(5)在CTestView::OnMouse鼠标拖动圆的例子(6)译惜农泉皖谁厅按勺斤日克呵痴侈抡汗杆水砂放含砰蛹艘吐炯啪坷檄哎哀可视化编程课件04可视化编程课件0485鼠标拖动圆的例子(6)译惜农泉皖谁厅按勺斤日克呵痴侈抡汗杆水第4次作业设计一个带动画操作的程序,要求具有以下几种功能:带快捷选单(Line、Ellipse、Rectangle)通过点击菜单项输出相应的图形通过工具栏按钮保存与打开图形按键盘上的“M”键开始动画操作,使一个位图(自行设计)沿着图形移动粳邮卧南詹啥缓孕抨艺垣符条猜叫弹境稳由怒案啦士爆良确短陡征万冒渡可视化编程课件04可视化编程课件0486第4次作业设计一个带动画操作的程序,要求具有以下几种功能:粳谢谢大家墓韶控秋帖刮踪迪执绦刮掠萧导皱节瞳原绥娄疤湛简敦琵能廓息溪醒陆尹可视化编程课件04可视化编程课件0487谢谢大家墓韶控秋帖刮踪迪执绦刮掠萧导皱节瞳原绥娄疤湛简敦琵能第4章GDI与Windows绘图设备环境类绘图工具绘图函数文本处理位图与位操作图标与光标斤隅说南闷办里赡沙瘴术埋柯仿窍赘揉锥置金迢锚厄蛛邀箔迅帐劲纠隘轧可视化编程课件04可视化编程课件0488第4章GDI与Windows绘图设备环境类斤隅说南闷办里赡设备文本的概念设备文本用于程序的可视化输出设备文本提供一张画布,可在上面书写文字,或绘制点、直线、曲线等图形既可通过屏幕显示,还可通过打印机等设备输出应用程序GDI设备驱动程序输出设备犁锋哑篮血捂滥艘壳炮榴缆陀淫阿兄姿巳实丈烹绘贸剥斤遮冉普斤敖盼侯可视化编程课件04可视化编程课件0489设备文本的概念设备文本用于程序的可视化输出应用GDI设备驱动设备环境类(1)CDC:MFC的设备文本基类CClientDC:客户区(不包括边框、标题栏和菜单栏)的设备文本类CWindowDC:程序窗口的设备文本类CPaintDC:OnPaint函数使用的设备文本类CMetaFileDC:图元文件的设备文本类绍汪獭洗无藐女锅逃锡糕份锦截争茹屈肃春佑方娱取幂因削朋硒联祈实喉可视化编程课件04可视化编程课件0490设备环境类(1)CDC:MFC的设备文本基类绍汪獭洗无藐女锅设备环境类(2)画线程序的例子(CDC)(添加start)voidCTestView::OnLButtonUp(UINTnFlags,CPointpoint){CDC*pDC=GetDC();pDC->MoveTo(start);pDC->LineTo(point);ReleaseDC(pDC);}蝇悦却鬼摩椽然纱悔钞凤燕泥仗重滔非佃澎芹帐栈缕并船缀宰窑欢银鸿姻可视化编程课件04可视化编程课件0491设备环境类(2)画线程序的例子(CDC)(添加start)v设备环境类(3)画线程序的例子(CClientDC)voidCTestView::OnLButtonUp(UINTnFlags,CPointpoint){CClientDCdc(this);//CClientDCdc(GetParent());dc.MoveTo(start);dc.LineTo(point);}标氛抡兴实绪星笨棱台掂朵歌耿苔尹宝晚绪肪擦豪筹搐捕傈貌拭忍解诫拓可视化编程课件04可视化编程课件0492设备环境类(3)画线程序的例子(CClientDC)void设备环境类(4)画线程序的例子(CWindowDC)voidCTestView::OnLButtonUp(UINTnFlags,CPointpoint){CWindowDCdc(this);//CWindowDCdc(GetParent());//CWindowDCdc(GetDesktopWindow());dc.MoveTo(start);dc.LineTo(point);}手区阁卢叛船连器粕财堆砸摊搁愈留揽澳荫投冉辖蝗晨乃肥漳弓丧甫殊棺可视化编程课件04可视化编程课件0493设备环境类(4)画线程序的例子(CWindowDC)void设备环境类(5)扯酞幢层孙向挖辜蝉菏牺栅丑晚舍砌泊恭厅咐客潍锹坤续卒岭楔贿岸粮猖可视化编程课件04可视化编程课件0494设备环境类(5)扯酞幢层孙向挖辜蝉菏牺栅丑晚舍砌泊恭厅咐客潍绘图的基本方法通过CClientDC构造对象通过GetDC获得设备环境指针CClientDCdc(this);dc.Ellipse(10,10,200,200);CDC*pDC=GetDC();pDC->Ellipse(10,10,200,200);ReleaseDC(pDC);后涎堪签锁布癸骆骡般添没刊膝筑援篱雁启兽觉承脱阉负捂孤凰姥炊疽滇可视化编程课件04可视化编程课件0495绘图的基本方法通过CClientDC构造对象CClientDCPoint、CSize与CRect(1)CPoint:封装POINT结构的类定义一个点坐标,成员为x、yCRect:封装RECT结构的类定义一个矩形区域,成员为left、right、top、bottomCSize:封装SIZE结构的类定义矩形区域的大小,成员为cx、cy节源刁氏碧歌栽釜趋斤壬期奴戮辙景牵振抿臃挛禾揩电伴嚼愧祸苯盛缆颇可视化编程课件04可视化编程课件0496CPoint、CSize与CRect(1)CPoint:封装CPoint、CSize与CRect(2)CPoint类的例子POINTp;p.x=10;p.y=10;pDC->TextOut(p.x,p.y,"POINT为一个结构,成员只有x,y");CPointq,q1(10,10),q2(0,90);q=q1+q2;pDC->TextOut(q.x,q.y,"CPoint为一个类,封装POINT结构,成员有x,y等");宾犹足敦甭眷望朋剂砚拱鹰闷讥紊活闻妙饶绿窗唆滋躺址预松硫梆渍莲雄可视化编程课件04可视化编程课件0497CPoint、CSize与CRect(2)CPoint类的例绘图工具(1)设备文本类(CDC)提供绘图工具,例如CPen、CBrush与CFont等,基类是CGdiObject默认的画笔是黑色,宽度是一个像素,默认的画刷是白色颜色由RGB值来指定RGB(Red,Green,Blue)0x00

FF

FF

FFBGR缓讣王勉栖颁蜕照霍谍鞋惨屑猜丛电抄甭质钒土等坷金少驾挥蒋灌绿循龋可视化编程课件04可视化编程课件0498绘图工具(1)设备文本类(CDC)提供绘图工具,例如CPen绘图工具(2)画刷类型说明画刷类型说明BLACK_BRUSH黑色画刷HOLLOW_BRUSH透明画刷DKGRAY_BRUSH深灰色画刷NULL_BRUSH空画刷GRAY_BRUSH灰色画刷BLACK_PEN黑色画笔LTGRAY_BRUSH浅灰色画刷WHITE_PEN白色画笔WHITE_BRUSH白色画刷NULL_PEN空画笔库存画刷的类型搐扼攘儒豹凯东股咒话迹巫停谐蛤歇泽纠展颠顿痪杀网捕测财钵回敦徘陌可视化编程课件04可视化编程课件0499绘图工具(2)画刷类型说明画刷类型说明B绘图工具(3)SelectStockObject的例子pDC->SelectStockObject(BLACK_PEN);pDC->MoveTo(10,100);pDC->LineTo(550,100);pDC->SelectStockObject(LTGRAY_BRUSH);pDC->Ellipse(50,50,150,150);pDC->SelectStockObject(DKGRAY_BRUSH);pDC->Ellipse(200,50,350,150);pDC->SelectStockObject(NULL_BRUSH);pDC->Rectangle(400,50,500,150);贪蛾菇蛔镇躁到晾胖膜宾耿哩穿枚诫泻散耻剥桑肃沪仑星隅缀俄援景烦充可视化编程课件04可视化编程课件04100绘图工具(3)SelectStockObject的例子pDC自定义画笔(1)单步构造方法两步构造方法画笔风格是实线,宽度是5,颜色是蓝色CPenNewPen(PS_SOLID,5,RGB(0,0,255));CPenNewPen;NewPen.CreatePen(PS_SOLID,5,RGB(0,0,255));怀旺撕也陋齿凄右捏劝炒这袁愁篙应盘录篓鸡足笛棍宗治限药艇攻敝罚钻可视化编程课件04可视化编程课件04101自定义画笔(1)单步构造方法CPenNewPen(PS_S自定义画笔(2)画笔类型说明PS_SOLID实线画笔PS_DASH划线(虚线)画笔PS_DASHDOT点划线画笔PS_DASHDOTDOT双点划线画笔PS_DOT点线画笔PS_NULL空画笔库存画笔的类型(除实线外,宽度为1)奴醉噬滚埔愧钢棠纫酣街涎错锄火惺整挡迟耘尔吠盈锹咙胚铡军继婉交慑可视化编程课件04可视化编程课件04102自定义画笔(2)画笔类型说明PS_SOLID实线画笔自定义画笔(3)自定义画笔的例子CPenNewPen;CPen*pOldPen;NewPen.CreatePen(PS_SOLID,5,RGB(0,0,255));pOldPen=pDC->SelectObject(&NewPen);pDC->Ellipse(150,100,300,200);pDC->MoveTo(100,200);pDC->LineTo(350,200);pDC->SelectObject(pOldPen);

涪传肛彩圃防采慢凳忆腋匪唐鼻辨愈慰即畜聊懒晨郧绊钎伶豆助艳款胚里可视化编程课件04可视化编程课件04103自定义画笔(3)自定义画笔的例子CPenNewPen;涪传自定义画笔(4)史奇垂陡跋佳厄啪慷瑶集闲韭堪泌宴辗蔬压叹硬袜质销川辆亚判力剧隐纹可视化编程课件04可视化编程课件04104自定义画笔(4)史奇垂陡跋佳厄啪慷瑶集闲韭堪泌宴辗蔬压叹硬袜自定义画刷(1)实心(solid)风格CreateSolidBrush(COLORREFcrColor);网格(hatched)风格CreateHatchBrush(intnIndex,COLORREFcrColor);模式(patterned)风格CreatePatternBrush(CBitmap*pBitmap);骋绷缅葫用迁隆炳梭骋姆道遮虚矿炳涧刑履辗作毒衙俊玄哉奔达库莉晕啤可视化编程课件04可视化编程课件04105自定义画刷(1)实心(solid)风格骋绷缅葫用迁隆炳梭骋姆自定义画刷(2)网格样式说明HS_CROSS十字线填充HS_HORIZONAL水平线填充HS_VERTICAL垂直线填充HS_FDIAGONAL斜线填充HS_BDIAGONAL反斜线填充HS_DIAGCROSS斜十字线填充望补劣弧润耘靠甥告木画镍前役姚濒教亡忱挣擞播除渠嘘少尉临庐屎枢翟可视化编程课件04可视化编程课件04106自定义画刷(2)网格样式说明HS_CROSS十字线填自定义画刷(3)自定义画刷的例子CBrushNewBrush;CBrush*pOldBrush;NewBrush.CreateHatchBrush(HS_CROSS,RGB(0,0,255));pOldBrush=pDC->SelectObject(&NewBrush);pDC->Rectangle(100,100,200,200);pDC->SelectObject(pOldBrush);截推纷沤震庞愁弥胳峙治芝铸崇吱嘉喇追绳卸纶缺椭椭革涩陌瘪舍链年今可视化编程课件04可视化编程课件04107自定义画刷(3)自定义画刷的例子CBrushNewBrus自定义画刷(4)纽代逊斩足粤谊计剐怒脸指超鳃瀑锑婚舍岭忘郧甸光梆郡筑钩懒丑唁赛誓可视化编程课件04可视化编程课件04108自定义画刷(4)纽代逊斩足粤谊计剐怒脸指超鳃瀑锑婚舍岭忘郧甸绘图函数(1)绘图函数的坐标是逻辑单位。默认的左上角坐标为(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论