MFC类实现,求释疑!本帖最后由 shb8845369 于 2013-01-30 08:48:23 编辑问题描述: 一个简单的单文档作图程
MFC类实现,求释疑!
本帖最后由 shb8845369 于 2013-01-30 08:48:23 编辑 问题描述: 一个简单的单文档作图程序,MFC实现鼠标画三角,矩形并存档。设计的矩形类如下:
class CRectangle : public CObject
{
DECLARE_DYNAMIC(CRectangle)
public:
//构造函数
CRectangle();
CRectangle(CRect rect);
DrawRectangle(CRect rect);
private:
// 矩形
CRect m_rect;
// 矩形画刷
UINT m_brushStyle;
COLORREF m_brushColor;
LONG m_brushHatch;
// 矩形画笔
UINT m_penStyle;
COLORREF m_penColor;
int m_penWidth;
//析构函数
virtual ~CRectangle();
protected:
DECLARE_MESSAGE_MAP()
public:
virtual void Serialize(CArchive& ar);
};
打开文档后,要进行数据初始化,包括画笔和画刷数据,显然我以上函数不行,但我又想在鼠标绘图前通过菜单调整这些画笔和画刷数据。
问题1:请问是否应该在矩形的构造函数中初始化画笔和画刷数据成员,如何初始化?
问题2:通过菜单可以对CRectangle画刷和画笔数据成员进行设置,菜单响应函数添加在CMyDocument中,CMyDocument又包含CRectangle类链表,那么我能否将设置矩形、三角形画刷和画笔的函数在CMyDocument独立出来,还是在CRectangle和CTriangle类中通过Get/Set成员函数分别实现,提供给CMyDocument调用?哪种实现方式更好?
脑子有点乱,请大牛提供思路~谢谢! mfc?GDI作图? 类实现
[解决办法]其实你需要搞清楚的问题很多
1,MFC文档视图框架中,程序运行之初执行了哪些函数;
实际框架都为你准备好了,你只要写入代码既可
在这一过程中主要涉及到,文档数据如何生成对象(保存时只需将对象数据写入文档)
2 document中存放数据的成员变量,比如CObjectList m_objList;或者CObjectArray
中存入矩形CRectangle,矩形要支持 DECLARE_SERIAL ,实现Serialize
让对象自己读/写自己, 自己画自己,
文档类中只需要m_objList.Serialize(ar),你提供的CRectangle显然不具备以上功能
3 你的链表类CObjectList 或者CObjectArayr或者CArray或自定义的
如果没有提供序列化元素的函数,你要写帮助器器函数
4 清场工作,
5 版本管理(主要是文档数据结构发生改变,增加或减少了文档成员。新旧版本数据不同,如何读入)
可能一不会马上涉及到
6 其它的都是小菜
[解决办法]当前要画哪个,就把当前画笔颜色设置给他,然后再画就可以了。这样原来画的还可以重现,(画笔信息保存了)
没什么好纠结的,结构简单,逻辑清晰。
关于初始化,你可以在里边随意设置画笔等默认值,你也可以改一下构造函数,把画笔等信息当参数,构造时把工具栏里的画笔颜色传给它。