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

📄 imageboardview.cpp

📁 <精通Visual C++图像处理编程>源码 对于图像处理很有帮助
💻 CPP
📖 第 1 页 / 共 5 页
字号:
// ImageBoardView.cpp : implementation of the CImageBoardView class
//

#include "stdafx.h"
#include "ImageBoard.h"
#include "ChildFrm.h"
#include "MainFrm.h"
#include "PenWidth.h"
#include "SelectPasteDlg.h"
#include "Scale.h"
#include "CanvasSize.h"
#include "GrayDlg.h"
#include "BCDlg.h"
#include "AdjustColorDlg.h"
#include "ColorBitsDlg.h"
#include "ConvoluteDlg.h"
#include "RotateAngle.h"
#include "GammaCorrection.h"
#include "ExposureDlg.h"
#include "EmbossmentDlg.h"
#include "SpreadDlg.h"
#include "ImageBoardDoc.h"
#include "ImageBoardView.h"

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

/////////////////////////////////////////////////////////////////////////////
// CImageBoardView

IMPLEMENT_DYNCREATE(CImageBoardView, CScrollView)

BEGIN_MESSAGE_MAP(CImageBoardView, CScrollView)
	//{{AFX_MSG_MAP(CImageBoardView)
	ON_COMMAND(IDM_EAST, OnEast)
	ON_UPDATE_COMMAND_UI(IDM_EAST, OnUpdateEast)
	ON_COMMAND(IDM_HF1, OnHf1)
	ON_UPDATE_COMMAND_UI(IDM_HF1, OnUpdateHf1)
	ON_COMMAND(IDM_HF2, OnHf2)
	ON_UPDATE_COMMAND_UI(IDM_HF2, OnUpdateHf2)
	ON_COMMAND(IDM_HF3, OnHf3)
	ON_UPDATE_COMMAND_UI(IDM_HF3, OnUpdateHf3)
	ON_COMMAND(IDM_HORZ, OnHorz)
	ON_UPDATE_COMMAND_UI(IDM_HORZ, OnUpdateHorz)
	ON_COMMAND(IDM_LAP1, OnLap1)
	ON_UPDATE_COMMAND_UI(IDM_LAP1, OnUpdateLap1)
	ON_COMMAND(IDM_LAP2, OnLap2)
	ON_UPDATE_COMMAND_UI(IDM_LAP2, OnUpdateLap2)
	ON_COMMAND(IDM_LAP3, OnLap3)
	ON_UPDATE_COMMAND_UI(IDM_LAP3, OnUpdateLap3)
	ON_COMMAND(IDM_LAP4, OnLap4)
	ON_UPDATE_COMMAND_UI(IDM_LAP4, OnUpdateLap4)
	ON_COMMAND(IDM_LF1, OnLf1)
	ON_UPDATE_COMMAND_UI(IDM_LF1, OnUpdateLf1)
	ON_COMMAND(IDM_LF2, OnLf2)
	ON_UPDATE_COMMAND_UI(IDM_LF2, OnUpdateLf2)
	ON_COMMAND(IDM_LF3, OnLf3)
	ON_UPDATE_COMMAND_UI(IDM_LF3, OnUpdateLf3)
	ON_COMMAND(IDM_NORTH, OnNorth)
	ON_UPDATE_COMMAND_UI(IDM_NORTH, OnUpdateNorth)
	ON_COMMAND(IDM_NORTHEAST, OnNortheast)
	ON_UPDATE_COMMAND_UI(IDM_NORTHEAST, OnUpdateNortheast)
	ON_COMMAND(IDM_NORTHWEST, OnNorthwest)
	ON_UPDATE_COMMAND_UI(IDM_NORTHWEST, OnUpdateNorthwest)
	ON_COMMAND(IDM_SOUTH, OnSouth)
	ON_UPDATE_COMMAND_UI(IDM_SOUTH, OnUpdateSouth)
	ON_COMMAND(IDM_SOUTHEAST, OnSoutheast)
	ON_UPDATE_COMMAND_UI(IDM_SOUTHEAST, OnUpdateSoutheast)
	ON_COMMAND(IDM_SOUTHWEST, OnSouthwest)
	ON_UPDATE_COMMAND_UI(IDM_SOUTHWEST, OnUpdateSouthwest)
	ON_COMMAND(IDM_VERT, OnVert)
	ON_UPDATE_COMMAND_UI(IDM_VERT, OnUpdateVert)
	ON_COMMAND(IDM_VERTHORZ, OnVerthorz)
	ON_UPDATE_COMMAND_UI(IDM_VERTHORZ, OnUpdateVerthorz)
	ON_COMMAND(IDM_WEST, OnWest)
	ON_UPDATE_COMMAND_UI(IDM_WEST, OnUpdateWest)
	ON_COMMAND(IDM_MEDIANFILTER, OnMedianfilter)
	ON_UPDATE_COMMAND_UI(IDM_MEDIANFILTER, OnUpdateMedianfilter)
	ON_COMMAND(IDM_INCH, OnInch)
	ON_COMMAND(IDM_MM, OnMm)
	ON_COMMAND(IDM_PIXEL, OnPixel)
	ON_COMMAND(IDM_SELECT, OnSelect)
	ON_COMMAND(IDM_CURVE, OnCurve)
	ON_COMMAND(IDM_LINE, OnLine)
	ON_COMMAND(IDM_FREELINE, OnFreeline)
	ON_COMMAND(IDM_RECT_H, OnRectH)
	ON_COMMAND(IDM_RECT_F, OnRectF)
	ON_COMMAND(IDM_ELLIPSE_H, OnEllipseH)
	ON_COMMAND(IDM_ELLIPSE_F, OnEllipseF)
	ON_COMMAND(IDM_TEXT, OnText)
	ON_COMMAND(IDM_FILL, OnFill)
	ON_COMMAND(IDM_PENCOLOR, OnPencolor)
	ON_COMMAND(IDM_SOLID, OnSolid)
	ON_COMMAND(IDM_DASH, OnDash)
	ON_COMMAND(IDM_DOT, OnDot)
	ON_COMMAND(IDM_FILLCOLOR, OnFillcolor)
	ON_UPDATE_COMMAND_UI(IDM_SELECT, OnUpdateSelect)
	ON_UPDATE_COMMAND_UI(IDM_CURVE, OnUpdateCurve)
	ON_UPDATE_COMMAND_UI(IDM_LINE, OnUpdateLine)
	ON_UPDATE_COMMAND_UI(IDM_FREELINE, OnUpdateFreeline)
	ON_UPDATE_COMMAND_UI(IDM_RECT_H, OnUpdateRectH)
	ON_UPDATE_COMMAND_UI(IDM_RECT_F, OnUpdateRectF)
	ON_UPDATE_COMMAND_UI(IDM_ELLIPSE_H, OnUpdateEllipseH)
	ON_UPDATE_COMMAND_UI(IDM_ELLIPSE_F, OnUpdateEllipseF)
	ON_UPDATE_COMMAND_UI(IDM_FILL, OnUpdateFill)
	ON_UPDATE_COMMAND_UI(IDM_TEXT, OnUpdateText)
	ON_UPDATE_COMMAND_UI(IDM_DASH, OnUpdateDash)
	ON_UPDATE_COMMAND_UI(IDM_DOT, OnUpdateDot)
	ON_UPDATE_COMMAND_UI(IDM_SOLID, OnUpdateSolid)
	ON_COMMAND(IDM_PW_1, OnPw1)
	ON_UPDATE_COMMAND_UI(IDM_PW_1, OnUpdatePw1)
	ON_COMMAND(IDM_PW_2, OnPw2)
	ON_UPDATE_COMMAND_UI(IDM_PW_2, OnUpdatePw2)
	ON_COMMAND(IDM_PW_3, OnPw3)
	ON_UPDATE_COMMAND_UI(IDM_PW_3, OnUpdatePw3)
	ON_COMMAND(IDM_PW_4, OnPw4)
	ON_UPDATE_COMMAND_UI(IDM_PW_4, OnUpdatePw4)
	ON_COMMAND(IDM_PW_5, OnPw5)
	ON_UPDATE_COMMAND_UI(IDM_PW_5, OnUpdatePw5)
	ON_COMMAND(IDM_PW_6, OnPw6)
	ON_UPDATE_COMMAND_UI(IDM_PW_6, OnUpdatePw6)
	ON_COMMAND(IDM_PW_7, OnPw7)
	ON_UPDATE_COMMAND_UI(IDM_PW_7, OnUpdatePw7)
	ON_COMMAND(IDM_PW_8, OnPw8)
	ON_UPDATE_COMMAND_UI(IDM_PW_8, OnUpdatePw8)
	ON_COMMAND(IDM_PW_OTHER, OnPwOther)
	ON_UPDATE_COMMAND_UI(IDM_PW_OTHER, OnUpdatePwOther)
	ON_COMMAND(IDM_ROUNDRECT_F, OnRoundrectF)
	ON_UPDATE_COMMAND_UI(IDM_ROUNDRECT_F, OnUpdateRoundrectF)
	ON_COMMAND(IDM_ROUNDRECT_H, OnRoundrectH)
	ON_UPDATE_COMMAND_UI(IDM_ROUNDRECT_H, OnUpdateRoundrectH)
	ON_COMMAND(IDM_FONT, OnFont)
	ON_COMMAND(ID_EDIT_COPY, OnEditCopy)
	ON_UPDATE_COMMAND_UI(ID_EDIT_COPY, OnUpdateEditCopy)
	ON_COMMAND(ID_EDIT_CUT, OnEditCut)
	ON_UPDATE_COMMAND_UI(ID_EDIT_CUT, OnUpdateEditCut)
	ON_COMMAND(ID_EDIT_PASTE, OnEditPaste)
	ON_UPDATE_COMMAND_UI(ID_EDIT_PASTE, OnUpdateEditPaste)
	ON_COMMAND(IDM_SELECTPASTE, OnSelectpaste)
	ON_UPDATE_COMMAND_UI(IDM_SELECTPASTE, OnUpdateSelectpaste)
	ON_COMMAND(IDM_CROP, OnCrop)
	ON_UPDATE_COMMAND_UI(IDM_CROP, OnUpdateCrop)
	ON_COMMAND(IDM_ROTATE, OnRotate)
	ON_UPDATE_COMMAND_UI(IDM_ROTATE, OnUpdateRotate)
	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_HMIRROR, OnHmirror)
	ON_UPDATE_COMMAND_UI(IDM_HMIRROR, OnUpdateHmirror)
	ON_COMMAND(IDM_VMIRROR, OnVmirror)
	ON_UPDATE_COMMAND_UI(IDM_VMIRROR, OnUpdateVmirror)
	ON_COMMAND(IDM_SCALE, OnScale)
	ON_UPDATE_COMMAND_UI(IDM_SCALE, OnUpdateScale)
	ON_COMMAND(IDM_CANVASSIZE, OnCanvassize)
	ON_UPDATE_COMMAND_UI(IDM_CANVASSIZE, OnUpdateCanvassize)
	ON_COMMAND(IDM_LEFT, OnLeft)
	ON_COMMAND(IDM_CENTER, OnCenter)
	ON_COMMAND(IDM_RIGHT, OnRight)
	ON_UPDATE_COMMAND_UI(IDM_CENTER, OnUpdateCenter)
	ON_UPDATE_COMMAND_UI(IDM_LEFT, OnUpdateLeft)
	ON_UPDATE_COMMAND_UI(IDM_RIGHT, OnUpdateRight)
	ON_COMMAND(IDM_ADJUSTCOLOR, OnAdjustcolor)
	ON_UPDATE_COMMAND_UI(IDM_ADJUSTCOLOR, OnUpdateAdjustcolor)
	ON_COMMAND(IDM_BC, OnBc)
	ON_UPDATE_COMMAND_UI(IDM_BC, OnUpdateBc)
	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_WM_LBUTTONUP()
	ON_WM_DESTROY()
	ON_WM_LBUTTONDOWN()
	ON_WM_MOUSEMOVE()
	ON_WM_CTLCOLOR()
	ON_WM_CREATE()
	ON_WM_SETCURSOR()
	ON_COMMAND(ID_EDIT_CLEAR, OnEditClear)
	ON_UPDATE_COMMAND_UI(ID_EDIT_CLEAR, OnUpdateEditClear)
	ON_COMMAND(ID_EDIT_SELECT_ALL, OnEditSelectAll)
	ON_UPDATE_COMMAND_UI(ID_EDIT_SELECT_ALL, OnUpdateEditSelectAll)
	ON_COMMAND(ID_EDIT_UNDO, OnEditUndo)
	ON_UPDATE_COMMAND_UI(ID_EDIT_UNDO, OnUpdateEditUndo)
	ON_COMMAND(ID_EDIT_REDO, OnEditRedo)
	ON_UPDATE_COMMAND_UI(ID_EDIT_REDO, OnUpdateEditRedo)
	ON_COMMAND(IDM_RED, OnRed)
	ON_UPDATE_COMMAND_UI(IDM_RED, OnUpdateRed)
	ON_COMMAND(IDM_GREEN, OnGreen)
	ON_UPDATE_COMMAND_UI(IDM_GREEN, OnUpdateGreen)
	ON_COMMAND(IDM_BLUE, OnBlue)
	ON_UPDATE_COMMAND_UI(IDM_BLUE, OnUpdateBlue)
	ON_COMMAND(IDM_GETBLUE, OnGetblue)
	ON_UPDATE_COMMAND_UI(IDM_GETBLUE, OnUpdateGetblue)
	ON_COMMAND(IDM_GETGREEN, OnGetgreen)
	ON_UPDATE_COMMAND_UI(IDM_GETGREEN, OnUpdateGetgreen)
	ON_COMMAND(IDM_GETRED, OnGetred)
	ON_UPDATE_COMMAND_UI(IDM_GETRED, OnUpdateGetred)
	ON_COMMAND(IDM_COPYTO, OnCopyto)
	ON_UPDATE_COMMAND_UI(IDM_COPYTO, OnUpdateCopyto)
	ON_COMMAND(IDM_PASTEFROM, OnPastefrom)
	ON_UPDATE_COMMAND_UI(IDM_PASTEFROM, OnUpdatePastefrom)
	ON_COMMAND(IDM_ERASER, OnEraser)
	ON_UPDATE_COMMAND_UI(IDM_ERASER, OnUpdateEraser)
	ON_COMMAND(IDM_PICKER, OnPicker)
	ON_UPDATE_COMMAND_UI(IDM_PICKER, OnUpdatePicker)
	ON_COMMAND(IDM_CLOSE_H, OnCloseH)
	ON_UPDATE_COMMAND_UI(IDM_CLOSE_H, OnUpdateCloseH)
	ON_COMMAND(IDM_CLOSE_V, OnCloseV)
	ON_UPDATE_COMMAND_UI(IDM_CLOSE_V, OnUpdateCloseV)
	ON_COMMAND(IDM_DILATION_H, OnDilationH)
	ON_UPDATE_COMMAND_UI(IDM_DILATION_H, OnUpdateDilationH)
	ON_COMMAND(IDM_DILATION_V, OnDilationV)
	ON_UPDATE_COMMAND_UI(IDM_DILATION_V, OnUpdateDilationV)
	ON_COMMAND(IDM_EROSION_H, OnErosionH)
	ON_UPDATE_COMMAND_UI(IDM_EROSION_H, OnUpdateErosionH)
	ON_COMMAND(IDM_EROSION_V, OnErosionV)
	ON_UPDATE_COMMAND_UI(IDM_EROSION_V, OnUpdateErosionV)
	ON_COMMAND(IDM_OPEN_H, OnOpenH)
	ON_UPDATE_COMMAND_UI(IDM_OPEN_H, OnUpdateOpenH)
	ON_COMMAND(IDM_OPEN_V, OnOpenV)
	ON_UPDATE_COMMAND_UI(IDM_OPEN_V, OnUpdateOpenV)
	ON_COMMAND(IDM_THIN, OnThin)
	ON_UPDATE_COMMAND_UI(IDM_THIN, OnUpdateThin)
	ON_COMMAND(IDM_FFT, OnFft)
	ON_UPDATE_COMMAND_UI(IDM_FFT, OnUpdateFft)
	ON_COMMAND(IDM_DCT, OnDct)
	ON_UPDATE_COMMAND_UI(IDM_DCT, OnUpdateDct)
	ON_COMMAND(IDM_WALH, OnWalh)
	ON_UPDATE_COMMAND_UI(IDM_WALH, OnUpdateWalh)
	ON_COMMAND(IDM_CONTOUR_H, OnContourH)
	ON_UPDATE_COMMAND_UI(IDM_CONTOUR_H, OnUpdateContourH)
	ON_COMMAND(IDM_CONTOUR_V, OnContourV)
	ON_UPDATE_COMMAND_UI(IDM_CONTOUR_V, OnUpdateContourV)
	ON_COMMAND(IDM_ROTATE_ANGLE, OnRotateAngle)
	ON_UPDATE_COMMAND_UI(IDM_ROTATE_ANGLE, OnUpdateRotateAngle)
	ON_COMMAND(IDM_CORRECTGAMMA, OnCorrectgamma)
	ON_UPDATE_COMMAND_UI(IDM_CORRECTGAMMA, OnUpdateCorrectgamma)
	ON_COMMAND(IDM_DIFFERENCEEDGEDETECT, OnDifferenceedgedetect)
	ON_UPDATE_COMMAND_UI(IDM_DIFFERENCEEDGEDETECT, OnUpdateDifferenceedgedetect)
	ON_COMMAND(IDM_EMBOSSMENT, OnEmbossment)
	ON_UPDATE_COMMAND_UI(IDM_EMBOSSMENT, OnUpdateEmbossment)
	ON_COMMAND(IDM_EXPOSURE, OnExposure)
	ON_UPDATE_COMMAND_UI(IDM_EXPOSURE, OnUpdateExposure)
	ON_COMMAND(IDM_HOMOEDGEDETECT, OnHomoedgedetect)
	ON_UPDATE_COMMAND_UI(IDM_HOMOEDGEDETECT, OnUpdateHomoedgedetect)
	ON_COMMAND(IDM_NEGATIVE, OnNegative)
	ON_UPDATE_COMMAND_UI(IDM_NEGATIVE, OnUpdateNegative)
	ON_COMMAND(IDM_SOBELED, OnSobeled)
	ON_UPDATE_COMMAND_UI(IDM_SOBELED, OnUpdateSobeled)
	ON_COMMAND(IDM_SPREAD, OnSpread)
	ON_UPDATE_COMMAND_UI(IDM_SPREAD, OnUpdateSpread)
	ON_COMMAND(IDM_HOUGHED, OnHoughed)
	ON_UPDATE_COMMAND_UI(IDM_HOUGHED, OnUpdateHoughed)
	ON_COMMAND(IDM_CANNYED, OnCannyed)
	ON_UPDATE_COMMAND_UI(IDM_CANNYED, OnUpdateCannyed)
	//}}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_COMMAND(IDC_PEN_COLOR, OnPencolor1)
	ON_COMMAND(IDC_FILL_COLOR, OnFillcolor1)
	ON_COMMAND_RANGE(IDC_COLORTABLE_BASE, IDC_COLORTABLE_BASE+256, OnPenColorGrid)
	ON_MESSAGE(WM_REALIZEPAL, OnRealizePal)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CImageBoardView construction/destruction

CImageBoardView::CImageBoardView()
{
	m_nLengthUnit = MM_TEXT;
	m_pDib = NULL;
	m_pFloatWnd = NULL;
	m_bDrawingRubber = FALSE;
	m_bDrawFreeline = FALSE;
	m_bErasing = FALSE;
	m_nDrawCurveStep = -1;
	m_bDrawCurve = FALSE;
	m_nDrawType = DT_SELECT;
	m_nPenStyle = PS_SOLID;
	m_nPenWidth = 1;
	m_crPenColor = RGB(0,0,0);
	m_crFillColor = RGB(0,0,0);
	m_nTextAlign = DT_LEFT;

	m_hCursorGeneralDraw = NULL;
	m_hCursorFreeline = NULL;
	m_hCursorEraser = NULL;
	m_hCursorPicker = NULL;
	m_hCursorFill = NULL;
	m_hCursorCurve = NULL;
}

CImageBoardView::~CImageBoardView()
{
}

BOOL CImageBoardView::PreCreateWindow(CREATESTRUCT& cs)
{
	m_hCursorGeneralDraw = AfxGetApp()->LoadCursor(IDC_CURSORGENERALDRAW);
	cs.lpszClass = AfxRegisterWndClass(CS_DBLCLKS,
					m_hCursorGeneralDraw, 
					(HBRUSH)(COLOR_WINDOW-1),
					AfxGetApp()->LoadIcon(IDR_IMAGEBTYPE));
	
	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CImageBoardView drawing

void CImageBoardView::OnDraw(CDC* pDC)
{
	CImageBoardDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (! pDoc->m_pDib->IsEmpty())
		m_pDib->Display(pDC, 0, 0);

	if (::IsWindow(m_EditText.m_hWnd))
	{
		CRect rc;
		m_EditText.GetWindowRect(&rc);
		ScreenToClient(&rc);
		rc.InflateRect(2,2);

		CPen pen1(PS_SOLID,1,RGB(255,255,255));
		CPen pen2(PS_DOT,1,RGB(0,0,0));
		CBrush *pOldBrush = pDC->SelectObject(CBrush::FromHandle((HBRUSH)::GetStockObject(NULL_BRUSH)));
		CPen *pOldPen = pDC->SelectObject(&pen1);
		pDC->Rectangle(&rc);
		pDC->SelectObject(&pen2);
		pDC->Rectangle(&rc);
		pDC->SelectObject(pOldBrush);
		pDC->SelectObject(pOldPen);
	}
}

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

	CImageBoardDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	m_pDib = pDoc->m_pDib;

	CSize sizeTotal(m_pDib->GetWidth(), m_pDib->GetHeight());
	SetScrollSizes(MM_TEXT, sizeTotal);

	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();
}

/////////////////////////////////////////////////////////////////////////////
// CImageBoardView printing

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CImageBoardView diagnostics

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CImageBoardView message handlers

void CImageBoardView::SetStatusBarBitCount(WORD wBitcount)
{
	CString str;
	switch (wBitcount)
	{
	case 1:
		str.LoadString(IDS_BITCOUNT_1);
		break;
	case 4:
		str.LoadString(IDS_BITCOUNT_4);
		break;
	case 8:
		str.LoadString(IDS_BITCOUNT_8);
		break;
	case 24:
	default:
		str.LoadString(IDS_BITCOUNT_24);
		break;
	}
	CMainFrame* pMainFrame= (CMainFrame*)( AfxGetApp()->m_pMainWnd);
	ASSERT_KINDOF(CMainFrame, pMainFrame);
    pMainFrame->m_wndStatusBar.SetPaneText(PANE_BIT_COUNT, str);
}

void CImageBoardView::SetStatusBarLengthUnit(int nUnit)
{
	CString str;
	switch (m_nLengthUnit)
	{
	case MM_HIENGLISH:
		str.LoadString(IDS_LENGTH_UNIT_INCH);
		break;
	case MM_HIMETRIC:
		str.LoadString(IDS_LENGTH_UNIT_MM);
		break;
	case MM_TEXT:
	default:
		str.LoadString(IDS_LENGTH_UNIT_PIXEL);
		break;
	}
	CMainFrame* pMainFrame= (CMainFrame*)( AfxGetApp()->m_pMainWnd);
	ASSERT_KINDOF(CMainFrame, pMainFrame);
    pMainFrame->m_wndStatusBar.SetPaneText(PANE_LENGTH_UNIT, str);
}

void CImageBoardView::SetStatusBarCursorPosition(CPoint point)
{
	CWindowDC dc(this);
	dc.LPtoDP(&point);
	int nOldUnit = dc.SetMapMode(m_nLengthUnit);
	dc.DPtoLP(&point);
	dc.SetMapMode(nOldUnit);

	CString msg;
	double fCX = abs(point.x), fCY = abs(point.y);
	switch (m_nLengthUnit)
	{
	case MM_TEXT:
		msg.Format("%d,%d", (int)fCX, (int)fCY);
		break;
	case MM_HIENGLISH:
		fCX /= 1000.0;
		fCY /= 1000.0;
		msg.Format("%.2f,%.2f", fCX, fCY);
		break;
	case MM_HIMETRIC:
		fCX /= 100.0;
		fCY /= 100.0;
		msg.Format("%.1f,%.1f", fCX, fCY);
		break;
	}
	CMainFrame* pMainFrame= (CMainFrame*)( AfxGetApp()->m_pMainWnd);
	ASSERT_KINDOF(CMainFrame, pMainFrame);
    pMainFrame->m_wndStatusBar.SetPaneText(PANE_CURSOR_POSITION, msg);
}

void CImageBoardView::SetStatusBarImageSize(CSize size)
{
	CWindowDC dc(this);
	dc.LPtoDP(&size);
	int nOldUnit = dc.SetMapMode(m_nLengthUnit);
	dc.DPtoLP(&size);
	dc.SetMapMode(nOldUnit);

	CString msg;
	double fCX = abs(size.cx), fCY = abs(size.cy);
	switch (m_nLengthUnit)
	{
	case MM_TEXT:
		msg.Format("%d,%d", (int)fCX, (int)fCY);
		break;
	case MM_HIENGLISH:
		fCX /= 1000.0;
		fCY /= 1000.0;
		msg.Format("%.2f,%.2f", fCX, fCY);
		break;
	case MM_HIMETRIC:
		fCX /= 100.0;
		fCY /= 100.0;
		msg.Format("%.1f,%.1f", fCX, fCY);
		break;
	}
	CMainFrame* pMainFrame= (CMainFrame*)( AfxGetApp()->m_pMainWnd);
	ASSERT_KINDOF(CMainFrame, pMainFrame);
    pMainFrame->m_wndStatusBar.SetPaneText(PANE_IMAGE_SIZE, msg);
}

void CImageBoardView::OnInch() 
{
	SetLengthUnit(MM_HIENGLISH);
}

void CImageBoardView::OnMm() 
{
	SetLengthUnit(MM_HIMETRIC);
}

void CImageBoardView::OnPixel() 
{
	SetLengthUnit(MM_TEXT);
}

void CImageBoardView::SetLengthUnit(int nUnit) 
{
	m_nLengthUnit = nUnit;
	SetStatusBarLengthUnit(nUnit);

	CSize sizeTotal(m_pDib->GetWidth(), m_pDib->GetHeight());
	SetStatusBarImageSize(sizeTotal);

	CMenu *pMenu =  AfxGetApp()->m_pMainWnd->GetMenu();
	switch (m_nLengthUnit)

⌨️ 快捷键说明

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