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;//删除新建的画笔对象
}
相关推荐
繁华的地方不一定留下你的脚印1 小时前
C++ std::variant 与 std::visit:安全保存多种类型,写清每个处理分支
开发语言·c++
程序员老陆2 小时前
WIN32_LEAN_AND_MEAN:Windows 头文件里的“精简编译开关”
c++·windows
hold?fish:palm2 小时前
45 二叉树的右视图
开发语言·c++·算法
ShineWinsu3 小时前
对于Redis:Redis的认识以及分布式系统的解析
linux·数据库·c++·redis·缓存·消息队列·分布式架构
布莱克6053 小时前
在C++中,构造函数能不能是虚函数?析构函数为什么要虚?
开发语言·c++·构造函数·析构函数·虚函数
旖旎夜光3 小时前
LeetCode 137 : 只出现一次的数字 II(位运算) —— 题解
c++·笔记·学习·算法·leetcode·力控
王老师青少年编程4 小时前
2026年9月GESP真题及题解(C++七级):必经之路
c++·题解·真题·gesp·七级·2026年9月·必经之路
码匠许师傅4 小时前
【C++三方组件】Asio 上篇:回调式 TCP 客户端与服务端
开发语言·c++·tcp/ip
沐欣工作室_lvyiyi4 小时前
家庭水资源节能系统设计(论文+源码)
c++·python·云平台·单片机毕业设计·单片机仿真·电子信息工程毕业设计·机械电子工程
Yyyyyy~5 小时前
[c++]数组
c++