⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dibprocessview.cpp

📁 压缩包原名为“MFC图形图像处理”
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// DibProcessView.cpp : implementation of the CDibProcessView class
//

#include "stdafx.h"
#include "DibProcess.h"
#include "MainFrm.h"
#include "DibProcessDoc.h"
#include "DibProcessView.h"
#include "ScaleDlg.h"
#include "RotateAngle.h"
#include "GrayDlg.h"
#include "ColorBitsDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CDibProcessView

IMPLEMENT_DYNCREATE(CDibProcessView, CScrollView)

BEGIN_MESSAGE_MAP(CDibProcessView, CScrollView)
	//{{AFX_MSG_MAP(CDibProcessView)
	ON_COMMAND(IDM_HBLIND, OnHblind)
	ON_UPDATE_COMMAND_UI(IDM_HBLIND, OnUpdateHblind)
	ON_COMMAND(IDM_HCROSSMOVE, OnHcrossmove)
	ON_UPDATE_COMMAND_UI(IDM_HCROSSMOVE, OnUpdateHcrossmove)
	ON_COMMAND(IDM_HSPLITMOVE, OnHsplitmove)
	ON_UPDATE_COMMAND_UI(IDM_HSPLITMOVE, OnUpdateHsplitmove)
	ON_COMMAND(IDM_HSPLITSCAN, OnHsplitscan)
	ON_UPDATE_COMMAND_UI(IDM_HSPLITSCAN, OnUpdateHsplitscan)
	ON_COMMAND(IDM_MOSAIC, OnMosaic)
	ON_UPDATE_COMMAND_UI(IDM_MOSAIC, OnUpdateMosaic)
	ON_COMMAND(IDM_MOVEDOWN, OnMovedown)
	ON_UPDATE_COMMAND_UI(IDM_MOVEDOWN, OnUpdateMovedown)
	ON_COMMAND(IDM_MOVELEFT, OnMoveleft)
	ON_UPDATE_COMMAND_UI(IDM_MOVELEFT, OnUpdateMoveleft)
	ON_COMMAND(IDM_MOVERIGHT, OnMoveright)
	ON_UPDATE_COMMAND_UI(IDM_MOVERIGHT, OnUpdateMoveright)
	ON_COMMAND(IDM_MOVEUP, OnMoveup)
	ON_UPDATE_COMMAND_UI(IDM_MOVEUP, OnUpdateMoveup)
	ON_COMMAND(IDM_SCANDOWN, OnScandown)
	ON_UPDATE_COMMAND_UI(IDM_SCANDOWN, OnUpdateScandown)
	ON_COMMAND(IDM_SCANLEFT, OnScanleft)
	ON_UPDATE_COMMAND_UI(IDM_SCANLEFT, OnUpdateScanleft)
	ON_COMMAND(IDM_SCANRIGHT, OnScanright)
	ON_UPDATE_COMMAND_UI(IDM_SCANRIGHT, OnUpdateScanright)
	ON_COMMAND(IDM_SCANUP, OnScanup)
	ON_UPDATE_COMMAND_UI(IDM_SCANUP, OnUpdateScanup)
	ON_COMMAND(IDM_VBLIND, OnVblind)
	ON_UPDATE_COMMAND_UI(IDM_VBLIND, OnUpdateVblind)
	ON_COMMAND(IDM_VCROSSMOVE, OnVcrossmove)
	ON_UPDATE_COMMAND_UI(IDM_VCROSSMOVE, OnUpdateVcrossmove)
	ON_COMMAND(IDM_VRASTER, OnVraster)
	ON_COMMAND(IDM_VSPLITMOVE, OnVsplitmove)
	ON_UPDATE_COMMAND_UI(IDM_VSPLITMOVE, OnUpdateVsplitmove)
	ON_COMMAND(IDM_VSPLITSCAN, OnVsplitscan)
	ON_UPDATE_COMMAND_UI(IDM_VSPLITSCAN, OnUpdateVsplitscan)
	ON_COMMAND(IDM_HRASTER, OnHraster)
	ON_UPDATE_COMMAND_UI(IDM_HRASTER, OnUpdateHraster)
	ON_COMMAND(IDM_FADEIN, OnFadein)
	ON_UPDATE_COMMAND_UI(IDM_FADEIN, OnUpdateFadein)
	ON_UPDATE_COMMAND_UI(IDM_VRASTER, OnUpdateVraster)
	ON_COMMAND(IDM_HMIRROR, OnHmirror)
	ON_UPDATE_COMMAND_UI(IDM_HMIRROR, OnUpdateHmirror)
	ON_COMMAND(IDM_ROTATE, OnRotate)
	ON_UPDATE_COMMAND_UI(IDM_ROTATE, OnUpdateRotate)
	ON_COMMAND(IDM_ROTATE_ANGLE, OnRotateAngle)
	ON_UPDATE_COMMAND_UI(IDM_ROTATE_ANGLE, OnUpdateRotateAngle)
	ON_COMMAND(IDM_ROTATE180, OnRotate180)
	ON_UPDATE_COMMAND_UI(IDM_ROTATE180, OnUpdateRotate180)
	ON_COMMAND(IDM_ROTATE270, OnRotate270)
	ON_UPDATE_COMMAND_UI(IDM_ROTATE270, OnUpdateRotate270)
	ON_COMMAND(IDM_SCALE, OnScale)
	ON_UPDATE_COMMAND_UI(IDM_SCALE, OnUpdateScale)
	ON_COMMAND(IDM_VMIRROR, OnVmirror)
	ON_UPDATE_COMMAND_UI(IDM_VMIRROR, OnUpdateVmirror)
	ON_COMMAND(IDM_COLORBITS, OnColorbits)
	ON_UPDATE_COMMAND_UI(IDM_COLORBITS, OnUpdateColorbits)
	ON_COMMAND(IDM_GRAY, OnGray)
	ON_UPDATE_COMMAND_UI(IDM_GRAY, OnUpdateGray)
	ON_COMMAND(IDM_GETPIXEL, OnGetpixel)
	ON_COMMAND(IDM_EXPOSURE, OnExposure)
	ON_UPDATE_COMMAND_UI(IDM_EXPOSURE, OnUpdateExposure)
	ON_COMMAND(IDM_REVERSE, OnReverse)
	ON_UPDATE_COMMAND_UI(IDM_REVERSE, OnUpdateReverse)
	ON_COMMAND(IDM_SPREAD, OnSpread)
	ON_UPDATE_COMMAND_UI(IDM_SPREAD, OnUpdateSpread)
	ON_COMMAND(IDM_EMBOSS, OnEmboss)
	ON_UPDATE_COMMAND_UI(IDM_EMBOSS, OnUpdateEmboss)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
	ON_MESSAGE(WM_REALIZEPAL, OnRealizePal)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDibProcessView construction/destruction

CDibProcessView::CDibProcessView()
{
	// TODO: add construction code here

}

CDibProcessView::~CDibProcessView()
{
}

BOOL CDibProcessView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CDibProcessView drawing

void CDibProcessView::OnDraw(CDC* pDC)
{
	CDibProcessDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	if (! pDoc->m_pDib->IsEmpty())
		pDoc->m_pDib->Display(pDC, 0, 0);
}

void CDibProcessView::OnInitialUpdate()
{
	CScrollView::OnInitialUpdate();

	CDibProcessDoc* pDoc = GetDocument();

	CSize sizeTotal(pDoc->m_pDib->GetWidth(), pDoc->m_pDib->GetHeight());
	SetScrollSizes(MM_TEXT, sizeTotal);
	
	CMainFrame* pAppFrame = (CMainFrame*) AfxGetApp()->m_pMainWnd;
	ASSERT_KINDOF(CMainFrame, pAppFrame);
	CRect rc;
	pAppFrame->GetClientRect(&rc);
	if (rc.Width() >= sizeTotal.cx && rc.Height() >= sizeTotal.cy &&
		(sizeTotal.cx>0 || sizeTotal.cy>0))
		ResizeParentToFit(FALSE);
}

/////////////////////////////////////////////////////////////////////////////
// CDibProcessView printing

BOOL CDibProcessView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CDibProcessView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CDibProcessView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CDibProcessView diagnostics

void CDibProcessView::OnRealizePal(WPARAM wParam, LPARAM lParam)
{
	ASSERT(wParam != NULL);
	CDibProcessDoc* pDoc = GetDocument();

	if (pDoc->m_pDib->IsEmpty())
		return;  // must be a new document

	CPalette* pPal = pDoc->m_pDib->GetPalette();
	if (pPal != NULL)
	{
		CWnd* pAppFrame = AfxGetApp()->m_pMainWnd;

		CClientDC appDC(pAppFrame);
		// All views but one should be a background palette.
		// wParam contains a handle to the active view, so the SelectPalette
		// bForceBackground flag is FALSE only if wParam == m_hWnd (this view)
		CPalette* oldPalette = appDC.SelectPalette(pPal, ((HWND)wParam) != m_hWnd);

		if (oldPalette != NULL)
		{
			UINT nColorsChanged = appDC.RealizePalette();
			if (nColorsChanged > 0)
				GetDocument()->UpdateAllViews(NULL);
			appDC.SelectPalette(oldPalette, TRUE);
		}
		else
		{
			TRACE0("\tSelectPalette failed!\n");
		}
	}
}

#ifdef _DEBUG
void CDibProcessView::AssertValid() const
{
	CScrollView::AssertValid();
}

void CDibProcessView::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}

CDibProcessDoc* CDibProcessView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDibProcessDoc)));
	return (CDibProcessDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CDibProcessView message handlers


void CDibProcessView::OnHblind() 
{
	m_nEffect = EFFECT_HBLIND;
	EffectDisplay(m_nEffect);
}

void CDibProcessView::OnUpdateHblind(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}

void CDibProcessView::OnHcrossmove() 
{
	m_nEffect = EFFECT_HCROSSMOVE;
	EffectDisplay(m_nEffect);
}

void CDibProcessView::OnUpdateHcrossmove(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}

void CDibProcessView::OnHraster() 
{
	m_nEffect = EFFECT_HRASTER;
	EffectDisplay(m_nEffect);
}

void CDibProcessView::OnUpdateHraster(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}

void CDibProcessView::OnHsplitmove() 
{
	m_nEffect = EFFECT_HSPLITMOVE;
	EffectDisplay(m_nEffect);
}

void CDibProcessView::OnUpdateHsplitmove(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}

void CDibProcessView::OnHsplitscan() 
{
	m_nEffect = EFFECT_HSPLITSCAN;
	EffectDisplay(m_nEffect);
}

void CDibProcessView::OnUpdateHsplitscan(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}

void CDibProcessView::OnMosaic() 
{
	m_nEffect = EFFECT_MOSAIC;
	EffectDisplay(m_nEffect);
}

void CDibProcessView::OnUpdateMosaic(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}

void CDibProcessView::OnMovedown() 
{
	m_nEffect = EFFECT_MOVEDOWN;
	EffectDisplay(m_nEffect);
}

void CDibProcessView::OnUpdateMovedown(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}

void CDibProcessView::OnMoveleft() 
{
	m_nEffect = EFFECT_MOVELEFT;
	EffectDisplay(m_nEffect);
}

void CDibProcessView::OnUpdateMoveleft(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}

void CDibProcessView::OnMoveright() 
{
	m_nEffect = EFFECT_MOVERIGHT;
	EffectDisplay(m_nEffect);
}

void CDibProcessView::OnUpdateMoveright(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}

void CDibProcessView::OnMoveup() 
{
	m_nEffect = EFFECT_MOVEUP;
	EffectDisplay(m_nEffect);
}

void CDibProcessView::OnUpdateMoveup(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}

void CDibProcessView::OnScandown() 
{
	m_nEffect = EFFECT_SCANDOWN;
	EffectDisplay(m_nEffect);
}

void CDibProcessView::OnUpdateScandown(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}

void CDibProcessView::OnScanleft() 
{
	m_nEffect = EFFECT_SCANLEFT;
	EffectDisplay(m_nEffect);
}

void CDibProcessView::OnUpdateScanleft(CCmdUI* pCmdUI) 
{
	pCmdUI->Enable(! GetDocument()->m_pDib->IsEmpty());
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -