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

📄 demo_changebmpview.cpp

📁 可通过键盘上的-〉、<-和上移、下移键来控制图像输出百分比的情况
💻 CPP
字号:
// Demo_ChangebmpView.cpp : implementation of the CDemo_ChangebmpView class
//

#include "stdafx.h"
#include "Demo_Changebmp.h"

#include "Demo_ChangebmpDoc.h"
#include "Demo_ChangebmpView.h"

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

/////////////////////////////////////////////////////////////////////////////
// CDemo_ChangebmpView

IMPLEMENT_DYNCREATE(CDemo_ChangebmpView, CScrollView)

BEGIN_MESSAGE_MAP(CDemo_ChangebmpView, CScrollView)
	//{{AFX_MSG_MAP(CDemo_ChangebmpView)
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_WM_KEYDOWN()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDemo_ChangebmpView construction/destruction

CDemo_ChangebmpView::CDemo_ChangebmpView()
{
	// TODO: add construction code here
	m_size.cx = 50;
	m_size.cy = 50;
	m_orgpoint.x = 100;
	m_orgpoint.y = 100;
	m_pBmp = NULL;
	bLoadBmpFromFile = FALSE;
}

CDemo_ChangebmpView::~CDemo_ChangebmpView()
{
	Destroy ();
}

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

	return CScrollView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CDemo_ChangebmpView drawing

void CDemo_ChangebmpView::OnDraw(CDC* pDC)
{
	CDemo_ChangebmpDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	if(!bLoadBmpFromFile)
		LoadBmpFromID(IDB_CLOUND);

	CDC		dcMemory;
	CBitmap*	pOldBmp;
	dcMemory.CreateCompatibleDC(pDC);
	pOldBmp = dcMemory.SelectObject(m_pBmp);
	pDC->BitBlt(m_orgpoint.x, m_orgpoint.y, 
		m_size.cx, m_size.cy, &dcMemory, 0, 0, SRCCOPY);
	dcMemory.SelectObject(pOldBmp);
	pDC->TextOut (0, 400, "也可以打开一个图像,按键盘的方向键,控制图像的显示大小, 此时,图像闪动不大,因为在内存中对其进行控制!") ;
}

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

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

/////////////////////////////////////////////////////////////////////////////
// CDemo_ChangebmpView diagnostics

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

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

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

/////////////////////////////////////////////////////////////////////////////
// CDemo_ChangebmpView message handlers

BOOL CDemo_ChangebmpView::LoadBmpFromID(UINT nID)
{
	Destroy ();
	m_pBmp = new CBitmap();
	
	BOOL bResult = m_pBmp->LoadBitmap(nID);
	return bResult;
}

BOOL CDemo_ChangebmpView::LoadBmpFromFile(CString szPathName)
{
	Destroy ();
	
	HBITMAP	hBitmap = (HBITMAP)::LoadImage(
			NULL, 
			szPathName,
			IMAGE_BITMAP,
			0,0,
			LR_LOADFROMFILE);
	if(hBitmap){
		m_pBmp = new CBitmap();
		m_pBmp->Attach(hBitmap);
		return TRUE;
	}
	return FALSE;
}

void CDemo_ChangebmpView::Destroy ()
{
	if(m_pBmp)
	{
		m_pBmp->Detach();
		m_pBmp->DeleteObject();
		delete m_pBmp;
		m_pBmp = NULL;
	}
}


void CDemo_ChangebmpView::OnFileOpen() 
{
	// TODO: Add your command handler code here
	char szFilter[] = "Bitmap(*.BMP)|*.BMP||";
	CFileDialog	dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFilter);
	
	if(dlg.DoModal() == IDOK){
		CString filename = dlg.GetPathName();
		if(LoadBmpFromFile(filename)){
			bLoadBmpFromFile = TRUE;
			Invalidate(TRUE);
		}
	}
}

void CDemo_ChangebmpView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) 
{
	// TODO: Add your message handler code here and/or call default
		CDC *pDC=GetDC();
	//当前状态是改变显示图像的大小
	switch(nChar)
	{
		case VK_LEFT:
			m_size.cx-=5;
			Invalidate(TRUE);
			break;
		case VK_RIGHT:
			m_size.cx+=5;
			Invalidate(TRUE);
			break;
		case VK_UP:
			m_size.cy-=5;
			Invalidate(TRUE);
			break;
		case VK_DOWN:
			m_size.cy+=5;
			Invalidate(TRUE);
			break;
	}
	CScrollView::OnKeyDown(nChar, nRepCnt, nFlags);
}

⌨️ 快捷键说明

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