chapter5_3_1view.cpp
来自「windows ce开发技巧与实例光盘代码」· C++ 代码 · 共 224 行
CPP
224 行
// chapter5_3_1View.cpp : implementation of the CChapter5_3_1View class
//
#include "stdafx.h"
#include "chapter5_3_1.h"
#include "chapter5_3_1Doc.h"
#include "chapter5_3_1View.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CChapter5_3_1View
IMPLEMENT_DYNCREATE(CChapter5_3_1View, CView)
BEGIN_MESSAGE_MAP(CChapter5_3_1View, CView)
//{{AFX_MSG_MAP(CChapter5_3_1View)
ON_WM_ERASEBKGND()
ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
ON_COMMAND_RANGE(ID_OPTIONS_MONOCHROMEBITMAP, ID_OPTIONS_TRUECOLORBITMAP, OnOptions)
ON_UPDATE_COMMAND_UI_RANGE(ID_OPTIONS_MONOCHROMEBITMAP, ID_OPTIONS_TRUECOLORBITMAP, OnUpdateOptions)
ON_UPDATE_COMMAND_UI(ID_VIEW_PROPS, OnUpdateViewProps)
ON_UPDATE_COMMAND_UI(ID_VIEW_STRETCH, OnUpdateViewStretch)
ON_COMMAND(ID_VIEW_PROPS, OnViewProps)
ON_COMMAND(ID_VIEW_STRETCH, OnViewStretch)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CChapter5_3_1View construction/destruction
CChapter5_3_1View::CChapter5_3_1View()
{
m_bStretch = FALSE;
m_nBitmapID = -1;
}
CChapter5_3_1View::~CChapter5_3_1View()
{
}
BOOL CChapter5_3_1View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CChapter5_3_1View drawing
void CChapter5_3_1View::OnDraw(CDC* pDC)
{
CChapter5_3_1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (pDoc->m_DIBSection.GetSafeHandle())
{
if (m_bStretch)
{
CRect rect;
GetClientRect(rect);
pDoc->m_DIBSection.Stretch(pDC, CPoint(0,0), rect.Size());
}
else
pDoc->m_DIBSection.Draw(pDC, CPoint(0,0));
}
}
/////////////////////////////////////////////////////////////////////////////
// CChapter5_3_1View diagnostics
#ifdef _DEBUG
void CChapter5_3_1View::AssertValid() const
{
CView::AssertValid();
}
void CChapter5_3_1View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CChapter5_3_1Doc* CChapter5_3_1View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CChapter5_3_1Doc)));
return (CChapter5_3_1Doc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CChapter5_3_1View message handlers
BOOL CChapter5_3_1View::OnEraseBkgnd(CDC* pDC)
{
CChapter5_3_1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc->m_DIBSection.GetSafeHandle())
return CView::OnEraseBkgnd(pDC);
if (m_bStretch)
return TRUE;
CRect ClientRect, ImageRect;
GetClientRect(ClientRect);
ImageRect.SetRect(0,0, pDoc->m_DIBSection.GetWidth(), pDoc->m_DIBSection.GetHeight());
#ifdef _WIN32_WCE
HBRUSH hBrush = ::CreateSolidBrush(RGB(255,255,255));
#else
HBRUSH hBrush = (HBRUSH) GetClassLong(m_hWnd, GCL_HBRBACKGROUND);
#endif
::FillRect(pDC->GetSafeHdc(),
CRect(ImageRect.right,0, ClientRect.right, ImageRect.bottom), hBrush);
::FillRect(pDC->GetSafeHdc(),
CRect(0, ImageRect.bottom, ClientRect.right, ClientRect.bottom), hBrush);
#ifdef _WIN32_WCE
::DeleteObject(hBrush);
#endif
return TRUE;
}
void CChapter5_3_1View::OnFileOpen()
{
CChapter5_3_1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CString strFilter = "Bitmap Files (*.bmp)|*.bmp|All Files (*.*) |*.*||";
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY|OFN_EXPLORER, strFilter, NULL);
if (dlg.DoModal() == IDOK)
{
if (pDoc->m_DIBSection.Load(dlg.GetPathName()))
pDoc->SetTitle(dlg.GetFileTitle());
else
AfxMessageBox(_T("Unable to open bitmap file"));
m_nBitmapID = -1;
Invalidate();
}
}
void CChapter5_3_1View::OnOptions(UINT nID)
{
switch (nID)
{
case ID_OPTIONS_MONOCHROMEBITMAP: m_nBitmapID = IDB_GRADIENT2; break;
case ID_OPTIONS_4COLORBITMAP: m_nBitmapID = IDB_GRADIENT4; break;
case ID_OPTIONS_16COLORBITMAP: m_nBitmapID = IDB_GRADIENT16; break;
case ID_OPTIONS_256COLORBITMAP: m_nBitmapID = IDB_GRADIENT256; break;
case ID_OPTIONS_16BITBITMAP: m_nBitmapID = IDB_GRADIENT65K; break;
case ID_OPTIONS_TRUECOLORBITMAP: m_nBitmapID = IDB_GRADIENT_TRUE; break;
}
CChapter5_3_1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc->m_DIBSection.SetBitmap(m_nBitmapID))
AfxMessageBox(_T("Unable to load bitmap file"));
Invalidate();
}
void CChapter5_3_1View::OnInitialUpdate()
{
CView::OnInitialUpdate();
OnOptions(ID_OPTIONS_TRUECOLORBITMAP);
}
void CChapter5_3_1View::OnUpdateOptions(CCmdUI* pCmdUI)
{
// TODO: Add your command update UI handler code here
}
void CChapter5_3_1View::OnUpdateViewProps(CCmdUI* pCmdUI)
{
CChapter5_3_1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
pCmdUI->Enable(pDoc->m_DIBSection.GetSafeHandle() != NULL);
}
void CChapter5_3_1View::OnUpdateViewStretch(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_bStretch);
}
void CChapter5_3_1View::OnViewProps()
{
CChapter5_3_1Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CString str;
str.Format(_T("Display Image Properties:\n")
_T("Dim:\t%d x %d\n")
_T("Depth:\t%d bits\n")
_T("Size:\t%d Kb"),
pDoc->m_DIBSection.GetWidth(), pDoc->m_DIBSection.GetHeight(),
pDoc->m_DIBSection.GetBitCount(), pDoc->m_DIBSection.GetImageSize() / 1024);
MessageBox(str, _T("Properties"), MB_ICONINFORMATION);
}
void CChapter5_3_1View::OnViewStretch()
{
m_bStretch = !m_bStretch;
Invalidate();
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?