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;//删除新建的画笔对象
}
相关推荐
炸膛坦客7 小时前
单片机/C/C++八股:(二十)指针常量和常量指针
c语言·开发语言·c++
炸膛坦客8 小时前
单片机/C/C++八股:(十九)栈和堆的区别?
c语言·开发语言·c++
2401_831824969 小时前
代码性能剖析工具
开发语言·c++·算法
是wzoi的一名用户啊~9 小时前
【C++小游戏】2048
开发语言·c++
Sunshine for you10 小时前
C++中的职责链模式实战
开发语言·c++·算法
qq_4160187210 小时前
C++中的状态模式
开发语言·c++·算法
2401_8845632410 小时前
模板代码生成工具
开发语言·c++·算法
2401_8319207410 小时前
C++代码国际化支持
开发语言·c++·算法
m0_6727033110 小时前
上机练习第51天
数据结构·c++·算法
2401_8512729911 小时前
自定义内存检测工具
开发语言·c++·算法