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 + -
显示快捷键?