view.h
来自「是WTL的开发包,直接包括在路径中,最好放在VC目录中,要更新的包请到官方网站去」· C头文件 代码 · 共 102 行
H
102 行
// View.h : interface of the CBitmapView class
//
/////////////////////////////////////////////////////////////////////////////
#ifndef __VIEW_H__
#define __VIEW_H__
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
class CBitmapView : public CScrollWindowImpl<CBitmapView>
{
public:
DECLARE_WND_CLASS_EX(NULL, 0, -1)
CBitmap m_bmp;
SIZE m_size;
CBitmapView()
{
m_size.cx = m_size.cy = 1;
}
BOOL PreTranslateMessage(MSG* pMsg)
{
pMsg;
return FALSE;
}
void SetBitmap(HBITMAP hBitmap)
{
if(!m_bmp.IsNull())
m_bmp.DeleteObject();
m_bmp = hBitmap;
if(!m_bmp.IsNull())
m_bmp.GetSize(m_size);
else
m_size.cx = m_size.cy = 1;
SetScrollOffset(0, 0, FALSE);
SetScrollSize(m_size);
}
BEGIN_MSG_MAP(CBitmapView)
MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBackground)
CHAIN_MSG_MAP(CScrollWindowImpl<CBitmapView>);
END_MSG_MAP()
LRESULT OnEraseBackground(UINT /*uMsg*/, WPARAM wParam, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
RECT rect;
GetClientRect(&rect);
int x = 0;
int y = 0;
if(!m_bmp.IsNull())
{
x = m_size.cx + 1;
y = m_size.cy + 1;
}
CDCHandle dc = (HDC)wParam;
if(rect.right > m_sizeAll.cx)
{
RECT rectRight = rect;
rectRight.left = x;
rectRight.bottom = y;
dc.FillRect(&rectRight, (HBRUSH)(COLOR_WINDOW + 1));
}
if(rect.bottom > m_sizeAll.cy)
{
RECT rectBottom = rect;
rectBottom.top = y;
dc.FillRect(&rectBottom, (HBRUSH)(COLOR_WINDOW + 1));
}
if(!m_bmp.IsNull())
{
dc.MoveTo(m_size.cx, 0);
dc.LineTo(m_size.cx, m_size.cy);
dc.LineTo(0, m_size.cy);
}
return 0;
}
void DoPaint(CDCHandle dc)
{
if(!m_bmp.IsNull())
{
CDC dcMem;
dcMem.CreateCompatibleDC(dc);
HBITMAP hBmpOld = dcMem.SelectBitmap(m_bmp);
dc.BitBlt(0, 0, m_size.cx, m_size.cy, dcMem, 0, 0, SRCCOPY);
dcMem.SelectBitmap(hBmpOld);
}
}
};
#endif // __VIEW_H__
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?