设为首页 加入收藏

TOP

26.2.3 设计画图程序
2013-10-07 13:12:51 来源: 作者: 【 】 浏览:64
Tags:26.2.3 设计 画图 程序

26.2.3  设计画图程序

除了通过程序控制图形的绘制外,经常会遇到需要根据用户的输入来绘制指定样式的图形,本节以一个简单的例子,讲解如何设计画图程序。介绍如何通过捕获用户的输入来绘制矩形和直线。用户可以根据自己的需要,增加其他形状和样式的绘制。设计画图程序主要分为两个步骤。

(1)处理按钮事件,本节定义了3个按钮,分别是绘制直线、绘制矩形、切换成箭头。在这3个按钮的处理函数中,分别将全局变量type的值设置为1、2、0。代码如下:

  1. void CDrawPictureSampleView::OnMenuitemDrawLine()  
  2. {   //绘制直线  
  3.     type = 1;  
  4. }  
  5. void CDrawPictureSampleView::OnMenuitemDrawRect()  
  6. {   //绘制矩形  
  7.     type = 2;  
  8. }  
  9. void CDrawPictureSampleView::OnMenuitemArrow()  
  10. {   //箭头  
  11.     type = 0;  

(2)处理鼠标按下事件和鼠标抬起事件。当鼠标按下时,会记录鼠标按下时的鼠标位置点,并存入全局变量ptBegin中。当鼠标抬起时,会根据当前的操作种类来执行相应的操作。代码如下:

  1. void CDrawPictureSampleView::OnLButtonDown(UINT 
    nFlags, CPoint point)  
  2.                                                
    // 鼠标按下处理函数  
  3. {  
  4.     ptBegin.x = point.x;  
  5.     ptBegin.y = point.y;  
  6.     CView::OnLButtonDown(nFlags, point);  
  7. }  
  8. void CDrawPictureSampleView::OnLButtonUp(UINT
    nFlags, CPoint point)  
  9. {                                                      
    // 鼠标抬起处理函数  
  10.     CDC* pDC = GetDC();                               
    // 获取设备上下文  
  11.     if (type == 1)  
  12.     {  
  13.         hPen = CreatePen(PS_SOLID,8, RGB(255,0,255));  
    // 创建画笔  
  14.         pDC->SelectObject(hPen);                       
    // 选择画笔  
  15.         ptEnd.x = point.x;  
  16.         ptEnd.y = point.y;                            
    // 记录点信息  
  17.         pDC->MoveTo(ptBegin.x, ptBegin.y);             
    // 移动到起点  
  18.         pDC->LineTo(ptEnd.x, ptEnd.y);                
    // 绘制直线  
  19.         DeleteObject(hPen);                            
    // 删除画笔  
  20.         DeleteDC(pDC->m_hDC);                        
    // 删除上下文  
  21.     }  
  22.     else if (type == 2)  
  23.     {  
  24.         hPen = CreatePen(PS_SOLID,5,RGB(0,255,0));    
    // 创建画笔  
  25.         hBrush = CreateSolidBrush(RGB(125, 125, 0));  
  26.   // 创建画刷  
  27.         pDC->SelectObject(hPen);                      
    // 选择画笔  
  28.         pDC->SelectObject(hBrush);                    
    // 选择画刷  
  29.         ptEnd.x = point.x;  
  30.         ptEnd.y = point.y;  
  31.         Rectangle(pDC->m_hDC,ptBegin.x, ptBegin.y, 
    ptEnd.x, ptEnd.y);  
  32.                                                      
    // 绘制矩形  
  33.         DeleteObject(hPen);                        
    // 删除画笔  
  34.         DeleteObject(hBrush);                       
    // 删除画刷  
  35.         DeleteDC(pDC->m_hDC);                     
    // 删除上下文句柄  
  36.     }  
  37.     CView::OnLButtonUp(nFlags, point);  

在上面代码中,OnLButtonDown()函数是鼠标按下事件的处理函数。OnLButtonUp()函数是鼠标抬起事件的处理函数,当当前命令是绘制直线时,会创建宽度为8的粉红色画笔,在画布上绘制从鼠标按下点开始到鼠标抬起点结束的直线。当当前命令是绘制矩形时,会绘制绿色边框,RGB(125,125,0)颜色为填充颜色的矩形,此矩形的对角线点的坐标是鼠标按下点和鼠标抬起点。用户可以根据需要,增加绘制多边形、三角形、折线等其他形式的图形工具。程序的运行效果如图26-2所示。

 
图26-2  画图程序运行效果图
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇26.4.4 播放VCD 下一篇26.5 本章小结

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: