1.1.7-学习Opencv与MFC混合编程之---为画图工具添加工具栏

简介: 源代码:http://download.csdn.net/detail/nuptboyzhb/3961701 哎,其实里面有很多图片的,本来看起开很明了的,资源连接里有详细的文档,比下面的看的舒服的多.... 为画图工具添加工具栏 Ø  首先认识一下工具栏的操作。

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

哎,其实里面有很多图片的,本来看起开很明了的,资源连接里有详细的文档,比下面的看的舒服的多....

为画图工具添加工具栏

Ø  首先认识一下工具栏的操作。

1.    打开资源->Toolbar

2.    如何查看每个图标的属性?

查看每个图标属性,不是按右键,而是左键双击图片,即可看到,如:

我们双击打开图标,得到如下属性框:

从上图我们可以知道‘打开’图标的资源ID是:ID_FILE_NEW;这个ID号恰好和菜单项中的‘文件’->‘打开’菜单项具有相同的资源ID。

因此,当我们按工具栏的‘打开’图标时,能够执行和按菜单项相同的功能。

3.    如何为工具栏上的图标之间添加一个分隔符?

只需要用鼠标拖动即可。将一个图标拖到远一点的地方即可。

4.    如何删去一个图标?

用鼠标拖动,拖到离开工具栏即可

Ø  为项目的画图工具添加工具栏。

1.    编辑工具栏资源,分别为每一个工具画一个图标,双击图标,设置图标的属性,使其资源ID号,与菜单项中各个工具菜单的资源ID相对应。编辑运行即可。

2.    结束啦!

Ø  新建自己的工具栏

1.    插入,资源,选择Toolbar,点击新建按钮。将资源按钮设置为:IDR_MY_TOOLBAR

2.    编辑几个图标资源,如下图:

并设置相应的属性。将其与画图工具的菜单项的资源ID设为对应一致。

3.    在CMainFrame类增加成员变量:CToolBar m_myToolBar;并在CMainFrame类的OnCreate(LPCREATESTRUCT lpCreateStruct)函数里添加如下代码:

if(!m_myToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_LEFT

           |CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||

           !m_myToolBar.LoadToolBar(IDR_MY_TOOLBAR))

{

           TRACE0("Failedto create toolbar\n");

           return-1;      // fail to create

}

m_myToolBar.EnableDocking(CBRS_ALIGN_ANY);

EnableDocking(CBRS_ALIGN_ANY);

DockControlBar(&m_myToolBar);

4.    编辑运行即可。

在增加成员变量CToolBar  m_myToolBar;后出现运行错误,错误提示是一些内存不可读错误。此时,将Release文件下的所有文件删除即可。

Ø  完善功能:为工具栏的显示与否,添加查看菜单项;

1.    添加‘查看’菜单项,设置为弹出类型。

2.    在‘查看’菜单项下添加‘系统工具栏’和‘画图工具栏’菜单项。分别设置相应的属性,并建立类向导;(注意):建立类向导的时候,选择添加到CMainFrame类。在分别在其消息相应函数中加入如下命令:

void CMainFrame::OnViewSystemBar()

{

//TODO: Add your command handler code here

ShowControlBar(&m_wndToolBar,!m_wndToolBar.IsWindowVisible(),FALSE);

}

 

void CMainFrame::OnViewDrawBar()

{

//TODO: Add your command handler code here

ShowControlBar(&m_myToolBar,!m_myToolBar.IsWindowVisible(),FALSE);

}

3.    以上基本完成了菜单项的功能,一下我们为菜单项的选择添加‘对号’标记。

为‘系统工具栏’和‘画图工具栏’菜单项添加UPDATA_COMMAND_UI消息处理函数。点击右键,建立类向导,

选择UPDATA_COMMAND_UI.类名选择CMainFrame.增加函数,编辑代码:

voidCMainFrame::OnUpdateViewSystemBar(CCmdUI* pCmdUI)

{

// TODO:Add your command update UI handler code here

pCmdUI->SetCheck(m_wndToolBar.IsWindowVisible());

}

 

void CMainFrame::OnUpdateViewDrawBar(CCmdUI*pCmdUI)

{

//TODO: Add your command update UI handler code here

pCmdUI->SetCheck(m_myToolBar.IsWindowVisible());

}

Ø  为画图工具的各个菜单项添加复选提示;

分别点击右键,建立类向导,选择UPDATA_COMMAND_UI.类名选择CXXXXView.增加函数,编辑代码:

void CCVMFCView::OnUpdateMyDrawLine(CCmdUI*pCmdUI)

{

//TODO: Add your command update UI handler code here

pCmdUI->SetCheck(my_draw_flag==1);

}

 

voidCCVMFCView::OnUpdateMyDrawRectangle(CCmdUI* pCmdUI)

{

//TODO: Add your command update UI handler code here

pCmdUI->SetCheck(my_draw_flag==2);

}

 

void CCVMFCView::OnUpdateMyDrawCircle(CCmdUI*pCmdUI)

{

//TODO: Add your command update UI handler code here

pCmdUI->SetCheck(my_draw_flag==3);

}

 

voidCCVMFCView::OnUpdateMyDrawConceal(CCmdUI* pCmdUI)

{

//TODO: Add your command update UI handler code here

pCmdUI->SetCheck(my_draw_flag==0);

}

 

void CCVMFCView::OnUpdateMyDrawCurve(CCmdUI*pCmdUI)

{

//TODO: Add your command update UI handler code here

pCmdUI->SetCheck(my_draw_flag==4);

}

 

voidCCVMFCView::OnUpdateMyDrawEllipse(CCmdUI* pCmdUI)

{

//TODO: Add your command update UI handler code here

pCmdUI->SetCheck(my_draw_flag==5);

}

 

void CCVMFCView::OnUpdateMyDrawText(CCmdUI*pCmdUI)

{

//TODO: Add your command update UI handler code here

pCmdUI->SetCheck(my_draw_flag==6);

}

Ø  为各个工具菜单添加{提示}功能。即:当鼠标移动到菜单项上的时候,程序左下角会提示该菜单项的功能。

方法1:设置菜单项的属性,在属性中的最后一栏,提示栏中输入相应的提示语即可。

方法2:直接打开资源文件:XXXX.rc,用记事本打开;

   添加如下代码:

在BEGIN 和END之间添加菜单项的ID号和对应的字符串即可:

如:

STRINGTABLE DISCARDABLE

BEGIN

   ID_MY_DRAW_LINE         "画一条直线(拖动鼠标)"

   ID_MY_DRAW_CONCEAL      "取消工具"

   ID_MY_DRAW_RECTANGLE    "画矩形(拖动鼠标)"

   ID_MY_DRAW_CIRCLE       "画圆(拖动鼠标)"

   ID_MY_DRAW_ELLIPSE      "画椭圆(拖动鼠标)"

   ID_MY_DRAW_TEXT         "写文字(拖动鼠标)"

   ID_MY_DRAW_CURVE        "画任意曲线(拖动鼠标)"

END


目录
相关文章
|
5月前
|
机器学习/深度学习 人工智能 自然语言处理
OpenCV与AI深度学习之常用AI名词解释学习
AGI:Artificial General Intelligence (通用人工智能):是指具备与人类同等或超越人类的智能,能够表现出正常人类所具有的所有智能行为。又被称为强人工智能。
128 2
|
4月前
|
机器学习/深度学习 XML 计算机视觉
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,它提供了大量的函数和工具,用于处理图像和视频数据。
|
4月前
|
计算机视觉 Python
opencv 处理图像去噪的几种方法学习
OpenCV 提供了多种图像去噪的方法,以下是一些常见的去噪技术以及相应的 Python 代码示例: 均值滤波:使用像素邻域的灰度均值代替该像素的值。
58 0
|
5月前
|
机器学习/深度学习 开发框架 TensorFlow
### 如何系统化学习OpenCV4
### 如何系统化学习OpenCV4
39 0
|
6月前
|
算法 计算机视觉 Python
【OpenCV】-算子(Sobel、Canny、Laplacian)学习
【OpenCV】-算子(Sobel、Canny、Laplacian)学习
141 2
|
24天前
|
计算机视觉
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
这篇文章详细介绍了OpenCV库中的图像二值化函数`cv2.threshold`,包括二值化的概念、常见的阈值类型、函数的参数说明以及通过代码实例展示了如何应用该函数进行图像二值化处理,并展示了运行结果。
215 0
Opencv学习笔记(三):图像二值化函数cv2.threshold函数详解
|
2月前
|
算法 计算机视觉
opencv图像形态学
图像形态学是一种基于数学形态学的图像处理技术,它主要用于分析和修改图像的形状和结构。
45 4
|
2月前
|
存储 计算机视觉
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
本文介绍了使用OpenCV进行图像读取、显示和存储的基本操作,以及如何绘制直线、圆形、矩形和文本等几何图形的方法。
Opencv的基本操作(一)图像的读取显示存储及几何图形的绘制
|
3月前
|
算法 计算机视觉 Python
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
该文章详细介绍了使用Python和OpenCV进行相机标定以获取畸变参数,并提供了修正图像畸变的全部代码,包括生成棋盘图、拍摄标定图像、标定过程和畸变矫正等步骤。
python利用opencv进行相机标定获取参数,并根据畸变参数修正图像附有全部代码(流畅无痛版)
WK
|
3月前
|
编解码 计算机视觉 Python
如何在OpenCV中进行图像转换
在OpenCV中,图像转换涉及颜色空间变换、大小调整及类型转换等操作。常用函数如`cvtColor`可实现BGR到RGB、灰度图或HSV的转换;`resize`则用于调整图像分辨率。此外,通过`astype`或`convertScaleAbs`可改变图像数据类型。对于复杂的几何变换,如仿射或透视变换,则可利用`warpAffine`和`warpPerspective`函数实现。这些技术为图像处理提供了强大的工具。
WK
102 1