CFileDialog(文件夹对话框类)
主要用于文件的保存,另存,打开,关闭等功能
功能“另存为”的实现:
void CTXTDlg::OnFileSaveas()
{
LPCTSTR szFilter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||"; //过滤器设置,注意格式
CFileDialog fd(FALSE,"txt",NULL,OFN_OVERWRITEPROMPT|OFN_PATHMUSTEXIST| //fd初始化
OFN_FILEMUSTEXIST|OFN_CREATEPROMPT,szFilter); //
if(IDCANCEL == fd.DoModal())
return;
CString szFile = fd.GetPathName(); //获取文件路径(全路径)
CFile file; //通过file对文件进行操作
if(!file.Open(szFile,CFile::modeWrite|CFile::modeCreate)) //打开文件
{
MessageBox(fd.GetFileName() + " 保存文件时失败!",NULL,MB_ICONEXCLAMATION);
return;
}
m_szFile = szFile;
CString szText;
GetDlgItemText(IDC_TEXT,szFile);
file.Write(szText,szText.GetLength()); //写入控件中获取出来的数据
file.Close(); //关闭文件
CEdit*pEdit = (CEdit*)GetDlgItem(IDC_TEXT);
pEdit->SetModify(FALSE); //保存之后设置修改状态,关闭时不提示
SetTitle(); }
CFile 封装了m_hFile句柄,可以对文件进行打开、关闭、读写等操作
CFileDialog 主要是初始化时候的设置(以读取的方式还是保存的方式打开)还有过滤器的设置问题
CEdit 编辑框控件
CFontDialog(字体设置对话框类)
主要用于字体设置功能包括字体的字号,粗体,斜体,下划线删除线等
void CTXTDlg::OnFormatFont()
{
CFont *pFont = GetDlgItem(IDC_TEXT)->GetFont();
LOGFONT lf; //描述的了Font的属性,包括高宽、字号、斜体、下划线等
pFont->GetLogFont(&lf); //fill LOGFONT,将获取的字体格式放到lf中
CFontDialog fd(&lf); //CFont属性对话框,并填充当前属性(lf),将lf格式放到fd中,对fd初始化
if(IDCANCEL == fd.DoModal())
return;
fd.GetCurrentFont(&lf); //将新的格式放入lf中
m_font.DeleteObject(); //删除原有格式
m_font.CreateFontIndirect(&lf); //存入当前格式
GetDlgItem(IDC_TEXT)->SetFont(&m_font); //设置当前格式到控件中 }
LOGFONT是一个保存字体属性的结构体
typedef struct tagLOGFONTW
{
LONG lfHeight;
LONG lfWidth;
LONG lfEscapement;
LONG lfOrientation;
LONG lfWeight;
BYTE lfItalic;
BYTE lfUnderline;
BYTE lfStrikeOut;
BYTE lfCharSet;
BYTE lfOutPrecision;
BYTE lfClipPrecision;
BYTE lfQuality;
BYTE lfPitchAndFamily;
WCHAR lfFaceName[LF_FACESIZE];
} LOGFONTW, *PLOGFONTW, NEAR *NPLOGFONTW, FAR *LPLOGFONTW;
LOGFONT: 一个结构,用来逻辑上表达一个字体,比如LOGFONT.lfFaceName是字体的名字
HFONT: 一个句柄,相当于表示内存中的一个字体对象,它可以马上拿来用
CFont: 是mfc对于HFONT的一种封装,是用来对句柄操作的类
我的理解是:LOGFONT被HFONT封装,HFONT又被CFont封装。