www.pudn.com > 32位 DIB 图形类.zip > app.cpp
#include "stdafx.h"
#include "app.h"
#include "MainFrm.h"
#include "ChildFrm.h"
#include "Doc.h"
#include "View.h"
#include "NewImageDlg.h"
#include "combinedlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
CApp* GetApp()
{
return (CApp*) AfxGetApp();
}
CMainFrame* GetMainFrame()
{
return (CMainFrame*) AfxGetMainWnd();
}
BEGIN_MESSAGE_MAP(CApp, CWinApp)
//{{AFX_MSG_MAP(CApp)
ON_COMMAND(ID_APP_ABOUT, OnAppAbout)
ON_COMMAND(ID_EDIT_EMPTY, OnEditEmpty)
ON_UPDATE_COMMAND_UI(ID_EDIT_EMPTY, OnUpdateEditEmpty)
ON_COMMAND(ID_EDIT_PASTE_IMAGE, OnEditPasteImage)
ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE_IMAGE, OnUpdateEditPasteImage)
ON_COMMAND(ID_FILE_NEW, OnFileNew)
ON_COMMAND(ID_WINDOW_CLOSEALL, OnWindowCloseall)
ON_UPDATE_COMMAND_UI(ID_WINDOW_CLOSEALL, OnUpdateWindowCloseall)
ON_COMMAND(ID_CHANNEL_COMBINE, OnChannelCombine)
ON_UPDATE_COMMAND_UI(ID_CHANNEL_COMBINE, OnUpdateChannelCombine)
//}}AFX_MSG_MAP
ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND(ID_FILE_PRINT_SETUP, CWinApp::OnFilePrintSetup)
END_MESSAGE_MAP()
CApp::CApp()
{
m_bNewFromPaste = FALSE;
m_nNewWidth = 320;
m_nNewHeight = 200;
}
CApp theApp;
BOOL CApp::InitInstance()
{
SetRegistryKey(_T("PJ Naughter"));
Enable3dControls();
LoadStdProfileSettings();
CMultiDocTemplate* pDocTemplate;
pDocTemplate = new CMultiDocTemplate(
IDR_DIBTESTYPE,
RUNTIME_CLASS(CDibtestDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CDibtestView));
AddDocTemplate(pDocTemplate);
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame->LoadFrame(IDR_MAINFRAME))
return FALSE;
m_pMainWnd = pMainFrame;
m_pMainWnd->DragAcceptFiles();
CCommandLineInfo cmdInfo;
ParseCommandLine(cmdInfo);
if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew)
cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
if (!ProcessShellCommand(cmdInfo))
return FALSE;
pMainFrame->ShowWindow(m_nCmdShow);
pMainFrame->UpdateWindow();
return TRUE;
}
void CApp::OnAppAbout()
{
CAboutDlg aboutDlg;
aboutDlg.DoModal();
}
void CApp::OnEditPasteImage()
{
POSITION posTemplate = GetFirstDocTemplatePosition();
CDocTemplate* pDocTemplate = GetNextDocTemplate(posTemplate);
m_bNewFromPaste = TRUE;
CDibtestDoc* pDocument = (CDibtestDoc*) pDocTemplate->OpenDocumentFile(NULL);
pDocument->m_Dib.PasteFromClipboard();
pDocument->UpdateHistogramData();
pDocument->SetModifiedFlag(TRUE);
pDocument->UpdateAllViews(NULL);
m_bNewFromPaste = FALSE;
}
void CApp::OnUpdateEditPasteImage(CCmdUI* pCmdUI)
{
pCmdUI->Enable(CDibImage::PasteAvailable());
}
void CApp::OnEditEmpty()
{
if (OpenClipboard(NULL))
{
if (EmptyClipboard())
CloseClipboard();
}
}
void CApp::OnUpdateEditEmpty(CCmdUI* pCmdUI)
{
pCmdUI->Enable(CountClipboardFormats() != 0);
}
void CApp::OnFileNew()
{
CNewImageDlg dlg;
dlg.m_nWidth = m_nNewWidth;
dlg.m_nHeight = m_nNewHeight;
if (dlg.DoModal() == IDOK)
{
m_nNewWidth = dlg.m_nWidth;
m_nNewHeight = dlg.m_nHeight;
CWinApp::OnFileNew();
}
}
void CApp::OnWindowCloseall()
{
POSITION posTemplate = GetFirstDocTemplatePosition();
while (posTemplate != NULL)
{
CDocTemplate* pTemplate = GetNextDocTemplate(posTemplate);
ASSERT(pTemplate->IsKindOf(RUNTIME_CLASS(CDocTemplate)));
POSITION posDoc = pTemplate->GetFirstDocPosition();
while (posDoc != NULL)
{
CDocument* pDoc = pTemplate->GetNextDoc(posDoc);
if (!pDoc->SaveModified())
return; // user aborted
pDoc->OnCloseDocument();
}
}
}
int CApp::NumberOfOpenDocuments() const
{
int nOpenDocuments = 0;
POSITION posTemplate = GetFirstDocTemplatePosition();
while (posTemplate != NULL)
{
CDocTemplate* pTemplate = GetNextDocTemplate(posTemplate);
ASSERT(pTemplate->IsKindOf(RUNTIME_CLASS(CDocTemplate)));
POSITION posDoc = pTemplate->GetFirstDocPosition();
while (posDoc != NULL)
{
CDocument* pDoc = pTemplate->GetNextDoc(posDoc);
++nOpenDocuments;
}
}
return nOpenDocuments;
}
void CApp::OnUpdateWindowCloseall(CCmdUI* pCmdUI)
{
pCmdUI->Enable(NumberOfOpenDocuments());
}
void CApp::OnChannelCombine()
{
CCombineDlg dlg;
if (dlg.DoModal() == IDOK)
{
CDibImage dib;
if (dib.CombineChannels(*dlg.GetRedImage(), *dlg.GetGreenImage(), *dlg.GetBlueImage()))
{
POSITION posTemplate = GetFirstDocTemplatePosition();
CDocTemplate* pDocTemplate = GetNextDocTemplate(posTemplate);
m_bNewFromPaste = TRUE;
CDibtestDoc* pDocument = (CDibtestDoc*) pDocTemplate->OpenDocumentFile(NULL);
pDocument->m_Dib = dib;
pDocument->UpdateHistogramData();
pDocument->SetModifiedFlag(TRUE);
pDocument->UpdateAllViews(NULL);
m_bNewFromPaste = FALSE;
}
else
AfxMessageBox(IDS_FAIL_COMBINE);
}
}
void CApp::OnUpdateChannelCombine(CCmdUI* pCmdUI)
{
pCmdUI->Enable(NumberOfOpenDocuments());
}
void CApp::OnFileOpen()
{
//Bring up the File Open dialog with the customized filter string
CString sFilters;
#ifndef DIBIMAGE_NO_JPEG
sFilters.LoadString(IDS_EXTENSIONS);
#else
sFilters.LoadString(IDS_EXTENSIONS2);
#endif
CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, sFilters, NULL);
if (dlgFile.DoModal() == IDOK)
AfxGetApp()->OpenDocumentFile(dlgFile.GetPathName());
}
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
//{{AFX_DATA_INIT(CAboutDlg)
//}}AFX_DATA_INIT
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CAboutDlg)
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
//{{AFX_MSG_MAP(CAboutDlg)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()