Pie Polygon PolyPolygon Polyline Rectangle RoundRect BitBlt StretchBlt GetPixel SetPixel TextOut ExtTextOut TabbedTextOut DrawText
绘制饼形图 绘制多边形,包含由线段连接的一个或多个点(顶点) 创建使用当前多边形填充模式的两个或多个多边形,多边形可以相互分 开或叠加 绘制多边形,包含连接指定点的一组线段 使用当前笔绘制矩形,用当前画刷填充 使用当前笔绘制圆角矩形,用当前画刷填充 位图函数 从指定设备上下文拷贝位图 把位图由源矩形和设备移动到目标矩形,必要时拉伸或压缩位图以适合 目标矩形的维数 获取指定点像素的 RGB 颜色值 设置指定点像素为
最接近指定色的近似值 文本函数 用当前选取字体在指定位置写字符串 用当前选取字体在矩形区域写字符串 在指定位置写字符串,制表符扩展为制表符停止位置数组中指定值 在指定矩形内绘制格式化文本
-------------------详情参考 MSDN、MFC 类库详解-----------------
坐标映射实例 (1)建立单文档 MFC 项目 Draw:New—>Projects—>MFC AppWizard(EXE) —>Single Document。 (2) 找到 CMainFrame::PreCreateWindow 函数, 在其中设置默认窗口大小为 400 pixel*300 pixel。BOOL CMainFrame::PreCreateWindow(CREATESTRUCT& cs) { if( !CFrameWnd::PreCreateWindow(cs) ) return FALSE; // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs cs.cx=400; cs.cy=300; return TRUE; }
(3)添加 OnPaint 事件资源管理器—>ClassView—>右击 CDrawView 选择 Add Windows Message Handler —>WM_PAINT—> Add Handler 1. 2. 3. 4. 5. void CDrawView::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: Add your message handler code here CRect cr;//矩形结构
6. GetClientRect(&cr);//获得客户区窗口
7. int cx=cr.right;//右
8. int cy=cr.bottom;//底
9. dc.SetMapMode(MM_ISOTROPIC);//X=Y
10. dc.SetWindowExt(1000,1000);//设置逻辑窗口,默认窗口原点为(0,0) 11. dc.SetViewportExt(cx,-cy);//定义输出视口,X右Y上为正
12. dc.SetViewportOrg(cx/2,cy/2);//定义视口原点为客户区中心
13. dc.Ellipse(-200,200,200,-200);//绘制椭圆与客户区外切的椭圆
14. //绘制水平垂直的四条半径
15. dc.MoveTo(0,0); dc.LineTo(200,0);
16. dc.MoveTo(0,0); dc.LineTo(-200,0);
17. dc.MoveTo(0,0); dc.LineTo(0,200);
18. dc.MoveTo(0,0); dc.LineTo(0,-200);
19. //执行F5进行Debug,在底端Output窗口中可以观察ClientRect
20. TRACE( "ClientRect.x = %d, ClientRect.y = %d/n", cx, cy );
21. }
运行结果如图1左。当改变窗口大小时,图中圆形状始终不变。
<1>将上面代码的第9行改为:dc.SetMapMode(MM_ANISOTROPIC);//X!=Y运行结果如图1右。
图1
我们发现,尽管上面代码的第13行dc.Ellipse(-200,200,200,-200);中定义的椭圆外接矩形逻辑上为正方形,但是显示的并不是圆,而是椭圆。
当我们改变窗口大小时,图中椭圆变形,甚至可能变为圆形。具体为:
保持窗口宽度不变时,减小高度,椭圆变得更扁;保持窗口高度不变时,减小宽度,椭圆变得更圆,当拉伸到客户区为正方形时,我们发现椭圆变成了圆!
<2>将上面代码的第9行改回dc.SetMapMode(MM_ISOTROPIC);//X=Y,第15行改为
dc.LineTo(500,0); 第18行改为dc.LineTo(0,-500); 运行结果如图2左。
保持窗口高度不变,减小窗口宽度,使窗口宽度<窗口高度,运行结果如图2右。
搜索“diyifanwen.net”或“第一范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,第一范文网,提供最新外语学习MFC中的GDI绘图(9)全文阅读和word下载服务。
相关推荐: