CFileDialog(文件夹对话框类)
主要用于文件的保存,另存,打开,关闭等功能
功能“另存为”的实现:
1 void CTXTDlg::OnFileSaveas() 2 { 3 LPCTSTR szFilter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||"; //过滤器设置,注意格式 4 CFileDialog fd(FALSE,"txt",NULL,OFN_OVERWRITEPROMPT|OFN_PATHMUSTEXIST| //fd初始化 5 OFN_FILEMUSTEXIST|OFN_CREATEPROMPT,szFilter); // 6 if(IDCANCEL == fd.DoModal()) 7 return; 8 CString szFile = fd.GetPathName(); //获取文件路径(全路径) 9 CFile file; //通过file对文件进行操作10 if(!file.Open(szFile,CFile::modeWrite|CFile::modeCreate)) //打开文件11 {12 MessageBox(fd.GetFileName() + " 保存文件时失败!",NULL,MB_ICONEXCLAMATION);13 return;14 }15 m_szFile = szFile;16 CString szText;17 GetDlgItemText(IDC_TEXT,szFile); 18 file.Write(szText,szText.GetLength()); //写入控件中获取出来的数据19 file.Close(); //关闭文件20 CEdit*pEdit = (CEdit*)GetDlgItem(IDC_TEXT);21 pEdit->SetModify(FALSE); //保存之后设置修改状态,关闭时不提示22 SetTitle();23 24 }
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封装。