📄 imagetooldoc.cpp
字号:
// ImageToolDoc.cpp : implementation of the CImageToolDoc class
//
#include "stdafx.h"
#include "ImageTool.h"
#include "ImageToolDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CImageToolDoc
IMPLEMENT_DYNCREATE(CImageToolDoc, CDocument)
BEGIN_MESSAGE_MAP(CImageToolDoc, CDocument)
//{{AFX_MSG_MAP(CImageToolDoc)
ON_COMMAND(ID_DITHER, OnDither)
ON_COMMAND(ID_ROTATE_90, OnRotate90)
ON_COMMAND(ID_ROTATE_180, OnRotate180)
ON_COMMAND(ID_ROTATE_270, OnRotate270)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CImageToolDoc construction/destruction
CImageToolDoc::CImageToolDoc()
{
// TODO: add one-time construction code here
m_hBitmap = NULL;
m_ViewSize.cx = 0 ;
m_ViewSize.cy = 0 ;
}
CImageToolDoc::~CImageToolDoc()
{
}
BOOL CImageToolDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: add reinitialization code here
// (SDI documents will reuse this document)
OnOpenDocument("test.bmp");
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CImageToolDoc serialization
void CImageToolDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
// TODO: add storing code here
}
else
{
// TODO: add loading code here
}
}
/////////////////////////////////////////////////////////////////////////////
// CImageToolDoc diagnostics
#ifdef _DEBUG
void CImageToolDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CImageToolDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CImageToolDoc commands
BOOL CImageToolDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
// TODO: Add your specialized creation code here
m_hBitmap=(HBITMAP)LoadImage(NULL,lpszPathName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE|LR_CREATEDIBSECTION);
if(m_hBitmap)
{
::GetObject (m_hBitmap, sizeof(BITMAP), &m_bmif);
m_ViewSize.cx = m_bmif.bmWidth;
m_ViewSize.cy = m_bmif.bmHeight;
UpdateView();
}else
{
m_ViewSize.cx = 100;
m_ViewSize.cy = 100;
}
return TRUE;
}
void CImageToolDoc::OnCloseDocument()
{
// TODO: Add your specialized code here and/or call the base class
if(m_hBitmap)
{
::DeleteObject(m_hBitmap);
m_hBitmap = NULL;
}
CDocument::OnCloseDocument();
}
CSize CImageToolDoc::GetViewSize()
{
return m_ViewSize;
}
HBITMAP DitherBitmap(HBITMAP hBitmap , int nMethod ,int nBitCount);
// nMethod 1: 2: 3: 4: 5:
// nBitCount 1: 4: 8 : 16 :24
HBITMAP Rotate90(HBITMAP hBitmap) ;
HBITMAP Rotate180(HBITMAP hBitmap) ;
HBITMAP Rotate270(HBITMAP hBitmap) ;
/*
王寒作品 ,欢迎各位高手一起交流!
MSN:Smartvoicepro@hotmail.com
WEB:www.i-enet.com
*/
void CImageToolDoc::OnDither()
{
// TODO: Add your command handler code here
if(m_hBitmap)
{
BITMAP bmif;
::GetObject (m_hBitmap, sizeof(BITMAP), &bmif);
if(bmif.bmBitsPixel != 1)
{
m_hBitmap = DitherBitmap(m_hBitmap,3,1); // 根据需要调整抖动效果 nMethod 1: 2: 3: ....
if(m_hBitmap)
{
UpdateView();
}
}
}
}
/*
王寒作品 ,欢迎各位高手一起交流!
MSN:Smartvoicepro@hotmail.com
WEB:www.i-enet.com
*/
void CImageToolDoc::OnRotate90()
{
// TODO: Add your command handler code here
if(m_hBitmap)
{
m_hBitmap = Rotate90(m_hBitmap);
if(m_hBitmap)
{
::GetObject (m_hBitmap, sizeof(BITMAP), &m_bmif);
m_ViewSize.cx = m_bmif.bmWidth;
m_ViewSize.cy = m_bmif.bmHeight;
UpdateView();
return ;
}
}
}
/*
王寒作品 ,欢迎各位高手一起交流!
MSN:Smartvoicepro@hotmail.com
WEB:www.i-enet.com
*/
void CImageToolDoc::OnRotate180()
{
if(m_hBitmap)
{
m_hBitmap = Rotate180(m_hBitmap);
UpdateView();
}
// TODO: Add your command handler code here
}
void CImageToolDoc::OnRotate270()
{
// TODO: Add your command handler code here
if(m_hBitmap)
{
m_hBitmap = Rotate270(m_hBitmap);
if(m_hBitmap)
{
::GetObject (m_hBitmap, sizeof(BITMAP), &m_bmif);
m_ViewSize.cx = m_bmif.bmWidth;
m_ViewSize.cy = m_bmif.bmHeight;
UpdateView();
return ;
}
}
}
void CImageToolDoc::UpdateView()
{
POSITION pos = GetFirstViewPosition();
while (pos != NULL)
{
CScrollView* pView =(CScrollView*) GetNextView(pos);
pView->Invalidate();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -