zoukankan      html  css  js  c++  java
  • 1.1.5-学习Opencv与MFC混合编程之---画图工具 输入文字和填充图像 修改光标

    源代码:http://download.csdn.net/detail/nuptboyzhb/3961696

    输入文字

    l 对话框

    1.    插入,资源,选择对话框资源

    2.    编辑对话框如下:


    设置每一个控件的属性。

    3.    双击对话框,建立对话框的类,命名为:TexTSetDlg

    4.    给对话框类增加公有成员变量如下:

    int m_colorR;

    int m_colorG;

    int m_colorB;

    double dlg_hscale;

    double dlg_vscale;

    double dlg_shear;

    int dlg_thick;

    CString str_text;

    5.     在对话框的构造函数中,初始化成员变量。

    6.     在数据交换函数中,将控件上输入的值写入到成员变量中。同时检查输入的数字是否合法。

    voidTexTSetDlg::DoDataExchange(CDataExchange* pDX)

    {

           CDialog::DoDataExchange(pDX);

           //{{AFX_DATA_MAP(TexTSetDlg)

           DDX_Text(pDX,IDC_COLOR_R,m_colorR);

       DDV_MinMaxInt(pDX,m_colorR, 0, 255);

           DDX_Text(pDX,IDC_COLOR_G,m_colorG);

       DDV_MinMaxInt(pDX,m_colorG, 0, 255);

           DDX_Text(pDX,IDC_COLOR_B,m_colorB);

       DDV_MinMaxInt(pDX,m_colorB, 0, 255);

           //----------------------------------

           DDX_Text(pDX,IDC_FONT_WIDTH,dlg_hscale);

       DDV_MinMaxDouble(pDX,dlg_hscale, 0.1, 5);

           DDX_Text(pDX,IDC_FONT_HIGHT,dlg_vscale);

       DDV_MinMaxDouble(pDX,dlg_vscale, 0.1, 5);

           DDX_Text(pDX,IDC_FONT_SHEAR,dlg_shear);

       DDV_MinMaxDouble(pDX,dlg_shear, 0, 1.5);

           DDX_Text(pDX,IDC_FONT_THICK,dlg_thick);

       DDV_MinMaxInt(pDX,dlg_thick, 1, 20);

           //--------------------------------------

           DDX_Text(pDX,IDC_TEXT,str_text);

                  //NOTE: the ClassWizard will add DDX and DDV calls here

           //}}AFX_DATA_MAP

    }

    7.     为‘确认’按键添加消息响应函数。编辑如下:

    void TexTSetDlg::OnOK()

    {

           //TODO: Add extra validation here

           UpdateData(TRUE);  // 把控件上的数据写入成员变量

           CDialog::OnOK();

    }

    l 对话框的使用

    1.    添加‘文字’菜单项,并添加相应的消息处理函数。在消息处理函数中,设置画图标志;

    my_draw_flag=6;

    2.    编辑OnMouseMove消息处理函数。

    2.1.        添加变量

      TexTSetDlgdlg;

    CvFont font;

    double hscale;

    double vscale;

    double shear=0;

    int fontthickness=1;

              CStringtext;

    2.2.        编写case 6:的程序如下:

    if (dlg.DoModal()!= IDOK)

                    {

                           OnLButtonUpRunFlag=1;

                           return;

                    }

                    //以下进行参数传递

               hscale=dlg.dlg_vscale;

                    vscale=dlg.dlg_vscale;

                    shear=dlg.dlg_shear;

                    fontthickness=dlg.dlg_thick;

                    text=dlg.str_text;

                    colorB=dlg.m_colorB;

                    colorG=dlg.m_colorG;

                    colorR=dlg.m_colorR;

                    deletedlg;//删除对话框

                    cvInitFont(&font,CV_FONT_HERSHEY_SIMPLEX,hscale,vscale,

                           shear,fontthickness);

                    cvFlip(src);

                    cvPutText(src, text,iner_point, &font, cvScalar(colorB,colorG,colorR));

                    cvFlip(src);

               OnLButtonUpRunFlag=1;

                    workImg=cvCloneImage(src);//拷贝到工作区

                    Invalidate();//重绘

                     break;


    Ø  增补:画圆、矩形、椭圆时,可以画填充图形。

    1.   在LineParameter对话框资源上,添加单选按钮。

    设置相应的属性。

    2.   为该单选按钮添加事件处理函数OnMyDrawFull。

    3.   增加BOOL型成员变量full,并在构造函数中初始化为FALSE。

    4.   在单选按钮事件处理函数中将full设置位TRUE

    Ø  CXXXXView中,各个菜单项的修改。

    1.    在CXXXXView类中增加BOOL类型成员变量m_FullOrNot,并在构造函数中进行初始化为FALSE。

    2.    在矩形,椭圆,圆菜菜单项的消息处理函数上添加对话框传递语句: m_FullOrNot=dlg.full;

    3.    在OnMouseMove消息处理函数中,修改thickness赋值语句,将其修改为:

               if(m_FullOrNot==TRUE)

               {

                        thickness=-1;//填充

               }

               else

               {

                        thickness=m_LineWidth;

                   }

     

    实时修改鼠标绘图是的光标

    1.     插入,资源,选择光标资源,新建

    2.     此时资源框图如下:

    3.     用右边的画图工具画出如下光标图形

    4.     在CXXXXView类得OnMouseMove函数中添加下列语句

    SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR1));  // 加载光标资源

    注意添加的位置

  • 相关阅读:
    c++ 用宏代替常用的函数
    爬取网易云音乐(包括歌词和评论)
    三种常见的单例模式
    函数式编程filter和map的区别
    四种常见排序算法(快速,冒泡,插入,选择排序)
    6.微信撤回消息的获取
    5.微信拜年短信自动回复
    4.深拷贝和浅拷贝
    3.迭代器以及迭代器的作用
    2.生成器计算出斐波那契数列
  • 原文地址:https://www.cnblogs.com/lidabo/p/3501320.html
Copyright © 2011-2022 走看看