字体序列化保存读写

字体序列化保存读写
  在实际开发中,程序中经常需要用到保存窗口大小、窗口位置、字体设置功能,以便程序在下次运行后,自动恢复上次的用户的使用设置(比如窗口的大小、位置、字体等等),这样做会给用户带来良好的软件操作体验,提高用户的使用满意度。
  软件配置的读取,可以采用多种方法实现:数据库、INI文件、注册表等都可以实现。不过,在VC开发中,使用MFC的序列化机制大概是所有方法中最方便、最好用的配置保存方法了。因为使用序列化(Serialize)后,你会有没写什么代码,程序打开关闭后,配置自动读取和保存的感觉。

  要使用保存字体功能,首先从CObject继承写一个字体读写类(CObFont),源码如下:

//CObFont.h

#ifndef MyNotepad_ObFont_H_
#define MyNotepad_ObFont_H_

#include <afxwin.h>

class CObFont : public CObject
{
	DECLARE_SERIAL( CObFont )
private:
	LOGFONT lf;
public:	
	CObFont();	
	virtual void Serialize(CArchive &archive);
	LOGFONT GetLogFont() const;
	BOOL SetLogFont(CFont *pfont);
#ifdef _DEBUG
	virtual void Dump( CDumpContext& dumpSite ) const;
	virtual void AssertValid() const;
#endif
};


#endif //MyNotepad_ObFont_H_

//CObFont.cpp

#include "CObFont.h"

CObFont::CObFont() 
{
	CFont *font=NULL;
	
	font = new CFont();
	font->CreateFont(12,0,0,0,400,0,0,0,
		DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,
		CLIP_DEFAULT_PRECIS,
		DEFAULT_QUALITY,
		DEFAULT_PITCH|FF_DONTCARE,
		"Fixedsys"); 		
	
	font->GetLogFont(&lf);
	
	delete font; 
}

void CObFont::Serialize(CArchive &archive)
{
	CObject::Serialize(archive);
	if (archive.IsStoring())			
		archive.Write(&lf, sizeof(lf));	
	else	
		archive.Read(&lf, sizeof(lf));	
}

LOGFONT CObFont::GetLogFont() const 
{
	return lf;
} 

BOOL CObFont::SetLogFont(CFont *pfont)
{	
	if (pfont !=NULL)
	{
		pfont->GetLogFont(&lf); 
	}
	
	return TRUE;
}

#ifdef _DEBUG
void CObFont::Dump( CDumpContext& dumpSite ) const
{
	CObject::Dump(dumpSite);
	
	//dumpSite ;
}

void CObFont::AssertValid() const
{
	// check base class first
	CObject::AssertValid();
	
	// check data members.
}	
#endif //_DEBUG

IMPLEMENT_SERIAL(CObFont, CObject, 0)

   好了,字体读写类的代码不到100行。完成了自动创建默认字体、读写字体、序列化读写到磁盘等功能。

 //读取
    CObFont *MyObFont;
    CFile file;
    if (file.Open("MyNotepad.dat", CFile::modeRead))   
{
CArchive archive(&file, CArchive::load);
archive >>MyObFont;  
        
archive.Close();
file.Close();
}
else
{
MyObFont = new CObFont();   //创建默认字体
}

     LOGFONT lf;
     lf=MyObFont->GetLogFont();  //得到字体


============================================

    //保存到磁盘
    CFont *pfont;
    CObFont *MyObFont;


    pfont=XXXObj.GetFont();
    MyObFont->SetLogFont(pfont);

    CFile file;
    if (file.Open("MyNotepad.dat", CFile::modeCreate | CFile::modeWrite))
    {
CArchive archive(&file, CArchive::store);
archive << MyObFont;  //字体数据写入文档

archive.Close();
file.Close(); 
    }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值