使用MFC AppWizard创建图像处理应用程序基本框架, 其步骤如下:
(1) 打开VC++6.0,从File菜单中选择New菜单项, 弹出New对话框。
(2) 选择Projects选项卡,从项目类型列表中选择MFC AppWizard(.exe), 在Projects Name文本框中输入项目名称, 这里设为Dip。
(3) 在MFC AppWizard-Step 1对话框中选择MDI用户界面(可同时打开两个或两个以上文档)和中文[中国]。
(4) 在MFC AppWizard-Step 6对话框中将CDipView类的基类改为CScrollView以支持视图滚动。 其他各选项采用默认值。
(5) 单击Finish按钮,再单击OK,MFC AppWizard将自动生成图像处理程序的各个源文件。
(6)将ImageLoad.dll拷贝到Windows\System32目录。 将ImageErros.h、 ImageLoad.h两个头文件及ImageLoad.dll、ImageLoad.lib库文件拷贝到当前工程目录文件里面。
(7)在Fileview-->Dipfiles右键SettingLink(对象/库模块:)ImageLoad.lib
(8)复制DibObject.h和DibObject.cpp到所建的当前工程目录文件里面。
(9)在菜单栏工程添加工程Files添加 DibObject.h,DibObject.cpp,ImageErros.h、 ImageLoad.h
(10)在Dip.cpp中(#endif 下面)添加:
char szFilter[] = "位图文件(*.BMP)|*.BMP|图形交换格式文件(*.GIF)|*.GIF|PCX文件(*.PCX)|*.PCX|TGA文件(*.TGA)|*.TGA|JPEG文件(*.JPG)|*.JPG|标记图像文件(*.TIF)|*.TIF|所有支持图片|*.BMP,*.GIF,*.PCX,*.TGA,*.JPG,*.TIF|所有文件(*.*)|*.*||";
(11)在Dip.cpp中,在// CDipApp中添加菜单命令:ON_COMMAND(ID_FILE_NEW, OnFileNew)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
得到代码如下:
BEGIN_MESSAGE_MAP(CDipApp, CWinApp)
//{{AFX_MSG_MAP(CDipApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
ON_COMMAND(ID_FILE_NEW, OnFileNew)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
// NOTE - the ClassWizard will add and remove mapping macros here.
(12)在Dip.cpp中,在// CDipApp message handlers下为上述菜单命令添加消息映射函数的代码:
void CDipApp::OnFileNew()
{
// TODO: Add your command handler code here
}
void CDipApp::OnFileOpen()
{
static int nIndex = 1;
CFileDialog FileDlg( TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter );
FileDlg.m_ofn.nFilterIndex = (DWORD) nIndex;
if( FileDlg.DoModal() == IDOK )
{
CString PathName = FileDlg.GetPathName();
PathName.MakeUpper();
OpenDocumentFile( PathName );
nIndex = (int) FileDlg.m_ofn.nFilterIndex;
}
}
(13)在Dip.h中添加afx_msg void OnFileNew();
afx_msg void OnFileOpen();
形成以下代码:
// Implementation
//{{AFX_MSG(CDipApp)
afx_msg void OnAppAbout();
afx_msg void OnFileNew();
afx_msg void OnFileOpen();
// NOTE - the ClassWizard will add and remove member functions here.
// DO NOT EDIT what you see in these blocks of generated code !
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
(14)在DipDoc.cpp预处理指令中添加三个预处理指令:
#include "MainFrm.h"
#include "ChildFrm.h"
#include "DipView.h"
(15)在DipDoc.cpp预处理指令后添加外部变量声:extern char szFilter[];(#endif 下面)
(16)在DipDoc.cpp中添加菜单命令:ON_COMMAND(ID_FILE_NEW, OnFileNew)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
得到以下代码:
// CDipDoc
IMPLEMENT_DYNCREATE(CDipDoc, CDocument)
BEGIN_MESSAGE_MAP(CDipDoc, CDocument)
//{{AFX_MSG_MAP(CDipDoc)
ON_COMMAND(ID_FILE_NEW, OnFileNew)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_FILE_SAVE_AS, OnFileSaveAs)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
(17)在DipDoc.cpp中构建构造函数和析构函数
// CDipDoc construction/destructiongetsavefilename
CDipDoc::CDipDoc()
{
m_pDibObject = NULL;
m_bImageLoaded = FALSE;
// TODO: add one-time construction code here
}
CDipDoc::~CDipDoc()
{
if(m_pDibObject != NULL)
{
delete m_pDibObject;
m_pDibObject = NULL;
}
}
(18)在DipDoc.cpp中添加消息映射函数OnFileNew()和OnFileOpen()的指令内容:
// CDipDoc commands
void CDipDoc::OnFileNew()
{
// TODO: Add your command handler code here
}
//打开图像文件
void CDipDoc::OnFileOpen()
{
static int nIndex = 1;
CFileDialog FileDlg( TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter );
FileDlg.m_ofn.nFilterIndex = (DWORD) nIndex;
if( FileDlg.DoModal() == IDOK )
{
CString strPathName = FileDlg.GetPathName();
AfxGetApp()->OpenDocumentFile( strPathName );
nIndex = (int) FileDlg.m_ofn.nFilterIndex;
if( !ReadImgToDoc() )
{
AfxMessageBox("无法载入图像文件!");
return;
}
}
}
//另存图像文件
void CDipDoc::OnFileSaveAs()
{
static int nIndex = 1;
CFileDialog DialogSaveAs( FALSE, NULL, m_pDibObject->GetImageName(),
OFN_HIDEREADONLY, szFilter );
DialogSaveAs.m_ofn.nFilterIndex = (DWORD) nIndex;
if( DialogSaveAs.DoModal() == IDOK )
{
CMainFrame *pMainFrame = ( CMainFrame *)AfxGetMainWnd();
CChildFrame *pChildFrame = ( CChildFrame *)pMainFrame->MDIGetActive();
CDipView *pDipView = ( CDipView * )pChildFrame->GetActiveView();
nIndex = (int) DialogSaveAs.m_ofn.nFilterIndex;
//是JPEG格式图像,判断其是否为24位真彩图像
if( nIndex == 5 )
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论