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.总结

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

    文章未经说明均属原创,学习笔记可能有大段的引用,一般会注明参考文献。 欢迎大家留言交流,转载请注明出处。
  • 相关阅读:
    关于32位操作系统和64位操作系统对InstallShield打包的影响
    NEWS: Symantec宣布Wise Package Studio将终止
    InstallShield 2012新功能试用(2) 调用MsiGetProperty等MSI API发生变化
    Basic INFO 在命令行Build InstallShield安装包工程获得压缩安装包
    NEWS InstallShield 2012 Service Pack 1发布
    Basic INFO InstallShield Basic MSI工程中如何在SetupCompleteSuccess界面中启动Readme
    Basic INFO InstallShield的脚本编辑器中如何显示代码行号
    Basic INFO 关于在InstallShield制作的安装包界面中删除InstallShield文字的厂商回复
    Basic INFO InstallShield工程中如何让产品的快捷方式名称始终与产品名保持一致
    Basic INFO: 创建隐藏文件夹
  • 原文地址:https://www.cnblogs.com/yhlx125/p/2719298.html
Copyright © 2011-2022 走看看