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 + -
显示快捷键?