VC 实现 bmp 位图的打开
0.准备工作
创建一个 SDI(单文档接口),工程名 Test,“CScrollView”表示滚动显示。
向导自动生成了 5 个类。
可以编译、运行一下。
说明:MFC 框架的核心是文档——视结构,它将数据和对数据的观察相分
离,
① 文档仅处理数据的读写操作,数据保存在文档类的成员变量中,
② 视是用来显示和处理数据的窗口。视图从文档类中(而不是从存储介质
中)将文档中的数据取出来,然后在屏幕上显示文档的数据。
MFC 框架通过命令和消息将他们结合起来。
1.添加头文件和程序(主要用于图像处理)
①头文件 Cdib.h
将头文件的程序拷贝过来
② 程序 CDIP.cpp
将程序拷贝过来
注释:(此时可以运行,并且可打开文件,但是没有结果显示)
2.创建菜单(设计用户界面)
创建两个菜单:
Caption: 打开
ID: ID_FILE_OPEN
Caption: 显示原图 ID: ID_YUANTU
(1)显示原图
右击,出现上面菜单,选择“建立类向导”
选择“Add Function”
“OK”
选择“Edit Code”,进入程序编写代码 void CTestView::OnYuantu()。
(2)打开文件
选择“Add Function”
“OK”
选择“Edit Code”,进入程序编写代码 void CTestView::OnYuantu()。
(3)添加的内容
(a)TestDoc.h 中:
前面
//很重要,添加内容
#include "CDIB.h"
class CTestDoc : public Cdocument
{public:
//*****************
CDib CDibNew;
CString filename;
……
//用于 testDoc.cpp 文件中的变量
(b)TestView.h 中
class CTestView : public CScrollView
{
// Operations
public:
//****************
CString filename;
int state1;
//存储文件名
//按下“图像显示”按钮的标示,
……
3.打开菜单进行响应(编写函数代码)
右键打开菜单,建立类向导,
①在 CTestDoc 类中,进行 COMMAND 响应,生成 OnFileOpen 函数,
②在 CtestView 类中,进行 COMMAND 响应,生成 OnYuanTu 函数
步骤:选择“Edit Code”,进入程序编写代码 void CTestView::OnYuantu()。
代码参考程序
4.显示图像
显示图像当然要在 View 类中,因此图像的显示操作要在该类的 OnDraw 函
数中进行
在该类中,我们要在菜单中点解“图像显示”按钮,然后才显示图像,所以我
们要先响应菜单中“显示原图”命令。因此,右键“显示原图”,建立类向导,在
CTestView 类中进行 COMMAND 响应,生成 OnYuanTu 函数,代码参考程序:
接下来,在点击“显示原图”按钮之后,就要在 OnDraw 函数中显示图像了,
代码参考程序
5.运行程序
运行程序,就可以打开一幅位图并显示
打开文件显示的流程:
1.
2.
3.
4.
用 ClassWizard 建立打开文件的消息处理函数
建立类 CFileDialog 的对象,获取 bmp 文件路径
建立类 CFile 对象,读取 bmp 文件内容,包括判断是否 bmp 文件,
读写图像尺寸、读取图像数据到图像数据数组。
通过 CDC 类从图像数据数组中取图像数据显示。