基于VS2010的MFC对话框编程之图片浏览器(附源代码)

VS2010MFC打开图片 + OpenCV环境配置 Windows 7 x64,VS2010 / MFC + OpenCV 2.4.1打开图片显示到Picture控件中。 OpenCV 2.2、OpenCV 2.3同样适用。 工具/原料 · WinXP / Win7 x86 / x64 · OpenCV 2.2 / 2.3 / 2.4 · Visual Studio 2010 · 因Opencv2.2以后的版本就取消了CvvImage这 阅读详情

–>本文先给出了基于VS2010的MFC对话框编程之图片浏览器所能实现的功能以及采用的技术,然后展示效果图,做出总结,最后附上源代码。

–>效果图 1:在最大化状态下的效果图
在最大化状态下的效果图

–>效果图 2:正常状态下的效果图,这时图片铺满窗口
正常状态下的效果图,这时图片铺满窗口

–>效果图 3:对于长宽比不是4:3的图片,将自适应显示
对于长宽比不是4:3的图片,将自适应显示

–>效果图 4:可随意对图片进行拖拽和放缩,且窗口不会产生闪烁
可随意对图片进行拖拽和放缩,且窗口不会产生闪烁

本文源代码下载地址:http://download.youkuaiyun.com/detail/destiny0321/9490494
–>所实现的功能:
1.采用双缓冲技术解决屏幕闪烁问题;
2.浏览过程中实现图片的拖拽;
3.浏览过程中实现图片的放缩;
4.对当前文件下所支持图片格式(BMP、JPG、PNG)进行显示;
5.实现“上一张图片”和“下一张图片”功能;
6.随时进行窗口的最小化、正常、最大化显示的切换;
–>所用到的工具:CImage类
–>图片的放缩和拖拽主要用到了投影矩形的技术,即:投影矩形所在位置和大小就是图像在屏幕上位置和大小,随着投影矩形的移动和放缩,图像也在屏幕上移动和放缩,当然这里的屏幕指的是与窗口等尺寸的内存屏幕(解决闪烁问题)。我们只需要对投影矩形操作,就能实现一些列诸如放缩、拖拽等的功能。
–>不足之处:
1.由于能力有限,目前不能实现“双击图像文件,打开该图像”的功能,只好点击鼠标右键打开图像;
2.放缩功能有待改进;
3.更多功能将在今后逐渐添加进来!

–>现附上源代码:
以下是需要改动的地方,其他文件无需改动

// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件

#pragma once

#ifndef _SECURE_ATL
#define _SECURE_ATL 1
#endif

#ifndef VC_EXTRALEAN
#define VC_EXTRALEAN            // 从 Windows 头中排除极少使用的资料
#endif

#include "targetver.h"

#define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS      // 某些 CString 构造函数将是显式的

// 关闭 MFC 对某些常见但经常可放心忽略的警告消息的隐藏
#define _AFX_ALL_WARNINGS

#include <afxwin.h>         // MFC 核心组件和标准组件
#include <afxext.h>         // MFC 扩展



#ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h>           // MFC 对 Internet Explorer 4 公共控件的支持
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h>             // MFC 对 Windows 公共控件的支持
#endif // _AFX_NO_AFXCMN_SUPPORT

#include <afxcontrolbars.h>     // 功能区和控件条的 MFC 支持

#include <math.h>
#include <afxtempl.h>       //对 CStringList 的支持

//窗口状态条尺寸
#define RECT_WINDOWBAR  (CRect(0,0,70,16))      //窗口状态条尺寸
#define RECT_MINIMIZE       (CRect(0,0,20,16))      //最小化图标尺寸
#define RECT_MAXIMIZE       (CRect(20,0,40,16))     //最大化图标尺寸
#define RECT_CLOSE          (CRect(40,0,70,16))     //关闭窗口图标尺寸
//左右箭头图标尺寸
#define RECT_ARROW_LEFT (CRect(0,0,47,47))      //左箭头图标尺寸
#define RECT_ARROW_RIGHT    (CRect(0,0,47,47))      //右箭头图标尺寸

//客户区背景颜色
#define BKCOLOR             (RGB(40,40,40))

//正常窗口的宽和高
#define NORMAL_WINDOW_WIDTH     800
#define NORMAL_WINDOW_HEIGHT        600

//窗口状态
enum{   WINDOW_STATE_MINIMIZED,     //最小化
            WINDOW_STATE_NORMAL,            //正常
            WINDOW_STATE_MAXIMIZED      //最大化
};

//虚拟按钮类型
enum{   BUTTON_TYPE_WINDOWBAR,      //窗口状态条
            BUTTON_TYPE_CLOSE,              //关闭
            BUTTON_TYPE_MAXIMAIZE,      //最大化
            BUTTON_TYPE_MINIMIZE,           //最小化
            BUTTON_TYPE_NEXT,               //下一张图片
            BUTTON_TYPE_PREVIOUS            //上一张图片
};

//图像尺寸类型
enum
{
    IMG_SIZE_NORMAL,                            //图像宽高均在绘图范围内
    IMG_SIZE_WIDTH_BEYOND,              //仅图像宽度超出绘图范围
    IMG_SIZE_HEIGHT_BEYOND,             //仅图像高度超出绘图范围
    IMG_SIZE_BOTH_BEYOND                    //图像宽高均超出绘图范围
};

#ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif
// PicSeeDlg.h : 头文件
//
#pragma once

// CPicSeeDlg 对话框
class CPicSeeDlg : public CDialogEx
{
// 构造
public:
    CPicSeeDlg(CWnd* pParent = NULL);   // 标准构造函数

// 对话框数据
    enum { IDD = IDD_PICSEE_DIALOG };

    protected:
    virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持


// 实现
protected:
    HICON m_hIcon;

    // 生成的消息映射函数
    virtual BOOL OnInitDialog();
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt);
    afx_msg void OnRButtonUp(UINT nFlags, CPoint point);
    afx_msg BOOL OnEraseBkgnd(CDC* pDC);
    afx_msg void OnOpen();
    DECLARE_MESSAGE_MAP()
private:
    CImage          m_Image;                            //当前图像
    CImage          m_ImgWindowBar;             //窗口状态条图像
    CImage          m_ImgLeftArrow;                 //左箭头图像
    CImage          m_ImgRightArrow;                //右箭头图像

    CRect               m_RectMem;                      //内存绘图区矩形区域
    CRect               m_RectScn;                      //屏幕绘图区区域
    CRect               m_RectImg;                          //图像矩形区域
    CRect               m_RectProj;                     //投影到内存屏幕的矩形区域

    CRect               m_RectWindowBar;                //当前窗口状态条所在矩形区域
    CRect               m_RectClose;                        //当前关闭按钮所在矩形区域
    CRect               m_RectMaximize;                 //当前最大化按钮所在矩形区域
    CRect               m_RectMinimize;                 //当前最小化按钮所在矩形区域
    CRect               m_RectLeftArrow;                    //当前左箭头图标所在区域
    CRect               m_RectRightArrow;               //当前右箭头图标所在区域

    BOOL                m_bLButttonDown;                //鼠标左键状态
    BOOL                m_bPtInLeft;                        //鼠标指针是否在左侧
    BOOL                m_bPtInRight;                       //鼠标指针是否在右侧

    int                 m_WindowState;                  //窗口状态
    int                 m_ImgPos;                           //当前图像所在文件夹中的图像中的位置
    int                 m_ImgSizeType;                  //图像尺寸类型

    CStringList     m_ImgPathList;                  //当前目录下的所支持的图像全路径链表

    CPoint          m_ptOriginal;                       //原点
    CPoint          m_ptTotalOffSet;                    //到原点的总偏移量

    float               m_ZoomScale;                        /
完整vs2010+MFC+Opencv,图片显示过程细节(代码详细解析) vs2010+MFC+Opencv 阅读详情

相关推荐

VS2010&MFC对话框编程(1)——对话框控件简介

1、总结     所有的控件的控件类都是由CWnd类派生,因此控件实际上也是窗口。控件通常是作为对话框的子窗口创建,也可以出现在视图窗口、工具栏和状态栏中。     控件是独立的小部件,在对话框与用户的交互过程中,扮演着十分重要的角色。 2、常用控件及其对用控件类     MFC的控件类封装了控件的功能 控件 功能 对应控件类 静态正文(Static

qq_34655081的博客 1105

C++ MFC打开图片并进行简单算法处理

一、VS2010 新建一个MFC工程,添加两个picture控件和一个按钮控件。 二、添加变量 1、为两个picture控件添加control变量,类型为CStatic,变量名分别为m_picture1和m_picture2. 2、添加保存图片路径和名称变量,CString类型,变量名strFilePath,strFileName 三、添加按钮消息映射函数 双击“打开图片”按钮进入消息映射函数...

qq_37907622的博客 7458

VS2010+Opencv+MFC读取图像和视频显示在Picture控件

1.新建MFC对话框应用程序。 其余选项默认,单击完成,创建出对话框应用程序。删掉原来自带的一些控件,添加picture控件和两个按钮。 2.由于以后的代码会用到CvvImage类,而opencv2.3以后就去掉了对它的支持,这里先介绍添加CvvImage支持的方法,直接能用的可以略过这一步。 如下图添加相应的文件: 这里附上两个文件的源码方便使用。

u012784277的专栏 7287

C++MFC打开、显示、读取图片,简单算法,灰度显示

C++MFC打开、显示、读取图片,简单算法,灰度显示 一、VS2010 新建项目——MFC——MFC应用程序——选择基于对话框——点击完成 List item

weixin_56398660的博客 4702

VS2021的C++ MFC打开图片并进行简单算法处理

VS2010 一,C++ MFC打开图片并进行简单算法处理 (1)改变项目属性 属性/配置属性/常规/使用unicode字符集/使用多字节字符集 1 新建一个MFC工程,添加两个picture控件和一个按钮控件。 在这里可能遇到的问题:两个图片框ID重名,使之后不能打开图片和添加变量。方法:点击图片框,出现选择框,单击属性点击ID,使两个图片框ID不同就行。 二、添加变量 1、为两个picture控件添加control变量,类型为CStatic,变量名分别为m_picture1和m_picture2.

LL2962157235的博客 1590

Vs2010 MFC 简单制作过程中的问题

以前做过一段时间MFC,都忘得差不多了,最近又做了一个小界面。 注意类向导的使用,当自己添加的afx_msg 响应不对时,往往类型。

KUAILE123的专栏 2018

MFC中使用VS2010实现图片控件与滚动条集成

SCROLLINFO结构体的定义如下:UINT fMask;int nMin;int nMax;UINT nPage;int nPos;各成员的作用如下:cbSize: 结构体的大小。fMask: 指定结构体中哪些成员是有效的。nMin和nMax: 滚动条的最小值和最大值。nPage: 页面大小,即一次滚动的单位。nPos: 当前位置。nTrackPos: 用户拖动滚动条时的临时位置。

weixin_28888459的博客 934

计算机图形学作业-基于C++实现MFC程序源码+项目说明.zip

计算机图形学作业-基于C++实现MFC程序源码+项目说明.zip 【资源介绍】 MFC程序实现: 1.基本图形绘制: Bresenham、DDA、改进的Bresenham、系统库函数四种方法画直线, Bresenham画圆,Bresenham画椭圆,绘制矩形,多边形,圆弧。 2.基本图形变换: 平移变换,比例变换,错切变换,对称变换,旋转变换,复合平移变换,复合比例变换,复合旋转变换,相对任意参考点对称,相对任意参考点旋转,相关任意直线对称。 3.自由曲线绘制: 1次 Bezier曲线,2次 Bezier曲线,3次 Bezier曲线,3次B样条曲线,Hermite三次样条曲线,曲线拼接。 4.图形裁剪和图形填充: 多边形裁剪,绘制填充多边形,有效边表填充算法填充多边形。 建议使用VC++6.0打开工作空间运行程序

H3C防火墙旁路部署实战:网关迁移到防火墙后,如何配置DHCP和VLAN间隔离策略?

本文详细介绍了H3C防火墙旁路部署实战,重点讲解网关迁移到防火墙后的DHCP配置和VLAN间隔离策略。通过实际案例和配置示例,帮助网络工程师解决传统核心交换机架构的性能瓶颈和安全管控问题,实现精细化访问控制。

weixin_42549451的博客 416

《全连接到卷积神经网络:图像识别的演变历程》

这篇文章会从传统全连接层面临的困境说起,揭示卷积神经网络(CNN)成为图像识别核心动力的原因,探究其背后蕴含的设计思想与技术创新。但是回顾历史,CNN的出现提醒我们:技术的突破往往是由对自然规律的模仿和重新构建得来的。也许,当机器真的学会“像人一样看世界”的时候,它们的“眼睛”早就超过生物视觉的限制了。例如,用5×5的核处理224×224的输入时,只要25个参数(而不是全连接那种百万级的)。* 局部性:网络的底层只需留意局部的地方(像边缘、纹理这样的地方),不用管那些全局像素之间复杂的关系。

2401_82434295的博客 673

金融科技创新中人工智能的应用:8篇优质论文精选(含2023)

随着科技的飞速发展,金融领域正经历着前所未有的变革。在这个过程中,人工智能技术发挥着越来越重要的作用。为了深入探讨金融人工智能的研究和应用,享享特地整理了几篇金融人工智能方面的论文,大家可以看一下金融人工智能方向最新的研究成果!面向金融领域的大型语言模型本文介绍了BloombergGPT,一个基于广泛金融数据训练的500亿参数模型。基于彭博(Bloomberg)广泛数据来源,建立了一个基于彭博数据的3630亿令牌数据集,并结合了额外3450亿通用数据令牌。

2401_82426425的博客 3210

OpenRA引擎实战:如何从零开始搭建一个经典RTS游戏模组(附资源包)

本文详细介绍了如何利用开源游戏引擎OpenRA从零开始搭建经典RTS游戏模组。内容涵盖开发环境配置、资源管线处理、YAML规则定义、地图编辑与Lua脚本编写等全流程实战指南,并提供了资源包,帮助开发者和爱好者快速创建属于自己的即时战略游戏世界。

silver的专栏 903

ARC学习(6)arc 编译器overlap 地址重叠方式使用

摘要:本文介绍了ARC编译器中使用overlap地址重叠的方法。

张一西的博客 717

蓝牙协议栈详解(3)——BTstack

BTstack是一个轻量级蓝牙协议栈,支持经典蓝牙(BR/EDR)和低功耗蓝牙(BLE)。它采用事件驱动模型,可运行在MCU/CPU上,通过HCI接口与蓝牙控制器通信。协议栈包含完整的蓝牙协议层支持,如L2CAP、RFCOMM、ATT/GATT等,并提供丰富的示例代码。 主要特点包括模块化设计、开源授权、支持多种HCI传输方式(UART/USB)和操作系统适配。开发时需要关注事件驱动编程模型、内存配置优化、HCI传输稳定性等问题。典型应用场景包括SPP串口通信、BLE外设开发等。 使用建议从最小示例开始,逐

嵌入式软硬件叶玄 291

Swin Transformer 与 CNN 结合实现图像分类

Swin Transformer 与 CNN 结合实现图像分类。(含swin transformer 结构讲解,cnn网络搭建,代码)

这里是Mae。 5026

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

上一篇: 基于SIFT特征的图像配准(附Matlab源代码)
下一篇: 《合成孔径雷达成像——算法与实现》之【0】仿真汇报
destiny0321
博客等级 码龄14年 875粉丝 25原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值