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

基于VS2010的MFC对话框编程之图片浏览器 本文先给出了基于VS2010的MFC对话框编程之图片浏览器所能实现的功能以及采用的技术,然后展示效果图,做出总结,最后附上源代码。效果图 1 效果图 2 效果图 3 效果图 4
摘要由CSDN通过智能技术生成

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

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

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

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

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

本文源代码下载地址:http://download.csdn.net/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;                  //当前目录下的所支持的图像全路径链表
  • 8
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值