打造自己的专业图像工具-Visual C++ 2005图像编程系列【三】

Microsoft Visual C++ 2005运行时安装包详细指南 Microsoft Visual C++运行时库(Runtime Library)是开发者在使用Visual Studio等开发工具开发C++应用程序时不可或缺的一部分。该库提供了执行C++程序所需的基本函数和对象,包括输入输出(I/O)、字符串处理、数据类型转换、内存分配以及异常处理等核心功能。应用程序与操作系统的兼容性是IT行业中一个永恒的话题。确保应用程序能够无缝运行在不同的系统版本之上,对提高用户满意度和应用的市场占有率至关重要。 阅读详情

    在这个图像处理工具软件中,需要实现的工具栏比较多。我想让每个工具栏都在浮动的时候没有关闭按钮,同时在工具箱Toolbar中还可以设置工具栏显示的列数。根据类抽象的原则,我们给所有的工具栏建立一个基类CBaseToolBar,从CToolBar派生。CBaseToolBar需实现的主要功能有:浮动时去掉关闭按钮和设置工具栏的列数。

       从Visual Studio.Net开始,包括Visual C++ 2005,去掉了Visual C++ 6.0中类向导功能。一些概念上也发生了变化。可以包含多个工程的Workspace被Solution替代,称为一个解决方案。

       在Visual C++ 2005添加一个新的类,只需要在解决方案资源管理器中选择相应的工程,右键点击的弹出菜单中选择添加类,就会弹出添加类的向导对话框。如下图:

 

       在出现的类向导对话框中,选择添加MFC类,然后点击添加按钮,最后选择CToolBar做为基类,派生类名输入CBaseToolBar。Visual C++ 2005中的向导功能比Visual C++ 6.0更完善,选择功能更丰富了。如果是想在6.0版本中添加CToolBar的派生类是无法直接选择CToolBar类的,一般采用的方法是先选择CToolBarCtrl,添加完成后再采用手动修改的方法改为CToolBar,而现在可以直接选择CToolBar,省去了很多麻烦。

建立好CToolBar的派生类,我们看看如何实现设置工具栏列数和去掉关闭按钮。设置列数时我们给类添加一个函数:void SetColumns(int nColumn);给某个特定的类添加函数需要先从解决方案资源管理器切换到类视图,这里会显示所有的类。在对应的类名上的右键弹出菜单中选择添加函数或者变量:如下图:

       在随后出现添加函数对话框,提供了非常丰富的功能,直接鼠标点击就可以为函数加上virtual、static、inline等关键字。

       设定好函数的返回类型和名称后,就添加参数。参数名框输入第一个参数的名称,然后点击添加按钮这个参数就被添加到右边的参数列表里。同时在下面的函数签名中可以预览函数的形式。是不是感觉功能比以前更丰富,使用更简单。添加完后在CPP文件中加入函数的实现代码:

void CBaseToolBar::SetColumns(int nColumns)

{

       int nCount = GetToolBarCtrl().GetButtonCount();

       for (int i = 0; i < nCount; i++)

       {

              UINT nStyle = GetButtonStyle(i);

              BOOL bWrap = (((i + 1) % nColumns) == 0);

              if (bWrap)

                     nStyle |= TBBS_WRAPPED;        //或上TBBS_WRAPPED风格就是换行

              else

                     nStyle &= ~TBBS_WRAPPED;

              SetButtonStyle(i, nStyle);

       }

       Invalidate();

       GetParentFrame()->RecalcLayout();

}

       设置列数的功能完成,接着看如何去掉浮动关闭按钮。如果里曾经用向导建立过基于对话框的程序,那么你注意了在对话框的OnInitDialog函数里,有默认生成的将“关于...”菜单项添加到系统菜单中的代码。看出了点什么——其实标题栏上的右键和关闭按钮可以通过系统菜单进行控制。所以我们实现去掉浮点时的参数和关闭按钮也可以从这里开始。首先我们要判断工具栏时浮点还是停靠的,这个可以通过WM_WINDOWPOSCHANGED消息得到通知。

       在Visual C++ 2005给某个类添加消息映射函数,同样在类视图里选择相应的类,然后在右边弹出属性设置界面,如果这个属性设置框没有出现,可以通过工具栏按钮打开界面:

       在属性设置界面中,存在过滤的工具栏,选择第五个的消息事件按钮,下面就列出了此类所有可用的消息,选择对应的消息,在右边的下拉框你添加消息响应函数即可。选择消息的时候最下面还会有消息的一些说明帮助我们理解这个消息。

       在WM_WINDOWPOSCHANGED消息函数里,我们先判断工具栏是否处于停靠状态,如果是浮动状态就去掉系统菜单。这里需要注意的时,虽然在界面上看工具栏时浮动非停靠的,实际上工具栏是停靠在一个CMiniFrameWnd框架里。我们这里所指的系统菜单就是这个CMiniFrameWnd的系统菜单。

void CBaseToolBar::OnWindowPosChanged(WINDOWPOS FAR* lpwndpos)

{

       CToolBar::OnWindowPosChanged(lpwndpos);

       if(IsFloating())

       {

              if(m_pDockBar)     // m_pDockBar指向停靠的窗口对象

              {

                     //如果停靠窗口是 CMiniFrameWnd就去掉系统菜单

                     //在IsFloating函数为FALSE的时候这个m_pDockBa的父窗口就是主框架

                     CWnd* pParent = m_pDockBar->GetParent();

                     if( pParent->IsKindOf(RUNTIME_CLASS(CMiniFrameWnd)))

                            pParent->ModifyStyle(WS_SYSMENU, 0, 0 );

              }

       }

}

        现在我们实现这2个基本的功能。在介绍的过程中,我特别的加入了一些图片,希望给那些对Visual C++ 2005不熟悉的朋友提供一些帮助。在后续的介绍中就不会再做介绍了。




深入理解Microsoft Visual C++ 2005 SP1运行组件 Microsoft Visual C++ 2005 SP1是微软推出的一款针对C++开发的集成开发环境(IDE),它集成了开发工具和库,允许开发者创建高性能的应用程序。SP1代表Service Pack 1,它为Visual C++ 2005添加了若干更新和修补程序,提高了产品的稳定性和安全性。在现代软件开发中,运行时库(Runtime Library)是软件程序运行时依赖的库文件的集合。 阅读详情

相关推荐

RRAM/ Near Memory Computing (NMC) Survey - Reading Notes 0707

Reading Notes of Resistive Random Access Memory – Day 2 Chapter 3 RRAM Characterization and Modeling Overview of RRAM Physical Mechanism A general picture for the filamentary switching mechanism. Forming: 对本征RRAM样本,加电压VformingV_{forming}Vforming​,中间氧化层的O

Blog of Lucky H6 992

Visual C++ 2005使用入门

功能强大的Visual studio 2005 IDE庞大的开发环境和N多的配置设置,学习起来还不是很简单。C++/CLI通过对ISO C++ 标准的纯粹扩展和新语法,不像传统的MS-DOS 控制台程序,所以对于新手,首先应弄明白怎样在Visual studio 2005开发环境下编译常规控制台应用程序及Windows应用程序。 1)win32控制台应用程序文件à新建à项目à Visu

曾梦想仗剑走天涯 4067

PPT高清导出秘籍:如何轻松设置600dpi图片分辨率

本文详细解析了PPT导出图片模糊的根本原因,并提供了通过修改Windows注册表将导出分辨率从默认的96dpi提升至600dpi的完整教程。该方法能显著提升图片清晰度,满足学术出版与高质量印刷需求,文中还包含效果对比、进阶设置及常见问题解答。

a0b1c2d3的专栏 1321

【免费下载】 Visual C++ 2005 Redistributable Package (x86)安装文件下载仓库

Visual C++ 2005 Redistributable Package (x86)安装文件下载仓库 【下载地址】VisualC2005RedistributablePackagex86安装文件下载仓库 探索Visual C++ 2005 Redistributable Package (x86)的世界,这款微软官...

gitblog_06720的博客 1249

基于SolidWorks宏的草图点坐标自动化提取与Excel集成

本文详细介绍了如何利用SolidWorks宏编程实现草图点坐标的自动化提取并与Excel集成,显著提升机械设计效率。通过VBA代码解析与优化,解决了人工记录坐标耗时易错的问题,并扩展了多草图批量处理、数据可视化等高级功能,适用于数控加工、质量检测等场景。

weixin_29251131的博客 464

Tinder养号防封攻略来了:最新Tinder养号流程和运营攻略

今天,我就来给大家分享一下Tinder养号的具体操作,以及针对Tinder账号被封的一些常见问题为大家做个答疑。

m0_67768117的博客 2万+

【免费下载】 Microsoft Visual C++ 2005 SP1 Redistributable Package 下载仓库

Microsoft Visual C++ 2005 SP1 Redistributable Package 下载仓库 【下载地址】MicrosoftVisualC2005SP1RedistributablePackage下载仓库 Microsoft Visual C++ 2005 SP1 Redistributable ...

gitblog_06720的博客 1247

硬件-电源-智能保护:eFuse选型与实战设计全攻略

本文深入解析eFuse在硬件电源设计中的关键作用与实战选型技巧。作为智能保护器件,eFuse能提供毫安级精度的过流保护、多重故障防护和智能恢复功能,比传统保险丝快1000倍以上。文章详细介绍了eFuse的工作原理、五大选型维度和PCB布局要点,帮助工程师有效预防电源异常导致的硬件损坏,适用于AI服务器、工业控制等场景。

weixin_30879169的博客 201

打造自己的专业图像工具-Visual C++ 2005图像编程系列【一】

作者:Lai Yiling返回到目录1.1   Visual C++ 2005集成环境介绍 2005年微软发布了最新的集成开发环境Visual Studio 2005,这又是一款大师级作品,很多新的功能给我们的开发带来了极大的方便。Visual Studio 2005和Visual Studio.Net在IDE(Integration Development Environment)风格上都和

移动开发与培训 369

极化码理论及算法研究6-SCL、CA-SCL及matlab仿真

极化码译码算法5——SCL/CA-SCL译码算法系列目录1、引言2、串行抵消列表(SCL)译码算法2.1、路径度量PM 系列目录 (如要找其他内容,欢迎访问我的主页寻找) #前言 #极化码概述 #极化码定义 #极化码编码 #极化码译码 #5G标准中极化码的编译码概述 #5G标准中极化码的编码 #5G标准中极化码的译码 #总结 1、引言 在上一节中,介绍了经典的SC译码算法的理论原理以及其matlab仿真代码,SC译码算法具有较低的译码复杂度,但是由于每个译码的比特信息都依赖于前面所有的比特信息的译码结果,得

1万+

OpenClaw记忆插件升级实战:从memory-lancedb-pro安装到AgentSkill封装

向量数据库作为现代AI应用的核心基础设施,通过将非结构化数据转换为高维向量并利用相似度检索实现语义理解。其原理基于嵌入模型生成向量表示,结合近似最近邻搜索算法实现高效查询。这项技术为智能体系统提供了长期记忆和上下文感知能力,显著提升了对话连贯性与任务执行效率。在AI智能体开发领域,向量数据库常用于知识库构建、对话历史管理和个性化推荐等场景。本文聚焦OpenClaw框架中memory-lancedb-pro插件的部署实践,针对**插件加载顺序**和**Apache Arrow依赖**两大常见痛点,通过封装成可

weixin_42525482的博客 640

打造自己的专业图像工具-Visual C++ 2005图像编程系列

很久没有认真的写文章了,想通过开发一个完整的图像处理程序来对一些的知识进行总结。也希望自己在此方面更进一步。在我们的图像处理程序中,将实现类似PhotoShop的一些常用图像工具和功能。在此先列出一个类似目录的东西,也是给自己定下的一个计划。希望能激励自己坚持下去,写完这个系列的文章。这里所有的C++都是指非托管的C++。 第一部分:基础知识介绍1.  Visual C++ 200

C++、.NET、WPF、Android 3905

【Google Play 上架】内部 / 封闭 / 开放 测试全解 — “只跑一个就能上架”?不行!

Google Play新规要求个人开发者账号在2023年11月13日后必须通过封闭测试(Closed testing)才能上架应用。封闭测试需要至少12名测试者连续14天保持参与状态,而内部测试和开放测试不能替代这一要求。三类测试轨道各有特点:内部测试用于快速内部验证,封闭测试是上架必经环节,开放测试面向更广泛用户但非必需。上架流程建议先内部测试修复问题,再启动封闭测试满足14天要求,最后申请生产发布。组织账号和早期个人账号可能不受此限制。开发者应提前规划测试人群,确保持续测试周期,并关注Play Cons

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 2802

打造自己的专业图像工具-Visual C++ 2005图像编程系列【二】

作者:Lai Yiling返回到目录1.2     图像处理预备知识 图像处理过程中,有很多需要我们掌握或者注意的方方面面。这里我先简单介绍一些比较基础的、重要的知识。1、 图像处理系统框架一个基本的图像处理系统包含有4个子系统:图像输入系统、图像输出系统(显示)、图像存储系统、图像处理与分析系统。图 1-1 2、 图像的构成图像给我们的第一直观感觉就是一些五颜六色的点,在计算机语言中,这些点

移动开发与培训 278

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

上一篇: 打造自己的专业图像工具-Visual C++ 2005图像编程系列【二】
下一篇: 打造自己的专业图像工具-Visual C++ 2005图像编程系列【五】(下)
techweb
博客等级 码龄19年 226粉丝 3842原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值