zoukankan      html  css  js  c++  java
  • 【作业】简单绘图程序

    1.项目名称:简单绘图程序

    2.项目内容

            设计一个简单的绘图程序,能够绘制椭圆(圆)、矩形、任意线。

    3.功能设计思路

            利用MFC制作这样一个绘图程序!实现绘制椭圆(圆)、矩形、任意线。需要通过菜单按钮实现,可以提高自己对于MFC基本架构的理解,提高自己的VC++编程能力!

    4.编码实施

            首先建立一个利用向导生成一个MFC程序名为CTDraw;

            添加菜单绘制图形菜单——画圆ID_MENUYUAN、画矩形ID_MENUJUXING、线段ID_MENUDRAW;

            右击菜单画圆在类向导中为CCTdrawView类添加OnLButtonDown、OnLButtonUp、OnMouseMove事件,为ID_MENUYUAN添加Commond处理函数,为ID_MENUJUXING添加Commond处理函数,为ID_MENUDRAW添加Commond处理函数、添加函数ResetAllFlags()。

    添加变量:

             bool m_draw;

             bool m_yuan;

             bool m_juxing;

             CPoint m_start;

             CPoint m_end;

    添加代码如下:

     1 void CCTdrawView::ResetAllFlags()
     2 {
     3     m_draw = false;
     4     m_juxing = false;
     5     m_yuan = false;
     6 }
     7 
     8     void CCTdrawView::OnMenudraw() 
     9 {
    10     // TODO: Add your command handler code here
    11     ResetAllFlags();
    12     m_draw = true;
    13 }
    14 void CCTdrawView::OnMenujuxing() 
    15 {
    16     // TODO: Add your command handler code here
    17     ResetAllFlags();
    18     m_juxing = true;
    19 }
    20 void CCTdrawView::OnMenuyuan() 
    21 {
    22     // TODO: Add your command handler code here
    23     ResetAllFlags();
    24     m_yuan = true;
    25 }
    26 void CCTdrawView::OnUpdateMenujuxing(CCmdUI* pCmdUI) 
    27 {
    28     // TODO: Add your command update UI handler code here
    29     pCmdUI->SetCheck(m_juxing);
    30 }
    31 void CCTdrawView::OnUpdateMenuyuan(CCmdUI* pCmdUI) 
    32 {
    33     // TODO: Add your command update UI handler code here
    34     pCmdUI->SetCheck(m_yuan);
    35 }
    36 void CCTdrawView::OnUpdateMenudraw(CCmdUI* pCmdUI) 
    37 {
    38     // TODO: Add your command update UI handler code here
    39     pCmdUI->SetCheck(m_draw);
    40 }
    41 void CCTdrawView::OnLButtonDown(UINT nFlags, CPoint point) 
    42 {
    43     // TODO: Add your message handler code here and/or call default
    44     if(m_draw)
    45     {
    46         m_start = point;
    47     }
    48     if(m_juxing||m_yuan)
    49     {
    50         m_start = point;
    51         m_end = point;
    52         SetCapture();
    53     }
    54     CView::OnLButtonDown(nFlags, point);
    55 }
    56 void CCTdrawView::OnLButtonUp(UINT nFlags, CPoint point) 
    57 {
    58     // TODO: Add your message handler code here and/or call default
    59     ReleaseCapture();
    60     CView::OnLButtonUp(nFlags, point);
    61 }
    62 void CCTdrawView::OnMouseMove(UINT nFlags, CPoint point) 
    63 {
    64     // TODO: Add your message handler code here and/or call default
    65     CClientDC dc(this);
    66     if(m_draw&&(nFlags&&MK_LBUTTON))
    67     {
    68         dc.MoveTo(m_start);
    69         dc.LineTo(point);
    70         m_start = point;
    71     }
    72     if(m_juxing&&(nFlags&&MK_LBUTTON))
    73     {
    74         CGdiObject*object = dc.SelectStockObject(NULL_BRUSH);
    75         int mdoe = dc.GetROP2();
    76         dc.SetROP2(R2_NOTCOPYPEN);
    77         dc.Rectangle(m_end.x,m_end.y,m_start.x,m_start.y);
    78         dc.SetROP2(mdoe);
    79         dc.Rectangle(m_start.x,m_start.y,point.x,point.y);
    80         dc.SelectObject(object);
    81         m_end = point;
    82     }
    83     if(m_yuan&&(nFlags&&MK_LBUTTON))
    84     {
    85         CGdiObject*object = dc.SelectStockObject(NULL_BRUSH);
    86         int mdoe = dc.GetROP2();
    87         dc.SetROP2(R2_NOTCOPYPEN);
    88         dc.Ellipse(m_end.x,m_end.y,m_start.x,m_start.y);
    89         dc.SetROP2(mdoe);
    90         dc.Ellipse(m_start.x,m_start.y,point.x,point.y);
    91         dc.SelectObject(object);
    92         m_end = point;
    93     }
    94     CView::OnMouseMove(nFlags, point);
    95 }

    5.功能实现

     

    6.总结

            本设计实现了简单的图形绘制,一个简单的问题就是当视图大小变化时显示的图形就会丢失!再有比如数据的序列化问题,数据的缓冲处理,当数据量很大的时候重绘必须用的缓冲机制。很高。

    文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。 欢迎大家留言交流,转载请注明出处。
  • 相关阅读:
    main函数的实现解析
    srand()和rand()函数的使用
    shell编程总结
    自动创建字符设备,不需mknod
    linux使用i/o内存访问外设
    Flink之state processor api原理
    Flink之state processor api实践
    软件架构被高估,清晰简单的设计被低估
    技术架构的战略和战术
    Flink task之间的数据交换
  • 原文地址:https://www.cnblogs.com/yhlx125/p/2719298.html
Copyright © 2011-2022 走看看