源代码: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

1.1.7-学习Opencv与MFC混合编程之---为画图工具添加工具栏的更多相关文章

  1. 1.1-学习Opencv与MFC混合编程之---利用画图函数,生成视频,并写入视频文件

    源代码地址:http://download.csdn.net/detail/nuptboyzhb/3961674 写视频文件 Ø 新建菜单项,Learning OpenCV——> OpenCVr ...

  2. 1.0.x-学习Opencv与MFC混合编程之---视频运动检测

    源代码地址: http://download.csdn.net/detail/nuptboyzhb/3961668 版本1.0.x新增内容 视频运动检测 Ø 新建菜单项,Learning OpenCV ...

  3. 1.0.3-学习Opencv与MFC混合编程之---打开本地摄像头

    源代码:http://download.csdn.net/detail/nuptboyzhb/3961643 版本1.0.3新增内容 打开摄像头 Ø 新建菜单项,Learning OpenCV——&g ...

  4. 1.0.2-学习Opencv与MFC混合编程之---为播放AVI视频添加滑动条

    源代码地址:http://download.csdn.net/detail/nuptboyzhb/3961642 版本1.0.2新增内容 Ø  全局变量和函数的添加: 在CVMFCview.cpp文件 ...

  5. 1.0.1-学习Opencv与MFC混合编程之---播放AVI视频

    资源源代码:http://download.csdn.net/detail/nuptboyzhb/3961639 版本1.0.1新增内容 Ø  新建菜单项,Learning OpenCV——> ...

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

    源代码:http://download.csdn.net/detail/nuptboyzhb/3961696 输入文字 l 对话框 1.    插入,资源,选择对话框资源 2.    编辑对话框如下: ...

  7. 1.1.6-学习Opencv与MFC混合编程之---播放WAV音乐和 alpha融合功能

    源代码:http://download.csdn.net/detail/nuptboyzhb/3961698 Alpha融合菜单项 1.      增加alpha融合菜单项,修改相应的属性,建立类向导 ...

  8. 1.1.4-学习Opencv与MFC混合编程之---画图工具 画椭圆

    源代码地址:http://download.csdn.net/detail/nuptboyzhb/3961690 1.    增加‘椭圆’菜单项,设置属性,添加类向导: 2.    编辑消息处理函数, ...

  9. 1.1.3-学习Opencv与MFC混合编程之---画图工具 通过对话框进行工具的参数设置 画曲线 绘图校正

    源代码:http://download.csdn.net/detail/nuptboyzhb/3961688 l 对话框 1.“插入”->“资源”->“对话框” 2.对话框属性如下: 双击 ...

随机推荐

  1. 《Java并发编程实战》第二章 线程安全性 读书笔记

    一.什么是线程安全性 编写线程安全的代码 核心在于要对状态訪问操作进行管理. 共享,可变的状态的訪问 - 前者表示多个线程訪问, 后者声明周期内发生改变. 线程安全性 核心概念是正确性.某个类的行为与 ...

  2. 【转】Android数字证书

    Android数字证书的作用是非常重要的.Android操作系统每一个应用程序的安装都需要经过这一数字证书的签名. Android手机操作系统作为一款比较流行的开源系统在手机领域占据着举足轻重的地位. ...

  3. 抽象工厂模式和autofac的使用总结

    抽象工厂模式和依赖注入的使用目的都是降低对象直接依赖耦合关系,应该说依赖注入是抽象工厂模式的一种升华,功能更强大. 说到抽象工厂的模式,一般都要先解释下简单工厂,简单工厂就是将对象的实例化抽取出来形成 ...

  4. 针对苹果最新审核要求 为应用兼容IPv6

    本文授权转载,作者:我不是段誉(简书) 在WWDC2 015上苹果宣布iOS 9将支持纯IPv6的网络服务.2016年初开始所有提交到App Store的应用必须支持IPv6.而今年5月初,苹果宣布6 ...

  5. [Swust OJ 1094]--中位数(巧用set,堆排序)

    题目链接:http://acm.swust.edu.cn/problem/1094/ Time limit(ms): 1000 Memory limit(kb): 32768   中位数(又称中值,英 ...

  6. MySQL无法使用、导入中文数据乱码

    1,新版的MySQL无法使用 装的新版的mysql-installer-community-5.6.14.0.msi,无法使用(无法导入地图数据,卸载重装mysql_5.6.13.msi,无法启动). ...

  7. ContentProvider中的数据库的生成时机以及ContentResolver的insert()方法总结

    经过几天的总结,以及结合一些代码的实际测试,终于算是明白了ContentProvider中的数据的生成时机了. 目录结构: MainActivity.java package com.wyl.cont ...

  8. in window js 未定义和undifined的区别

    浏览器报错:未定义和undifined不是同一概念,前者是没有申明,后者是没有赋值. 1: <html>     <body>         <script>   ...

  9. unix网络编程之listen()详解

    转自于:http://blog.csdn.net/ordeder/article/details/21551567 Unix网络编程描述如下: #include <sys/socket.h> ...

  10. HDOJ 2680 Dijkstra

    题目大意: 给你一个有向图,一个起点集合,一个终点,求最短路.... 解题思路: 1.自己多加一个超级源点,把起点集合连接到超级源点上,然后将起点与超级源点的集合的路径长度设为0,这样就称为一个n+1 ...