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

📄 drawdibview.cpp

📁 一个WINDOWS MOBILE(c++)程序代码,演示怎么手工画一个BMP文件
💻 CPP
字号:
// DrawDIBView.cpp : implementation of the CDrawDIBView class
//

#include "stdafx.h"
#include "DrawDIB.h"

#include "DrawDIBDoc.h"
#include "DrawDIBView.h"

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

/////////////////////////////////////////////////////////////////////////////
// CDrawDIBView

IMPLEMENT_DYNCREATE(CDrawDIBView, CView)

BEGIN_MESSAGE_MAP(CDrawDIBView, CView)
	//{{AFX_MSG_MAP(CDrawDIBView)
	ON_WM_ERASEBKGND()
	ON_COMMAND(ID_FILE_OPEN, OnFileOpen)
	ON_COMMAND(ID_VIEW_PROPS, OnViewProps)
	ON_COMMAND(ID_VIEW_STRETCH, OnViewStretch)
	ON_UPDATE_COMMAND_UI(ID_VIEW_STRETCH, OnUpdateViewStretch)
	ON_UPDATE_COMMAND_UI(ID_VIEW_PROPS, OnUpdateViewProps)
	ON_COMMAND_RANGE(ID_OPTIONS_MONOCHROMEBITMAP, ID_OPTIONS_MONOBLUE, OnOptions)
	ON_COMMAND(ID_FILE_SAVE, OnFileSave)
	ON_COMMAND(ID_FILE_OPENSELF, OnFileOpenself)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDrawDIBView construction/destruction

CDrawDIBView::CDrawDIBView()
{
	m_bStretch = FALSE;
    m_nBitmapID = -1;
}

CDrawDIBView::~CDrawDIBView()
{
}

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

	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CDrawDIBView drawing

void CDrawDIBView::OnDraw(CDC* pDC)
{
	CDrawDIBDoc* 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));
    }
}

/////////////////////////////////////////////////////////////////////////////
// CDrawDIBView diagnostics

#ifdef _DEBUG
void CDrawDIBView::AssertValid() const
{
	CView::AssertValid();
}

void CDrawDIBView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

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

/////////////////////////////////////////////////////////////////////////////
// CDrawDIBView message handlers

BOOL CDrawDIBView::OnEraseBkgnd(CDC* pDC) 
{
	CDrawDIBDoc* 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 CDrawDIBView::OnFileOpen() 
{
	CDrawDIBDoc* 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 CDrawDIBView::OnViewProps() 
{
	CDrawDIBDoc* 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 CDrawDIBView::OnViewStretch() 
{
	m_bStretch = !m_bStretch;
    Invalidate();
}

void CDrawDIBView::OnUpdateViewStretch(CCmdUI* pCmdUI) 
{
	pCmdUI->SetCheck(m_bStretch);
}

void CDrawDIBView::OnUpdateViewProps(CCmdUI* pCmdUI) 
{
	CDrawDIBDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	
	pCmdUI->Enable(pDoc->m_DIBSection.GetSafeHandle() != NULL);	
}

void CDrawDIBView::OnInitialUpdate() 
{
	CView::OnInitialUpdate();
	
	 OnOptions(ID_OPTIONS_TRUECOLORBITMAP);
}

void CDrawDIBView::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;
        case ID_OPTIONS_MONOBLUE:         m_nBitmapID = IDB_MONOBLUE;      break;

   }

	CDrawDIBDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

    if (!pDoc->m_DIBSection.SetBitmap(m_nBitmapID))
        AfxMessageBox(_T("Unable to load bitmap file"));

    Invalidate();	
}

void CDrawDIBView::OnFileSave() 
{
	// TODO: Add your command handler code here
	CDrawDIBDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	
	CString strFilter = "Bitmap Files (*.bmp)|*.bmp|All Files (*.*) |*.*||";

	CFileDialog	dlg(FALSE, NULL, NULL, OFN_HIDEREADONLY|OFN_EXPLORER, strFilter, NULL); 
	if (dlg.DoModal() == IDOK) 
    {
        if (pDoc->m_DIBSection.Save(dlg.GetPathName())){
            pDoc->SetTitle(dlg.GetFileTitle());
			AfxMessageBox(_T("保存成功!"));
		}
        else
            AfxMessageBox(_T("Unable to save bitmap file"));

        m_nBitmapID = -1;
        Invalidate();
    }		
}

void CDrawDIBView::OnFileOpenself() 
{
	CDrawDIBDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	pDoc->m_DIBSection.LoadSelf();
        m_nBitmapID = -1;
        Invalidate();
	// TODO: Add your command handler code here
	
}

⌨️ 快捷键说明

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