📄 dibitmap.h
字号:
////////////////////////////////////////////////////////////////
// MSDN Magazine -- October 2001
// If this code works, it was written by Paul DiLascia.
// If not, I don't know who wrote it.
// Compiles with Visual C++ 6.0 for Windows 98 and probably Windows 2000 too.
// Set tabsize = 3 in your editor.
//
#pragma once
#include <atlbase.h>
//////////////////
// Picture object--encapsulates IPicture
enum
{
BITMAP_TILE = 0, // 位图在对话框上使用填充模式
BITMAP_STRETCH, // 位图在对话框上使用伸展模式
BITMAP_CENTER // 位图显示在对话框的中央位置
};
//
class CDIBitmap {
public:
BOOL Load(HBITMAP hBitmap);
void DrawDIB(CDC* pDC,int x=0,int y=0);
void DrawDIB( CDC * pDC, int x, int y, int width, int height );
int DrawDIB( CDC * pDC, CRect & rectDC, CRect & rectDIB );
int GetHeight();
int GetWidth();
BOOL m_bImage;
BOOL Load(BYTE* lpSrc,DWORD len);
CDIBitmap();
~CDIBitmap();
// Load frm various sosurces
BOOL Load(UINT nIDRes);
BOOL Load(LPCTSTR sPath);
BOOL Load(CFile& file);
BOOL Load(CArchive& ar);
BOOL Load(IStream* pstm);
// render to device context
BOOL Render(CDC* pDC, CRect rc=CRect(0,0,0,0),
LPCRECT prcMFBounds=NULL) const;
CSize GetImageSize(CDC* pDC=NULL) const;
operator IPicture*()
{
return m_spIPicture;
}
void GetHIMETRICSize(OLE_XSIZE_HIMETRIC& cx, OLE_YSIZE_HIMETRIC& cy) const {
cx = cy = 0;
const_cast<CDIBitmap*>(this)->m_hr = m_spIPicture->get_Width(&cx);
ASSERT(SUCCEEDED(m_hr));
const_cast<CDIBitmap*>(this)->m_hr = m_spIPicture->get_Height(&cy);
ASSERT(SUCCEEDED(m_hr));
}
void Free()
{
if (m_spIPicture)
{
m_spIPicture.Release();
}
m_bImage=FALSE;
}
protected:
CComQIPtr<IPicture>m_spIPicture; // ATL smart pointer to IPicture
HRESULT m_hr; // last error code
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -