1.1.5-学习Opencv与MFC混合编程之---画图工具 输入文字和填充图像 修改光标

本文详细介绍了如何使用MFC创建自定义对话框及控件,并实现文字属性设置功能,包括颜色、字体大小等。此外,还讲解了如何通过对话框收集用户输入的数据并应用于后续的绘图操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源代码:http://download.youkuaiyun.com/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)); // 加载光标资源

注意添加的位置


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值