使用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按钮,再单击OKMFC AppWizard将自动生成图像处理程序的各个源文件。
6)将ImageLoad.dll拷贝到WindowsSystem32目录。 ImageErros.h ImageLoad.h两个头文件及ImageLoad.dllImageLoad.lib库文件拷贝到当前工程目录文件里面。
7)在Fileview-->Dipfiles右键SettingLink(对象/库模块:)ImageLoad.lib
8)复制DibObject.hDibObject.cpp到所建的当前工程目录文件里面。
9)在菜单栏工程添加工程Files添加 DibObject.h,DibObject.cppImageErros.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小时内删除。