sdimultiviewaview.cpp
来自「《突破Visual C++.NET编程实例五十讲+源文件,初学者学习的好东东!」· C++ 代码 · 共 241 行
CPP
241 行
// SDIMultiViewAView.cpp : CSDIMultiViewAView 类的实现
//
#include "stdafx.h"
#include "SDIMultiViewA.h"
#include "SDIMultiViewADoc.h"
#include "SDIMultiViewAView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// CSDIMultiViewAView
IMPLEMENT_DYNCREATE(CSDIMultiViewAView, CView)
BEGIN_MESSAGE_MAP(CSDIMultiViewAView, CView)
// 标准打印命令
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
ON_COMMAND(ID_CONTROL_DELVIEW, OnControlDelview)
ON_COMMAND(ID_CONTROL_ADDVIEW, OnControlAddview)
ON_COMMAND(ID_CONTROL_DRAW, OnControlDraw)
ON_COMMAND(ID_CONTROL_CHANGEVIEW, OnControlChangeview)
ON_WM_CREATE()
ON_WM_HSCROLL()
ON_WM_VSCROLL()
END_MESSAGE_MAP()
// CSDIMultiViewAView 构造/销毁
CSDIMultiViewAView::CSDIMultiViewAView()
{
// TODO: 在此处添加构造代码
}
CSDIMultiViewAView::~CSDIMultiViewAView()
{
}
BOOL CSDIMultiViewAView::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改 CREATESTRUCT cs 来修改窗口类或
// 样式
return CView::PreCreateWindow(cs);
}
// CSDIMultiViewAView 绘制
void CSDIMultiViewAView::OnDraw(CDC* pDC)
{
CSDIMultiViewADoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: 在此处为本机数据添加绘制代码
int i, j, nHeight;
CString str;
CFont font;
TEXTMETRIC tm;
font.CreateFont(-200, 0, 0, 0, 400, FALSE, FALSE, 0, ANSI_CHARSET,
OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, DEFAULT_PITCH | FF_ROMAN,
"Times New Roman");
CFont* pOldFont = (CFont*) pDC->SelectObject(&font);
pDC->GetTextMetrics(&tm);
nHeight = tm.tmHeight + tm.tmExternalLeading;
TRACE("font height = %d, internal leading = %d\n",
nHeight, tm.tmInternalLeading);
j = pDoc->m_stringArray.GetSize();
for (i = 0; i < j; i++) {
pDC->TextOut(720, i * nHeight + 720, pDoc->m_stringArray[i]);
}
pDC->SelectObject(pOldFont);
TRACE("LOGPIXELSX = %d, LOGPIXELSY = %d\n",
pDC->GetDeviceCaps(LOGPIXELSX),
pDC->GetDeviceCaps(LOGPIXELSY));
TRACE("HORZSIZE = %d, VERTSIZE = %d\n",
pDC->GetDeviceCaps(HORZSIZE),
pDC->GetDeviceCaps(VERTSIZE));
}
// CSDIMultiViewAView 打印
BOOL CSDIMultiViewAView::OnPreparePrinting(CPrintInfo* pInfo)
{
// 默认准备
return DoPreparePrinting(pInfo);
}
void CSDIMultiViewAView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 打印前添加额外的初始化
}
void CSDIMultiViewAView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
// TODO: 打印后添加清除过程
}
// CSDIMultiViewAView 诊断
#ifdef _DEBUG
void CSDIMultiViewAView::AssertValid() const
{
CView::AssertValid();
}
void CSDIMultiViewAView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CSDIMultiViewADoc* CSDIMultiViewAView::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CSDIMultiViewADoc)));
return (CSDIMultiViewADoc*)m_pDocument;
}
#endif //_DEBUG
// CSDIMultiViewAView 消息处理程序
void CSDIMultiViewAView::OnControlDelview()
{
// TODO: 在此添加命令处理程序代码
CSplitterWnd* wnd=(CSplitterWnd*)GetParent();
if(wnd==NULL)
{
TRACE("HI\n");
return;
}
wnd->DeleteRow(0);
}
void CSDIMultiViewAView::OnControlAddview()
{
// TODO: 在此添加命令处理程序代码
CSplitterWnd* wnd=(CSplitterWnd*)GetParent();
ASSERT(wnd);
BOOL bsplit=wnd->SplitRow(100);
ASSERT(bsplit);
}
void CSDIMultiViewAView::OnControlDraw()
{
// TODO: 在此添加命令处理程序代码
CSplitterWnd* wnd=(CSplitterWnd*)GetParent();
ASSERT(wnd!=NULL);
//获取当前窗口数量
int nrows;
nrows = wnd->GetRowCount();
int cols;
cols = wnd->GetColumnCount();
int i,j;
//画第一个窗口
for(i=0;i<nrows;i++){
for(j=0;j<cols;j++){
CWnd* wSplitView=wnd->GetPane(i,j);
CRect recPane;
wSplitView->GetClientRect(&recPane);
ASSERT(wSplitView!=NULL);
CDC* pDC=wSplitView->GetDC();
//设置映射模式
pDC->SetMapMode(MM_TEXT);
pDC->SetWindowExt(1440, 1440);
pDC->SetViewportExt(pDC->GetDeviceCaps(LOGPIXELSX),
-pDC->GetDeviceCaps(LOGPIXELSX));
CBrush brWindow;
brWindow.CreateSolidBrush(RGB(255,((i+j)*64)%256,0));
pDC->SelectObject(&brWindow);
recPane.bottom-=10;
recPane.left+=10;
recPane.top+=10;
recPane.right-=10;
if((i+j)% 2==0)
pDC->Rectangle(recPane);
else
pDC->Ellipse(recPane);
wSplitView->ReleaseDC(pDC);
}
}
}
void CSDIMultiViewAView::OnControlChangeview()
{
// TODO: 在此添加命令处理程序代码
ASSERT(m_pDocument);
CSDIMultiViewADoc* pDoc=GetDocument();
pDoc->m_stringArray[0]="";
pDoc->m_stringArray[1]="中文系";
pDoc->m_stringArray[2]="物理系";
pDoc->m_stringArray[3]="法律系";
pDoc->m_stringArray[4]="计算机系";
pDoc->SetModifiedFlag(TRUE);
pDoc->UpdateAllViews(NULL);
}
int CSDIMultiViewAView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 在此添加您专用的创建代码
return 0;
}
void CSDIMultiViewAView::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: 在此添加专用代码和/或调用基类
pDC->SetMapMode(MM_ISOTROPIC);
pDC->SetWindowExt(1440,1440);
pDC->SetViewportExt (pDC->GetDeviceCaps (LOGPIXELSX),pDC->GetDeviceCaps (LOGPIXELSX));
//CView::OnPrepareDC(pDC, pInfo);
}
void CSDIMultiViewAView::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CView::OnHScroll(nSBCode, nPos, pScrollBar);
}
void CSDIMultiViewAView::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CView::OnVScroll(nSBCode, nPos, pScrollBar);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?