CFileDialog(文件夹对话框类)和CFontDialog(字体设置对话框类)的使用学习

Posted LeonLH

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CFileDialog(文件夹对话框类)和CFontDialog(字体设置对话框类)的使用学习相关的知识,希望对你有一定的参考价值。

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封装。

 

以上是关于CFileDialog(文件夹对话框类)和CFontDialog(字体设置对话框类)的使用学习的主要内容,如果未能解决你的问题,请参考以下文章

如何让CFileDialog同时选择文件和文件夹

MFC读取文件中利用CFileDialog类打开文件,出现对话框后,点击取消出现问题

CFileDialog类实现文件夹路径的获取

CFileDialog 如何获取文件夹路径

MFC文件的读写操作,类的序列化与反序列化,CFile,CFileDialog,CArchive,CStdioFile

为程序添加“打开文件”对话框和“另存为”对话框