MFC显示图片和写入文件

简单记录下。

// MFC_pictureDlg.h : 头文件
//

#pragma once

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

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

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

// 实现
protected:
    HICON m_hIcon;

    // 生成的消息映射函数
    virtual BOOL OnInitDialog();
    afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
    afx_msg void OnPaint();
    afx_msg HCURSOR OnQueryDragIcon();
    DECLARE_MESSAGE_MAP()

public:
    afx_msg void OnBnClickedButton1();
    CString Str_path;

    afx_msg void OnBnClickedButton2();
};
// MFC_pictureDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "MFC_picture.h"
#include "MFC_pictureDlg.h"
#include "afxdialogex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialogEx
{
public:
    CAboutDlg();

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

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

// 实现
protected:
    DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()

// CMFC_pictureDlg 对话框

CMFC_pictureDlg::CMFC_pictureDlg(CWnd* pParent /*=NULL*/)
    : CDialogEx(CMFC_pictureDlg::IDD, pParent)
    , Str_path(_T(""))
{
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CMFC_pictureDlg::DoDataExchange(CDataExchange* pDX)
{
    CDialogEx::DoDataExchange(pDX);
    DDX_Text(pDX, IDC_EDIT1, Str_path);
}

BEGIN_MESSAGE_MAP(CMFC_pictureDlg, CDialogEx)
    ON_WM_SYSCOMMAND()
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_BUTTON1, &CMFC_pictureDlg::OnBnClickedButton1)
    ON_BN_CLICKED(IDC_BUTTON2, &CMFC_pictureDlg::OnBnClickedButton2)
END_MESSAGE_MAP()

// CMFC_pictureDlg 消息处理程序

BOOL CMFC_pictureDlg::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    // 将“关于...”菜单项添加到系统菜单中。

    // IDM_ABOUTBOX 必须在系统命令范围内。
    ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
    ASSERT(IDM_ABOUTBOX < 0xF000);

    CMenu* pSysMenu = GetSystemMenu(FALSE);
    if (pSysMenu != NULL)
    {
        BOOL bNameValid;
        CString strAboutMenu;
        bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
        ASSERT(bNameValid);
        if (!strAboutMenu.IsEmpty())
        {
            pSysMenu->AppendMenu(MF_SEPARATOR);
            pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
        }
    }

    // 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
    //  执行此操作
    SetIcon(m_hIcon, TRUE);            // 设置大图标
    SetIcon(m_hIcon, FALSE);        // 设置小图标

    // TODO:  在此添加额外的初始化代码///////////////////////////////////////////////////////////////////////

    return TRUE;  // 除非将焦点设置到控件,否则返回 TRUE
}

void CMFC_pictureDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
    if ((nID & 0xFFF0) == IDM_ABOUTBOX)
    {
        CAboutDlg dlgAbout;
        dlgAbout.DoModal();
    }
    else
    {
        CDialogEx::OnSysCommand(nID, lParam);
    }
}

// 如果向对话框添加最小化按钮,则需要下面的代码
//  来绘制该图标。  对于使用文档/视图模型的 MFC 应用程序,
//  这将由框架自动完成。

void CMFC_pictureDlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this); // 用于绘制的设备上下文

        SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

        // 使图标在工作区矩形中居中
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;

        // 绘制图标
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialogEx::OnPaint();
    }

}

//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CMFC_pictureDlg::OnQueryDragIcon()
{
    return static_cast<HCURSOR>(m_hIcon);
}

void CMFC_pictureDlg::OnBnClickedButton1()
{
    // TODO:  在此添加控件通知处理程序代码

    LPCTSTR pFileName = _T("My_log.txt");
    char* write_data = "hello world !\r\n";

    CFile file; 

    file.Open(pFileName, CFile::modeCreate | CFile::modeNoTruncate | CFile::modeWrite);
    file.SeekToEnd();

    file.Write(write_data, strlen(write_data));
    file.Flush();

    file.Close();

}

void CMFC_pictureDlg::OnBnClickedButton2()
{
    // TODO:  在此添加控件通知处理程序代码

    CFileDialog FileDlg(TRUE, NULL, _T("E:\\huangtao7\\picture\\"),
        OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
        _T("image files(*.jpeg; *.jpg; *.bmp) |*.jpeg; *.jpg; *.bmp | All Files (*.*) |*.*||"),
        NULL, 0, TRUE);

    if (FileDlg.DoModal() == IDOK)
    {
        Str_path = FileDlg.GetPathName();
        SetDlgItemText(IDC_EDIT1, Str_path);
    }
    else
    {
        Str_path = _T("");
        MessageBox(_T("打开失败"), NULL, MB_OK);
    }

    if (Str_path != _T(""))
    {
        CImage  image;
        CRect   rect;

        image.Load(Str_path);

        int cx = image.GetWidth();
        int cy = image.GetHeight();

        // 控件大小
        GetDlgItem(IDC_STATIC)->GetWindowRect(&rect);

        // 将客户区选中到控件表示的矩形区域内
        ScreenToClient(&rect);

        // 窗口移动到控件表示的区域,窗口大小将根据图片大小改变
        GetDlgItem(IDC_STATIC)->MoveWindow(rect.left, rect.top, cx, cy, TRUE);

        CWnd *pWnd = GetDlgItem(IDC_STATIC);
        pWnd->GetClientRect(&rect);

        CDC *pDc = pWnd->GetDC();

        image.Draw(pDc->m_hDC, rect);

        ReleaseDC(pDc);
    }

}
时间: 2024-10-03 16:50:48

MFC显示图片和写入文件的相关文章

OpenCV系列1-简单高效:MFC显示图片、播放视频

先看图: 拉伸显示 居中显示 原始大小显示 显示视频: 实现图片显示,只需要两句话: 只需要包含一个h文件: 调整显示方式: 下面是CvImgCtrl.h的源代码,复制保存下来即可用,或者也可以下载demo,不要积分 控件采用的是双缓冲绘图,显示效率很高,不会闪烁,支持视频.图片的显示 /************************************************************************/ /* OpenCV MFC图像显示控件 v1.0 /* 该控件

opencv与mfc显示图片操作,MFC的鼠标响应在opencv图片上失效,opencv滚轮事件没有响应问题描述解决。

原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11588758.html 用mfc 与OPENCV编写成. 出了很多冲突异常事件导致鼠标操作没有响应 当opencv窗口与mfc控件绑定时,可以认为opencv绑定区域覆盖在mfc 控件上,此时mfc本身的鼠标响应在此区域失效,只能调用opencv的鼠标响应事件. 而当你调用opencv的鼠标滚轮事件时候又会没有反应,此时是因为mfc的鼠标滚轮事件优先级别更好 ,只能在这里用mfc的鼠标滚轮响

OpenCV 2.2版本以上显示图片到 MFC 的 Picture Control 控件中

OpenCV 2.2 以及后面的版本取消掉了 CvvImage.h 和CvvImage.cpp 两个文件,直接导致了苦逼的程序员无法调用里面的显示函数来将图片显示到 MFC 的 Picture Control 控件中.为此,网上很多人表示只要将那两个文件人为的提取出来然后放到工程里面就解决问题了,也提供了两个文件的下载,但是这麻烦不说,还会导致一些奇奇怪怪的报错(至少本人是这样的,很崩溃!).所以在了解了一些gdi绘图之后结合网上的代码写了如下的函数,只需调用就可以将OpenCV的图片显示在上面

OpenCV 2.2版本号以上显示图片到 MFC 的 Picture Control 控件中

OpenCV 2.2 以及后面的版本号取消掉了 CvvImage.h 和CvvImage.cpp 两个文件,直接导致了苦逼的程序猿无法调用里面的显示函数来将图片显示到 MFC 的 Picture Control 控件中.为此,网上非常多人表示仅仅要将那两个文件人为的提取出来然后放到project里面就解决这个问题了,也提供了两个文件的下载,可是这麻烦不说.还会导致一些奇奇怪怪的报错(至少本人是这种,非常崩溃!).所以在了解了一些gdi画图之后结合网上的代码写了例如以下的函数,仅仅需调用就能够将O

C++开发人脸性别识别教程(9)——搭建MFC框架之显示图片

在之前的博客中我们已经实现读取用户选定的文件夹,并将其路径保存在相应的变量中,在这篇博文中我们将介绍如何借助CvvImage类将图片显示在picture控件中,并自动读取文件夹下的其他图片. 一.添加“下一张”按钮 由于我们需要读取文件夹下的所有图像文件,而非某一张文件,因此有必要添加一个按钮来进行控制,具体功能就是:每单击一次这个按钮,程序就会自动读取下一张图片并显示在界面上.由于之前已经详细介绍了MFC中添加Button控件的方式,这里不再赘述.添加一个按钮,命名为“下一张”,将ID更改为I

MFC显示GIF动画图片

本帖则将讨论如何在MFC的对话框里显示GIF动画图片.一些关于传统控件的美化方法正在研究当中会陆续发帖的. 这是本帖用到的一个VS2008例程.  附件  GifPicture.rar (138.1 KB) 上传时间:2009-11-25 16:15下载次数:1173 一.显示GIF图片控件类的介绍:   无论是在VC6.0还是在VS2008中,都没有控件能显示GIF动画图片.能显示一些静态图片的只是Picture控件.本例程用到的GIF动画显示控件类是PictureEX.其定义文件是Pictu

opencv:图像的读取,显示,写入文件

#include <opencv2/opencv.hpp> #include <iostream> using namespace cv; using namespace std; int main(int argc, char** argv) { // 图像内存对象,在C++中是以Mat对象形式保存的 Mat img = imread("f:/temp/images/lena.jpg"); /* imread的默认选项:IMREAD_COLOR,默认会将图像加

推荐一个Xcode插件: KSImageNamed (自动补全图片文件名称, 并显示图片大小)

http://www.csdn.net/article/2014-05-04/2819586-the-best-xcode-plugins 5. KSImageNamed KSImageNamed是一款能够帮助开发者在Xcode中自动补全图片文件名称的插件,其开发者Kent Sutherland来自美国波士顿.KSImageNamed支持NSImage和UIImage,当开发者写到"[UIImage imaged:"时,便会自动将项目中的图片名称提示出来.此外,KSImageNamed

安卓 SD卡写入文件后不能立即显示被写入的文件解决方法

每次通过输出流往SD卡写入文件,连接上电脑,用MTP的方式模拟一个移动磁盘,打开磁盘却没有这样一个文件,而通过adb的方式查看就有,造成这个现象的原因是,每次写入之后,MTP的数据库并没有更新,因为更新一次MTP数据库需要的带价比较大,所以只有在重启,挂载和用户手动发送Intent出发,故存入文件后需要手动发送Intent广播,出发一下MTP数据库的更新. /** * 出发扫描 mtp下的文件,在保存文件到 sd卡下后,不能显示,故这里触发一下扫描机制,让手机连上电脑后,就可以读出文件了 * @