1、为了便于管理,创建一个新类用于执行绘图的相关操作,另外用list容器保存每次的绘图信息,最后添加一个保存和读取文件的内容。
头文件:
#pragma once
class CGraph
{
public:
CGraph(void);
CGraph(int nType, POINT ptBegin, POINT ptEnd);
~CGraph(void);
int m_nType; // 绘图类型
POINT m_ptBegin; // 起始点
POINT m_ptEnd; // 终止点
// 绘图
int DrawGraph(HDC hdc);
};
CPP文件(重载了类的构造函数):
#include "StdAfx.h"
#include "Graph.h"
CGraph::CGraph(void)
{
}
CGraph::CGraph(int nType, POINT ptBegin, POINT ptEnd)
:m_nType(nType)
,m_ptBegin(ptBegin)
,m_ptEnd(ptEnd)
{
}
CGraph::~CGraph(void)
{
}
int CGraph::DrawGraph(HDC hdc)
{
switch (m_nType)
{
case TYPE_LINE:
MoveToEx(hdc, m_ptBegin.x, m_ptBegin.y, NULL);
LineTo(hdc, m_ptEnd.x, m_ptEnd.y);
break ;
case TYPE_RECT:
Rectangle(hdc, m_ptBegin.x, m_ptBegin.y, m_ptEnd.x, m_ptEnd.y);
break ;
case TYPE_ELLIPSE:
Ellipse(hdc, m_ptBegin.x, m_ptBegin.y, m_ptEnd.x, m_ptEnd.y);
break ;
default :
break ;
}
return 0;
}
另外,还定义了一个绘图类型的枚举:
// 绘图类型
enum
{
TYPE_LINE,
TYPE_RECT,
TYPE_ELLIPSE
};
2、首先实现list容器保存绘图信息的功能:
#include <list>
using namespace std;
list <CGraph*> g_data;
list <CGraph*>::iterator it; // 迭代器
//
// 函数: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// 目的: 处理主窗口的消息。
//
// WM_COMMAND - 处理应用程序菜单
// WM_PAINT - 绘制主窗口
// WM_DESTROY - 发送退出消息并返回
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;
static POINT ptBegin;
static POINT ptEnd;
static int nType = TYPE_LINE;
CGraph *pGraph = NULL;
switch (message)
{
case WM_LBUTTONDOWN:
ptBegin.x = LOWORD(lParam);
ptBegin.y = HIWORD(lParam);
break ;
case WM_LBUTTONUP:
ptEnd.x = LOWORD(lParam);
ptEnd.y = HIWORD(lParam);
pGraph = new CGraph(nType, ptBegin, ptEnd);
if (pGraph != NULL)
{
g_data.push_back(pGraph);
}
InvalidateRect(hWnd, NULL, true );
break ;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
pGraph = NULL;
for (it = g_data.begin(); it != g_data.end(); it++)
{
pGraph = *it;
if (pGraph != NULL)
{
pGraph->DrawGraph(hdc);
}
}
EndPaint(hWnd, &ps);
break ;
省略……
}
3、接着,添加文件操作,将list中的数据保存到一个txt文本文件中:
(1)定义两个函数,分别用于保存和读取数据:
BOOL SaveDrawInfo(); // 保存绘图信息
BOOL OpenDrawInfo(); // 读取绘图信息
(2)函数实现:
BOOL SaveDrawInfo()
{
ofstream ofs;
ofs.open( "