📄 chapter13view.cpp
字号:
// Chapter13View.cpp : implementation of the CChapter13View class
//
#include "stdafx.h"
#include "Chapter13.h"
#include "Chapter13Doc.h"
#include "Chapter13View.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CChapter13View
IMPLEMENT_DYNCREATE(CChapter13View, CScrollView)
BEGIN_MESSAGE_MAP(CChapter13View, CScrollView)
//{{AFX_MSG_MAP(CChapter13View)
ON_WM_LBUTTONDOWN()
ON_WM_LBUTTONUP()
ON_WM_MOUSEMOVE()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CScrollView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CScrollView::OnFilePrintPreview)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CChapter13View construction/destruction
CChapter13View::CChapter13View()
{
// TODO: add construction code here
}
CChapter13View::~CChapter13View()
{
}
BOOL CChapter13View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
return CScrollView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CChapter13View drawing
void CChapter13View::OnDraw(CDC* pDC)
{
CChapter13Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
HGLOBAL hDIB = pDoc->m_dib.m_hDib;
if (hDIB != NULL)
{
//图象的宽度和高度
long lSrcWidth;
long lSrcHeight;
//指向源图象的指针
LPSTR lpSrcDib;
//指向源图象起始的指针
LPSTR lpSrcStartBits;
// 指向BITMAPINFO结构的指针
LPBITMAPINFO lpbmi;
lpSrcDib= (LPSTR) ::GlobalLock((HGLOBAL) pDoc->m_dib.m_hDib);
// 获取图象的宽度高度
lSrcWidth= pDoc->m_dib.GetWidth(lpSrcDib);
lSrcHeight= pDoc->m_dib.GetHeight(lpSrcDib);
// 获取指针
lpbmi = (LPBITMAPINFO)lpSrcDib;
// 找到DIB图象像素起始位置
lpSrcStartBits=pDoc->m_dib.GetBits(lpSrcDib);
// 创建新调色板
CPalette * pPal=new CPalette;
pDoc->m_dib.ConstructPalette(pDoc->m_dib.m_hDib,pPal);
//将新调色板选进内存设备环境
CPalette * pOldPal=pDC->SelectPalette(pPal, TRUE);
pDC->RealizePalette();
//画图
::StretchDIBits(pDC->GetSafeHdc(),0,0, lSrcWidth, lSrcHeight,
0, 0, lSrcWidth , lSrcHeight ,
lpSrcStartBits, lpbmi,
DIB_RGB_COLORS, SRCCOPY);
//恢复旧的(应该是系统)调色板
pDC->SelectPalette(pOldPal, TRUE);
delete pPal;
}
//例子2
/* //定义图形对象-构造
CBrush blackBrush;
//创建图形对象-初始化
if(!blackBrush.CreateSolidBrush(RGB(0,0,0)))
{
return;
}
//将新建图形对象选入设备上下文,并保存原来的图形对象
CBrush* pOldBrush=pDC->SelectObject(&blackBrush);
//执行绘制操作
//恢复原来的图形对象
pDC->SelectObject(pOldBrush);
// blackBrush.DeleteObject();*/
//例子3
/* CRect client;
GetClientRect(&client);
pDC->SetViewportOrg(client.right/2,client.bottom/2);
pDC->TextOut(-client.right/2,-client.bottom/2,"hello");
pDC->SetWindowOrg(-client.right/2,-client.bottom/2);
pDC->TextOut(-client.right/2,-client.bottom/2,"hello");
// pDC->TextOut(0,0,"hello,Girl");
pDC->SetMapMode(MM_LOENGLISH);
// pDC->TextOut(100,-100,"hello,Girl");
pDC->SetViewportOrg(0,client.bottom);
// pDC->DPtoLP(&client);
// pDC->TextOut(100,100,"hello,boy");*/
//例子4
/* LOGFONT lf;
pDC->GetCurrentFont()->GetLogFont(&lf);
CFont font;
CFont * pOldFont;
lf.lfCharSet=134;
lf.lfHeight=100;
lf.lfWidth=0;
strcpy(lf.lfFaceName,"华文行楷");
font.CreateFontIndirect(&lf);
pOldFont=pDC->SelectObject(&font);
pDC->SetBkMode(TRANSPARENT);
CPen pen(PS_SOLID,1,RGB(255,0,0));
CPen* pOldPen;
pOldPen=pDC->SelectObject(&pen);
CBrush brush(HS_DIAGCROSS,RGB(0,255,0));
CBrush* pOldBrush;
pOldBrush=pDC->SelectObject(&brush);
pDC->BeginPath();
pDC->TextOut(0,10,"hello,第二炮兵");
pDC->EndPath();
// pDC->StrokePath();
pDC->StrokeAndFillPath();
pDC->SelectClipPath(RGN_COPY);
for(int i=255;i>0;i--)
{
int ir=(1000*i)/255;
pDC->SelectObject(pOldBrush);
brush.DeleteObject();
brush.CreateSolidBrush(RGB(255,i,0));
pDC->SelectObject(&brush);
pDC->Ellipse(-ir,-ir/3,ir,ir/3);
}
pDC->SelectObject(pOldFont);
pDC->SelectObject(pOldPen);
pDC->SelectObject(pOldBrush);*/
}
/////////////////////////////////////////////////////////////////////////////
// CChapter13View printing
BOOL CChapter13View::OnPreparePrinting(CPrintInfo* pInfo)
{
// default preparation
return DoPreparePrinting(pInfo);
}
void CChapter13View::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add extra initialization before printing
}
void CChapter13View::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: add cleanup after printing
}
/////////////////////////////////////////////////////////////////////////////
// CChapter13View diagnostics
#ifdef _DEBUG
void CChapter13View::AssertValid() const
{
CScrollView::AssertValid();
}
void CChapter13View::Dump(CDumpContext& dc) const
{
CScrollView::Dump(dc);
}
CChapter13Doc* CChapter13View::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CChapter13Doc)));
return (CChapter13Doc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CChapter13View message handlers
void CChapter13View::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
CSize sizeTotal;
// TODO: calculate the total size of this view
sizeTotal.cx = sizeTotal.cy = 100;
SetScrollSizes(MM_TEXT, sizeTotal);
}
void CChapter13View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
SetCapture();//捕获鼠标消息
m_ptLast=point;
// SetCursor(LoadCursor(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDC_CURSOR_DOWN)));
CScrollView::OnLButtonDown(nFlags, point);
}
void CChapter13View::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
ReleaseCapture();
/* CRect rcClient;
GetClientRect(&rcClient);
//根据移动的位置更改鼠标形状
if(PtInRect(&rcClient,point))
{
SetCursor(LoadCursor(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDC_HAND)));
}*/
CScrollView::OnLButtonUp(nFlags, point);
}
void CChapter13View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRect rcClient;
GetClientRect(&rcClient);
if (nFlags & MK_LBUTTON)
{
SCROLLINFO siVert, siHorz;
//取得滚动框的初始信息 包括位置
GetScrollInfo(SB_VERT, &siVert);
GetScrollInfo(SB_HORZ, &siHorz);
CSize sizeDelta;
//滚动的距离
sizeDelta = point - m_ptLast;
//滚动时发送此消息,siVert - sizeDelta的值表示滚动框应该在的位置
SendMessage(WM_VSCROLL, MAKELONG(SB_THUMBTRACK, siVert.nPos - sizeDelta.cy), NULL);
SendMessage(WM_HSCROLL, MAKELONG(SB_THUMBTRACK, siHorz.nPos - sizeDelta.cx), NULL);
m_ptLast = point;
}
/*
//根据移动的位置更改鼠标形状
else if(PtInRect(&rcClient,point))
{
SetCursor(LoadCursor(AfxGetInstanceHandle(), MAKEINTRESOURCE(IDC_HAND)));
}*/
CScrollView::OnMouseMove(nFlags, point);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -