MFC读显图像
mfc图像:读显图像文件程序(MFC)
疯狂代码 http://CrazyCoder.cn/ ĵ:http:/CrazyCoder.cn/VC/Article13581.html
功能:实现打开文件过滤、创建滚动视图类、对小图使子窗口按适应图大小、对大图支持子窗口滚动
另存为功能方便图片格式转换
下面是步骤:
VC2005 创建MFC应用->多文档项目Image
在“MFC应用向导”最后步“生成类”页将C*View基类从缺省C...
mfc图像:读显图像文件程序(MFC)
疯狂代码 http://CrazyCoder.cn/ ĵ:http:/CrazyCoder.cn/VC/Article13581.html
功能:实现打开文件过滤、创建滚动视图类、对小图使子窗口按适应图大小、对大图支持子窗口滚动
另存为功能方便图片格式转换
下面是步骤:
VC2005 创建MFC应用->多文档项目Image
在“MFC应用向导”最后步“生成类”页将C*View基类从缺省CView改成CScrollView
ImageDoc.h 添加
#
// 用到CImage类
文档类添加img对象
CImage img;
在CImageDoc::Serialize添加下面代码,装入图像文件
(!img.IsNull) img.Destroy;
HRESULT hr = img.Load(ar.GetFile->GetFilePath);
ASSERT(SUCCEEDED(hr));
为了MDI在开始运行时不自动创建个新文档及其对应子窗口可在应用类C*AppInitInstance语句
// 外壳命令、DDE、打开文件操作命令行
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
和
// 调度在命令行中指定命令如果
// 用 /RegServer、/Register、/Unregserver 或 /Unregister 启动应用则返回 FALSE
(!ProcessShellCommand(cmdInfo))
FALSE;
的间加上语句:
// 不让在启动时创建子框架窗口
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
视图类添加
m_iWidth , m_iHeight; // 图像宽度, 高度
bool m_bInit;
视图类OnDraw 添加如下代码
(!pDoc->img.IsNull)
pDoc->img.BitBlt(pDC->m_hDC, 0, 0); // 显示图像
在OnInitialUpdate中或其他需要地方CScrollView类成员SetScrollSizes来设置滚动范围和参数
OnInitialUpdate添加如下代码
CImageDoc* pDoc = GetDocument;
// 对滚动视图类必须设置滚动尺寸
(pDoc->img.IsNull) SetScrollSizes(MM_TEXT, CSize(100, 100));[Page]
{
m_iWidth = pDoc->img.GetWidth; m_iHeight = pDoc->img.GetHeight;
RECT crect;
GetClientRect(&crect);
SetScrollSizes( MM_TEXT, CSize(m_iWidth, m_iHeight), CSize(crect.right, crect.bottom), CSize(10, 10));
ResizeParentToFit( ); // 按SetScrollSizes参数sizeTotal
来自动调整其窗口大小
m_bInit = true;
}
在用户改变窗口大小时调整滚动页面和行大小
添加OnSize消息响应 加入代码:
// TODO: 在此处添加消息处理代码
CImageDoc* pDoc = GetDocument;
ASSERT_VALID(pDoc);
(!pDoc->img.IsNull)
{
// 创建视图类时会先OnSize后再OnInitialUpdate
// 所以w和h值只能在化完成后才能使用, 所以定义了m_bInit变量
(m_bInit) SetScrollSizes(MM_TEXT, CSize(m_iWidth, m_iHeight), CSize(cx, cy), CSize(10, 10));
}
添加文件过滤器
Image.cpp 注释掉原来ID_FILE_OPEN消息响应 //ON_COMMAND(ID_FILE_OPEN,
&CWinApp::OnFileOpen)
添加自己ID_FILE_OPEN消息响应
void CImageApp::OnFileOpen
{
wchar_t filters = L\"图像文件(*.bmp;*.g;*.jpg;*.png;*.t)|*.bmp;*.g;*.jpg;\\ *.png;*.t|位图文件
(*.bmp)|*.bmp|图形交换格式文件(*.g)|*.g|联合图象专家组\\ [JPEG]文件(*.jpg)|*.jpg|可移植网络图形文件
(*.png)|*.png|标记图像文件格式[TIFF]\\ 文件(*.t)|*.t|所有文件(*.*)|*.*||\";
CFileDialog fileDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, filters);[Page]
(fileDlg.DoModal IDOK) OpenDocumentFile(fileDlg.GetPathName);
}
在视图类添加另存为(ID_FILE_SAVE_AS)消息响应
void CImageView::OnFileSaveAs
{
CImageDoc* pDoc = GetDocument;
wchar_t filters = L\"(*.bmp)|*.bmp|(*.g)|*.g|\\
(*.jpg)|*.jpg|(*.png)|*.png|\\
(*.t)|*.t|所有文件(*.*)|*.*||\";
CFileDialog fileDlg(TRUE, L\"jpg\", L\"zhuzhu.jpg\", OFN_HIDEREADONLY, filters);
(fileDlg.DoModal IDOK)
pDoc->img.Save(fileDlg.GetPathName); // 保存到文件
}
2009-2-12 5:07:46
疯狂代码 http://CrazyCoder.cn/
本文档为【MFC读显图像】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。