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));  // 加载光标资源

    注意添加的位置

  • 相关阅读:
    Azure PowerShell (2) 修改Azure订阅名称
    Windows Azure Platform Introduction (11) 了解Org ID、Windows Azure订阅、账户
    Azure PowerShell (3) 上传证书
    Azure PowerShell (1) PowerShell入门
    Windows Azure Service Bus (2) 队列(Queue)入门
    Windows Azure Service Bus (1) 基础
    Windows Azure Cloud Service (10) Role的生命周期
    Windows Azure Cloud Service (36) 在Azure Cloud Service配置SSL证书
    Android studio 使用心得(一)—android studio快速掌握快捷键
    android 签名、混淆打包
  • 原文地址:https://www.cnblogs.com/lidabo/p/3501320.html
Copyright © 2011-2022 走看看