zoukankan      html  css  js  c++  java
  • 实现MFC菜单画笔画圆,并且打钩

    这个是用最简单的方法,移动客户区,圆会不见,所以下一篇我还要改进。

    首先新建一个MFC单文件,在资源那里的菜单下,建立画笔,可以弹出红画笔,蓝画笔和绿画笔,,给出ID_RED,ID_BLUE,ID_GREEN并且在视类下建立类向导添加command函数,这时候,我们要想下怎么表示这些颜色,我的做法是,在视类定义一个公有整型变量int m_pencolor,还要设置三个布尔变量(表示打钩状态,等下会说),(可以默认选红色)在视类头文件加上

    {。。。

    public:
    bool statu2;//绿画笔打钩状态
    bool statu1;//蓝画笔打钩状态
    bool statu;//红画笔打钩状态
    int m_pencolor;

    CPoint point;

    。。。

    }

    构造函数初始化 设置

    statu=1;statu1=0;statu2=0;

    m_pencolor=1;

    point.x=230;

    point.y=300;

    我们默认选的是红画笔,当我们点击其他颜色的笔时,要在相应画笔前面打钩,这时候需要一个更新函数,也是建立类向导,选择视类的更新函数

    void CXfView::OnUpdateRed(CCmdUI* pCmdUI)
    {
    // TODO: Add your command update UI handler code here
    if(m_pencolor=1)

    pCmdUI->SetCheck(statu);//把菜单选中 设置3个布尔值

    }

    void CXfView::OnUpdateBlue(CCmdUI* pCmdUI)
    {
    // TODO: Add your command update UI handler code here
    if(m_pencolor=2)
    pCmdUI->SetCheck(statu1);

    }

    void CXfView::OnUpdateGreen(CCmdUI* pCmdUI)
    {
    // TODO: Add your command update UI handler code here
    if(m_pencolor=3)

    pCmdUI->SetCheck(statu2);


    }

    command函数那里写上代码:

    void CXfView::OnRed()

    { // TODO: Add your command handler code here

    m_pencolor=1;

    }    

    void CXfView::OnBlue()

    {// TODO: Add your command handler code here

    m_pencolor=2;

     }

    void CXfView::OnGreen()

    {// TODO: Add your command handler code here

           m_pencolor=3;

    }

    然后颜色现在是可以选择了,那么我们要怎样用鼠标画圆呢?

    右击视类,添加window message hanlder

    void CXfView::OnLButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: Add your message handler code here and/or call default
    COLORREF color;
    switch(m_pencolor)//这里是用选择语句判断选择什么颜色
    {
    case 1:
    m_pencolor=RGB(255,0,0);//m_pencolor=1为红色
    statu=1;//这里还要再在视类设置布尔三个变量,用来表示菜单栏那里是否打钩,

    //这里选择红画笔,打钩
    statu1=0;
    statu2=0;
    break;
    case 2:
    m_pencolor=RGB(0,0,255);
    statu=0;
    statu1=1;
    statu2=0;
    break;
    case 3:
    m_pencolor=RGB(0,255,0);
    statu=0;
    statu1=0;
    statu2=1;
    break;
    }
    CPen NewPen, *pOldPen;
    NewPen.CreatePen(PS_SOLID,10,m_pencolor);//实心线
    CClientDC dc(this);
    pOldPen= dc.SelectObject(&NewPen);

    dc.Ellipse(point.x-50,point.y-50,point.x+50 ,point.y+50);//画圆
    dc.SelectObject(pOldPen);//这句话(我也不太懂)

    CView::OnLButtonDown(nFlags, point);
    }

    这样就基本好了,这里是临时写的,之前试过是可以的,不知会不会遗漏什么,欢迎大家批评指正。

    这个是不能实现重绘的,以后完善(呵呵,这些都是我的作页来着)

  • 相关阅读:
    第二次会议
    第五次团队会议
    作业六:团队项目——编写项目的Spec
    DFD数据流程图
    第四次会议
    精通 VC++ 实效编程280例 03 控制栏
    1.窗体与界面设计工具栏设计
    HTML5开发 Local Storage 本地存储
    1.窗体与界面设计菜单应用实例
    精通 VC++ 实效编程280例 02 菜单和光标
  • 原文地址:https://www.cnblogs.com/lqs-zsjky/p/4166059.html
Copyright © 2011-2022 走看看