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

📄 hwpre2view.cpp

📁 关于字符分割的程序
💻 CPP
字号:
// Hwpre2View.cpp : implementation file
//

#include "stdafx.h"
#include "hwpre.h"
#include "Hwpre2View.h"
#include "hwpreDoc.h"
//#include "hwpreView.h"
#include "MainFrm.h"

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

/////////////////////////////////////////////////////////////////////////////
// CHwpre2View

IMPLEMENT_DYNCREATE(CHwpre2View, CScrollView)

CHwpre2View::CHwpre2View()
{	m_bStretchDisp = ID_DISP_ORIG ;
	m_rectView = CRect(0,0, 1,1);
}

CHwpre2View::~CHwpre2View()
{
}


BEGIN_MESSAGE_MAP(CHwpre2View, CScrollView)
	//{{AFX_MSG_MAP(CHwpre2View)
	ON_MESSAGE(WM_DOREALIZE, OnDoRealize)
	ON_COMMAND(ID_VIEW_ORIG, OnViewOrig)
	ON_UPDATE_COMMAND_UI(ID_VIEW_ORIG, OnUpdateViewOrig)
	ON_COMMAND(ID_VIEW_STRETCH1, OnViewStretch1)
	ON_UPDATE_COMMAND_UI(ID_VIEW_STRETCH1, OnUpdateViewStretch1)
	ON_COMMAND(ID_VIEW_STRETCH2, OnViewStretch2)
	ON_UPDATE_COMMAND_UI(ID_VIEW_STRETCH2, OnUpdateViewStretch2)
	//}}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)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CHwpre2View drawing

//void CHwpre2View::OnInitialUpdate()
//{
//	CScrollView::OnInitialUpdate();
//
//	CSize sizeTotal;
//	// TODO: calculate the total size of this view
//	sizeTotal.cx = sizeTotal.cy = 100;
//	SetScrollSizes(MM_TEXT, sizeTotal);
//}
//
//void CHwpre2View::OnDraw(CDC* pDC)
//{
//	CDocument* pDoc = GetDocument();
//	// TODO: add draw code here
//}
BOOL CHwpre2View::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs

	return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CHwpre2View diagnostics

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

void CHwpre2View::Dump(CDumpContext& dc) const
{
	CScrollView::Dump(dc);
}
CHwpreDoc* CHwpre2View::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CHwpreDoc)));
	return (CHwpreDoc*)m_pDocument;
}

#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CHwpre2View message handlers

/////////////////////////////////////////////////////////////////////////////
// CHwpreView drawing

void CHwpre2View::OnDraw(CDC* pDC)
{
	CHwpreDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	HDIB hDIB = pDoc->GetHDIB2();

	if (hDIB) {
		int cxDIB = pDoc->GetDocSize2().cx;
		int cyDIB = pDoc->GetDocSize2().cy;
		CRect rcDIB,rcDest,rcPdc;
		rcDIB.top = rcDIB.left = 0;
		rcDIB.right= cxDIB;
		rcDIB.bottom= cyDIB;
		GetClientRect(rcPdc);
		if (pDC->IsPrinting()) {             //打印
			int cxPage = pDC->GetDeviceCaps(HORZRES);
			int cyPage = pDC->GetDeviceCaps(VERTRES);
			int cxInch = pDC->GetDeviceCaps(LOGPIXELSX);
			int cyInch = pDC->GetDeviceCaps(LOGPIXELSY);
			rcDest.top = rcDest.left = 0;
			
			if (((double)cxDIB/cyDIB)>((double)(cxPage*cyInch)/(cyPage*cxInch))){
				rcDest.right = cxPage;
				rcDest.bottom =(int)( ((double)cyDIB * cxPage * cyInch) /((double)cxDIB * cxInch));
			}else
			{
				rcDest.bottom =cyPage;
				rcDest.right =(int)( ((double)cxDIB * cyPage * cxInch) /((double)cyDIB * cyInch));
			}
		}
		else{                                //显示
			switch(m_bStretchDisp) {
			case ID_DISP_STRETCH1 :          //按窗口拉伸
				rcDest= rcPdc;
				break;
			case ID_DISP_STRETCH2 :          //按比例拉伸
				rcDest = rcDIB;
				if ((double)cxDIB/cyDIB > (double)rcPdc.Width()/rcPdc.Height()) {
					rcDest.right = rcPdc.Width();
					rcDest.bottom=(long)(((double) cyDIB * rcDest.right)/cxDIB);
					if (rcDest.bottom<rcPdc.bottom) {
						rcDest.OffsetRect(CPoint(0,(rcPdc.bottom-rcDest.bottom)/2));
					}		
				}
				else
				{
					rcDest.bottom =rcPdc.Height();
					rcDest.right = (long) (((double) cxDIB *rcDest.bottom)/cyDIB);
					if (rcDest.right<rcPdc.right) {
						rcDest.OffsetRect(CPoint((rcPdc.right-rcDest.right)/2,0));
					}
				}
				break;
			default:                         //ID_DISP_ORIG : 原大小显示
				rcDest= rcDIB;
				if (rcDest.right<rcPdc.right) {
				//	rcDest.left =(rcPdc.right-rcDest.right)/2;
				//	rcDest.right+=rcDest.left;
					rcDest.OffsetRect(CPoint((rcPdc.right-rcDest.right)/2,0));
				}
				if (rcDest.bottom<rcPdc.bottom) {
				//	rcDest.top=(rcPdc.bottom-rcDest.bottom)/2;
				//	rcDest.bottom+=rcDest.top ;
					rcDest.OffsetRect(CPoint(0,(rcPdc.bottom-rcDest.bottom)/2));
				}		
			}
			//画边界线
			m_rectView = rcDest;
			CSize  m_sizeView = rcDest.Size();
			CPen * pPenOld = NULL;
			pPenOld=(CPen *) pDC->SelectStockObject(WHITE_PEN);
			pDC->MoveTo(rcDest.left-1,rcDest.top-1 );
			pDC->LineTo(rcDest.left-1,rcDest.bottom+1);
			pDC->LineTo(rcDest.right+1,rcDest.bottom+1);
			pDC->LineTo(rcDest.right+1,rcDest.top-1);
			pDC->LineTo(rcDest.left-1,rcDest.top-1);
			CPen cp;
			cp.CreatePen(PS_SOLID ,1,RGB(255,0,0));
			//pDC->SelectStockObject(BLACK_PEN);
			pDC->SelectObject(cp);
			pDC->MoveTo(rcDest.left-2,rcDest.top-2);
			pDC->LineTo(rcDest.left-2,rcDest.bottom+2);
			pDC->LineTo(rcDest.right+2,rcDest.bottom+2);
			pDC->LineTo(rcDest.right+2,rcDest.top-2);
			pDC->LineTo(rcDest.left-2,rcDest.top-2);
			pDC->TextOut(10,10,"变换后图");

			pDC->SelectObject(pPenOld);
			//画边界线结束
			//设置滚动条
			SetScrollSizes(MM_TEXT,m_sizeView);
		}
		::PaintDIB(pDC->m_hDC ,&rcDest,pDoc->GetHDIB2(),&rcDIB,pDoc->GetDocPalette2());

	}
}

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

	CSize sizeTotal;
	// TODO: calculate the total size of this view
	sizeTotal.cx = sizeTotal.cy = 100;
	SetScrollSizes(MM_TEXT, sizeTotal);
}

/////////////////////////////////////////////////////////////////////////////
// CHwpreView printing

BOOL CHwpre2View::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	pInfo->SetMaxPage(1);
	return DoPreparePrinting(pInfo);
}

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

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

/////////////////////////////////////////////////////////////////////////////
// CHwpreView diagnostics

//#ifdef _DEBUG
//void CHwpre2View::AssertValid() const
//{
//	CScrollView::AssertValid();
//}
//
//void CHwpre2View::Dump(CDumpContext& dc) const
//{
//	CScrollView::Dump(dc);
//}
//
//CHwpreDoc* CHwpre2View::GetDocument() // non-debug version is inline
//{
//	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CHwpreDoc)));
//	return (CHwpreDoc*)m_pDocument;
//}
//#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CHwpreView message handlers

LRESULT CHwpre2View::OnDoRealize(WPARAM wParam, LPARAM)
{
	ASSERT(wParam != NULL);
	CHwpreDoc * pDoc = GetDocument();
	if (pDoc->GetHDIB() == NULL)
		return 0L;  // must be a new document

	CPalette* pPal = pDoc->GetDocPalette2();
	if (pPal != NULL)
	{
		CMainFrame * pAppFrame = (CMainFrame*) AfxGetApp()->m_pMainWnd;
		ASSERT_KINDOF(CMainFrame, pAppFrame);

		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)
				pDoc->UpdateAllViews(NULL);
			appDC.SelectPalette(oldPalette, TRUE);
		}
		else
		{
			TRACE0("\tSelectPalette failed in CDibView::OnPaletteChanged\n");
		}
	}

	return 0L;
}
void CHwpre2View::OnViewOrig() 
{
	// TODO: Add your command handler code here
	m_bStretchDisp = ID_DISP_ORIG;
	Invalidate();
}

void CHwpre2View::OnUpdateViewOrig(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(m_bStretchDisp==ID_DISP_ORIG);
}

void CHwpre2View::OnViewStretch1() 
{
	// TODO: Add your command handler code here
	m_bStretchDisp = ID_DISP_STRETCH1 ;
	Invalidate();
}

void CHwpre2View::OnUpdateViewStretch1(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(m_bStretchDisp==ID_DISP_STRETCH1 );
}

void CHwpre2View::OnViewStretch2() 
{
	// TODO: Add your command handler code here
	m_bStretchDisp = ID_DISP_STRETCH2 ;
	Invalidate();
}

void CHwpre2View::OnUpdateViewStretch2(CCmdUI* pCmdUI) 
{
	// TODO: Add your command update UI handler code here
	pCmdUI->SetCheck(m_bStretchDisp==ID_DISP_STRETCH2 );
}

⌨️ 快捷键说明

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