MFC 文档/视图 二

文档/视图结构简介

文档函数

DeleteContents

OnNewDocument

OnOpenDocument

UpdateAllViews

视图函数

GetDocument

OnInitialUpdate

OnUpdate

OnDraw

对象的创建

模板对象

文档对象

框架对象

视图对象

各对象的关系

文档读写

文件的归档:CArchive

CArchive对象的使用

使类可串行化

串行化实现

范例

cpp 复制代码
void CModalDlg::OnButtonColor()
{
	// TODO: Add your control notification handler code here
	CColorDialog color;
	if (color.DoModal() == IDOK)
	{
		CMainFrame* pMainFrm = (CMainFrame*)AfxGetMainWnd();//获取主窗口
		//获取选定线条的颜色
		CMFCTest10Doc* pDoc = (CMFCTest10Doc*)pMainFrm->GetActiveDocument();//获取活动文档对象
		pDoc->m_color = color.GetColor();//设置文档中的线条颜色
	}
}
cpp 复制代码
class CMFCTest10Doc : public CDocument
{
public:
	UINT m_ulong;//长轴
	UINT m_ushort;//短轴
	UINT m_uthick;//线粗
	COLORREF m_color;//线条颜色
	CList<CPoint, CPoint> m_PointList;//点List

    ...
};
cpp 复制代码
BOOL CMFCTest10Doc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: 在此添加重新初始化代码
	// (SDI 文档将重用该文档)
	m_ulong = 20;//长轴
	m_ushort = 20;//短轴
	m_uthick = 2;//线粗
	m_color = RGB(0, 150, 0);//线条颜色
	return TRUE;
}
cpp 复制代码
void CMFCTest10Doc::DeleteContents()
{
	// TODO: 在此添加专用代码和/或调用基类
	m_PointList.RemoveAll();//删除所有数据
	CDocument::DeleteContents();
}
cpp 复制代码
void CMFCTest10Doc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: 在此添加存储代码
		ar << m_ulong << m_ushort << m_uthick << m_color;
	}
	else
	{
		ar >> m_ulong >> m_ushort >> m_uthick >> m_color;
		// TODO: 在此添加加载代码
	}
	m_PointList.Serialize(ar);
}
cpp 复制代码
void CMFCTest10View::OnConfig()
{
	// TODO: 在此添加命令处理程序代码
	CMFCTest10Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	CModalDlg dlg;
	if (dlg.DoModal() == IDCANCEL)
	{
		return;
	}
	pDoc->DeleteContents();//删除文档内容
	pDoc->m_ulong = dlg.m_ulong;
	pDoc->m_ushort = dlg.m_ushort;
	pDoc->m_uthick = dlg.m_uthick;
}
cpp 复制代码
void CMFCTest10View::OnLButtonDown(UINT nFlags, CPoint point)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	CMFCTest10Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	// TODO: Add your message handler code here and/or call default
	CDC* pDc = GetDC();	
	CPen* pNewPen = new CPen;//创建画笔C++对象	
	pNewPen->CreatePen(PS_SOLID, pDoc->m_uthick, pDoc->m_color);//创建画笔	
	CPen* pOldPen = pDc->SelectObject(pNewPen);//选中当前画笔,并保存以前的画笔	
	pDc->Ellipse(point.x, point.y, point.x + pDoc->m_ulong, point.y + pDoc->m_ushort);//画圆	
	pDc->SelectObject(pOldPen);//恢复旧画笔	
	delete pNewPen;//删除新建的画笔对象
	ReleaseDC(pDc);
	pDoc->m_PointList.AddTail(point);

	CView::OnLButtonDown(nFlags, point);
}
cpp 复制代码
void CMFCTest10View::OnDraw(CDC* pDC)
{
	CMFCTest10Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;

	// TODO: 在此处为本机数据添加绘制代码	
	CPen* pNewPen = new CPen;//创建画笔C++对象	
	pNewPen->CreatePen(PS_SOLID, pDoc->m_uthick, pDoc->m_color);//创建画笔	
	CPen* pOldPen = pDC->SelectObject(pNewPen);//选中当前画笔,并保存以前的画笔
	POSITION posi = pDoc->m_PointList.GetHeadPosition();
	while (posi)
	{
		CPoint point(pDoc->m_PointList.GetNext(posi));
		pDC->Ellipse(point.x, point.y, point.x + pDoc->m_ulong, point.y + pDoc->m_ushort);
	}	
	pDC->SelectObject(pOldPen);//恢复旧画笔	
	delete pNewPen;//删除新建的画笔对象
}
相关推荐
wzfj1234516 小时前
认识lambda
c++
老王熬夜敲代码16 小时前
C++万能类:any
开发语言·c++·笔记
智者知已应修善业16 小时前
【数组删除重复数据灵活算法可修改保留重复数量】2024-3-4
c语言·c++·经验分享·笔记·算法
Cappi卡比17 小时前
【无标题】
c++
汉克老师17 小时前
GESP2025年12月认证C++五级真题与解析(编程题2 (相等序列))
c++·算法·贪心算法·中位数·质数分解
UP_Continue17 小时前
C++--可变参数模板和lambda
开发语言·c++
jiunian_cn18 小时前
【C++11】C++11重要新特性详解
开发语言·c++
tbRNA18 小时前
C/C++ 内存管理
c语言·c++
WBluuue18 小时前
AtCoder Beginner Contest 438(ABCDEF)
c++·算法