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;//删除新建的画笔对象
}
相关推荐
_wyt0019 小时前
洛谷 B3930 [GESP202312 五级] 烹饪问题 题解
c++·gesp
玖玥拾13 小时前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
один but you14 小时前
constexpr函数
c++
凡人叶枫14 小时前
Effective C++ 条款41:了解隐式接口和编译期多态
java·开发语言·c++·effective c++
凡人叶枫14 小时前
Effective C++ 条款42:了解 typename 的双重意义
java·linux·服务器·c++
小胖xiaopangss14 小时前
BRpc使用
c++·rpc
-森屿安年-15 小时前
63. 不同路径 II
c++·算法·动态规划
chase_my_dream15 小时前
Cartographer详细讲解
c++·人工智能·自动驾驶
森G15 小时前
75、服务器源码解析---------云视频服务项目
linux·服务器·网络·c++·qt
碧海蓝天202215 小时前
C++法则24:在标准 C++ 中,没有任何可移植的方式判断指针 T* pt 指向的内存位置是否已经 构造了对象,程序员必须手动跟踪哪些元素已构造。
java·开发语言·c++