您的位置:首页 > 其它

MFC公用对话框的使用

2017-01-23 23:39 204 查看

CFindReplaceDialog

1. 简单例子

 1
void CCFindReplaceDialogView::OnFind()
 2 {
 3     CFindReplaceDialog* pDlg =
new CFindReplaceDialog();
 4

 5     pDlg->Create(
true, NULL, NULL, FR_DOWN,
this );
 6    
/*
 7
        第一个参数为true显示的是查找对话框,为False时显示的是查找和替换对话框
 8
        第二个参数指定在查找对话框中显示的字符串
 9
        第三个参数指定在替换对话框中显示的字符串
10
        第四个参数为指定标志位,用来定制对话框,其中FR_DOWM表示对话框中的“向下”单选按钮被选中,否则“向上”单选按钮被选中,具体可取值参考MSDN
11
        第五个参数为指向父窗口的指针,如果为NULL,则为主框架窗口,使用时需要让它指向接收查找和替换消息的窗口
12    
*/
13    pDlg->ShowWindow( SW_SHOW );   //
显示对话框
14 }

效果如下:

1
void CCFindReplaceDialogView::OnFindReplace()
2 {
3    CFindReplaceDialog* pDlg =
new CFindReplaceDialog();
4

5    pDlg->Create(
false, NULL, NULL, FR_DOWN,
this );
6

7    pDlg->ShowWindow( SW_SHOW );   //
显示对话框
8 }

效果如下:
 

2. Create

查找和替换对话框也是非模态对话框,所以创建过程和MFC下创建非模态对话框的过程有点类似.
先Create出一个窗口,设置好相关参数然后在显示出来使用就OK.
Create原型:
virtual BOOL Create(BOOL bFindDialogOnly,// TRUE for Find, FALSEfor FindReplace

LPCTSTRlpszFindWhat,                         //默认被查找的字符串

LPCTSTR lpszReplaceWith = NULL,         //默认被查找替换的字符串

DWORD dwFlags =FR_DOWN,                //设置对话框里面的一些属性啦,下面说明了相关标志

CWnd* pParentWnd = NULL);               //对话框的父窗口
dwFlags相关标志说明:
    FR_DOWN 如果设置,对话框中的“向下查找”单选按钮被选中,如果没有设置,“向上查找”单选按钮被选中;

   FR_HIDEUPDOWN 不显示查找方向单选按钮;

   FR_HIDEMATCHCASE 不显示区分大小写复选按钮;

   FR_HIDEWHOLEWORD 不显示全字匹配复选按钮;

   FR_MATCHCASE 使区分大小写复选按钮处于选中状态;

   FR_WHOLEWORD 使全字匹配复选按钮处于选中状态;

   FR_NOMATCHCASE 使区分大小写复选按钮处于禁止(变灰)状态;

   FR_NOUPDOWN 使查找方向单选按钮处于禁止(变灰)状态;

   FR_NOWHOLEWORD 使全字匹配复选按钮处于禁止(变灰)状态;

   FR_SHOWHELP 在对话框中显示一个帮助按钮。
如下是创建一个查找窗口的实例:
CFindReplaceDialog *pFindDlg =new CFindReplaceDialog;   //由于是非模态对话框这里用new命令分配内存
if (!pFindDlg->Create(TRUE,_T("hyp'sKnowledge Base"),NULL,FR_DOWN|FR_MATCHCASE|FR_WHOLEWORD
,this))//上面说明了

{

    return;

}

pFindDlg->ShowWindow(SW_SHOW);   //窗口创建完毕要显示出来

pFindDlg->SetActiveWindow();    //设置为活动窗口
如下是创建一个查找替换窗口的实例:
CFindReplaceDialog *pReplaceDlg=new CFindReplaceDialog;
if(!pReplaceDlg->Create(FALSE,_T("hyp"),_T("hyp'sKnowledge Base"),FR_DOWN,this))

{

    return;

}

pReplaceDlg->ShowWindow(SW_SHOW);

pReplaceDlg->SetActiveWindow();

3. 显示的出来的对话框添加响应函数

显示的出来的对话框还需要添加一些响应函数吧,我找了一下发现没有现成的消息响应-_-网上google了一下发现要自己添加我汗.
大体步骤是这样子的:
在你添加查找替换对话框的头文件的#pragma once下面加入
constint WM_FINDREPLACE =::RegisterWindowMessage(FINDMSGSTRING);//将FINDMSGSTRING注册为WM_FINDREPLACE消息
并在头文件生成的消息映射函数
afx_msg LONG OnFindReplace(WPARAMwParam, LPARAM lParam);
在源文件里面将消息映射函数与WM_FINDREPLACE消息关联
BEGIN_MESSAGE_MAP(...)

...

ON_REGISTERED_MESSAGE(WM_FINDREPLACE, OnFindReplace)

...

END_MESSAGE_MAP()
接下来编写OnFindReplace函数就OK了
LONG ChypDlg::OnFindReplace( WPARAMwparam, LPARAM lparam )

{

    // TODO: 在此添加控件通知处理程序代码

    CFindReplaceDialog* pDlg =CFindReplaceDialog::GetNotifier(lparam);

    //具体查找替换代码就自己编写

    // pDlg->GetFindString();   该函数可以返回查找字符串

    // pDlg->GetReplaceString(); 该函数可以返回查找替换串

    //pDlg->SearchDown();   该函数可以判断是向上还是向下搜索,TRUE是向下,反之OOXX

    //pDlg->MatchCase();   该函数可以判断是否区分大小写

    //pDlg->MatchWholeWord(); 该函数可以判断是否全字匹配

    if( pDlg != NULL )

    {

        if( pDlg->FindNext() )

        {

            MessageBox("FindNext!", "hyp's Knowledge Base" ,MB_OK);

        }

        else 

            if( pDlg->ReplaceAll())

            {

               MessageBox("ReplaceAll!", "hyp's Knowledge Base",
MB_OK);

            }

            else 

                if(pDlg->ReplaceCurrent() ){

                   MessageBox("ReplaceCurrent!","hyp'sKnowledge Base",
MB_OK);

               }

    }

    delete pDlg; //加上这个点击完毕以后会自动销毁对话框

    return 1;

}
具体实现搜索和替换的功能就添加在OnFindReplace函数里面,嗯差不多把整个类都说完了,那就这样子吧,这几天争取把对话框都介绍一篇吧.

4. 重要成员函数

CFindReplaceDialog类:封装了标准查找/替换对话框
CFindReplaceDialog::Create 创建一个Find或Find/Replace对话框对象
BOOL Create(BOOL bFindDialogOnly,LPCTSTRlpszFindWhat,LPCTSTR lpszReplaceWhat=NULL,DWORD dwFlag=FR_DOWN,CWnd* pParentWnd=NULL);
  参数:bFindDialogOnly
为TRUE时,显示查找对话框,为FALSE时,显示查找/替换对话框;
lpszFindWhat 指定要查找的串的缺省值;
lpszReplaceWhat 指定替换串的缺省值;
dwFlag为标志位,用来定制对话框,它可以是一个或多个标志的组合,主要取值如下:
FR_DOWN 如果设置,对话框中的“向下查找”单选按钮被选中,如果没有设置,“向上查找”单选按钮被选中;
FR_HIDEUPDOWN 不显示查找方向单选按钮;
FR_HIDEMATCHCASE 不显示区分大小写复选按钮;
FR_HIDEWHOLEWORD 不显示全字匹配复选按钮;
FR_MATCHCASE 使区分大小写复选按钮处于选中状态;
FR_WHOLEWORD 使全字匹配复选按钮处于选中状态;
FR_NOMATCHCASE 使区分大小写复选按钮处于禁止(变灰)状态;
FR_NOUPDOWN 使查找方向单选按钮处于禁止(变灰)状态;
FR_NOWHOLEWORD 使全字匹配复选按钮处于禁止(变灰)状态;
FR_SHOWHELP 在对话框中显示一个帮助按钮。
pParentWnd 指向父窗口或属主窗口的指针。
  返回值:若创建成功,返回非0值,否则返回0。
 
CFindReplaceDialog::FindNext 确定用户是否要查找串的下一个出现处
BOOL FindNext()const;
  返回值:若用户单击查找“下一个”按钮,则返回非0值,否则返回0。
 
CFindReplaceDialog::GetFindString
检取对话框中的查找字符串
CString GetFindString()const;
  返回值:对话框中的查找字符串
 
CFindReplaceDialog::GetNotifier
检取当前查找/替换对话框的指针
static CFindReplaceDialog* PASCAL GetNotifier(LPARAM lParam);
  参数:lParam
传递给回调函数OnFindReplace()的lParam值
  返回值:指向当前查找/替换对话框的指针
 
CFindReplaceDialog::GetReplaceString
检取对话框中的替换字符串
CString GetReplaceString()const;
  返回值:对话框中的替换字符串
 
CFindReplaceDialog::IsTerminating
检取对话框是否终止
BOOL IsTerminating()const;
  返回值:若用户终止对话框,返回非0值,否则返回0
 
CFindReplaceDialog::MatchCase
检取区分大小写复选按钮状态
BOOL MatchCase()const;
  返回值:如果区分大小写复选按钮被选择,返回非0值,否则返回0
 
CFindReplaceDialog::MatchWholeWord
检取全字匹配复选按钮状态
BOOL MatchWholeWord()const;
  返回值:如果全字匹配复选按钮被选择,返回非0值,否则返回0
 
CFindReplaceDialog::ReplaceAll
确定用户是否要求全部替换
BOOL ReplaceAll()const;
  返回值:如果用户要求全部替换,返回非0值,否则返回0
 
CFindReplaceDialog::ReplaceCurrent
确定用户是否要求替换当前选择串
BOOL ReplaceCurrent()const;
  返回值:如果用户要求替换当前选择串,返回非0值,否则返回0
 
CFindReplaceDialog::SearchDown
检取查找方向
BOOL SearchDown()const;
返回值:如果为向下查找,返回非0值;若为向上查找,返回0
函数名 
 用途 
 FindNext 
 如果用户点击了Findnext按钮,该函数返回TRUE。 
 GetNotifier 
 返回一个指向当前CFindReplaceDialog对话框的指针。 
 GetFindString 
 返回一个包含要搜索字符串的CString对象。 
 GetReplaceString 
 返回一个包含替换字符串的CString对象。 
 IsTerminating 
 如果对话框终止了,则返回TRUE。 
 MatchCase 
 如果选择了对话框中的Match case检查框,则返回TRUE。 
 MatchWholeWord 
 如果选择了对话框中的Match Whole Word检查框,则返回TRUE。 
 ReplaceAll 
 如果用户点击了Replace All按钮,该函数返回TRUE。 
 ReplaceCurrent 
 如果用户点击了Replace按钮,该函数返回TRUE。 
 SearchDown 
 返回TRUE表明搜索方向向下,返回FALSE则向上。 

CColorDialog

首先是在堆栈上构建一个CColorDialog对象,然后调用CColorDialog::DoModal()来启动对话框。CColorDialog的构造函数为 
CColorDialog( COLORREF clrInit =0, DWORD dwFlags = 0, CWnd* pParentWnd = NULL );  \
参数clrInit用来指定初始的颜色选择,dwFlags用来设置对话框,pParentWnd用于指定对话框的父窗口或拥有者窗口。 
根据DoModal返回的是IDOK还是IDCANCEL可知道用户是否确认了对颜色的选择。DoModal返回后,调用CColorDialog::GetColor()可以返回一个COLORREF类型的结果来指示在对话框中选择的颜色。COLORREF是一个32位的值,用来说明一个RGB颜色。GetColor返回的COLORREF的格式是0x00bbggrr,即低位三个字节分别包含了蓝、绿、红三种颜色的强度。 

CfontDialog

CFontDialog类的辅助成员函数 

 

 函数名 
 用途 
 GetCurrentFont 
 用来获得所选字体的属性。该函数有一个参数,该参数是指向LOGFONT结构的指针,函数将所选字体的各种属性写入这个LOGFONT结构中。 

 GetFaceName 
 返回一个包含所选字体名字的CString对象。 
 GetStyleName 
 返回一个包含所选字体风格名字的CString对象。 
 GetSize 
 返回所选字体的尺寸(以10个象素为单位)。 
 GetColor 
 返回一个含有所选字体的颜色的COLORREF型值。 
 GetWeight 
 返回所选字体的权值。 
 IsStrikeOut 
 若用户选择了空心效果则返回TRUE,否则返回FALSE。 
 IsUnderline 
 若用户选择了下划线效果则返回TRUE,否则返回FALSE。 
 IsBold 
 若用户选择了黑体风格则返回TRUE,否则返回FALSE。 
 IsItalic 
 若用户选择了斜体风格则返回TRUE,否则返回FALSE。

CprintDialog

CPrintDialog的辅助成员函数 

 

 函数名 
 用途 
 GetCopies 
 返回要求的拷贝数。 
 GetDefaults 
 在不打开对话框的情况下返回缺省打印机的缺省设置,返回的设置放在m_pd数据成员中。 
 GetDeviceName 
 返回一个包含有打印机设备名的CString对象。 
 GetDevMode 
 返回一个指向DEVMODE结构的指针,用来查询打印机的设备初始化信息和设备环境信息。 
 GetDriverName 
 返回一个包含有打印机驱动程序名的CString对象。 
 GetFromPage 
 返回打印范围的起始页码。 
 GetToPage 
 返回打印范围的结束页码。 
 GetPortName 
 返回一个包含有打印机端口名的CString对象。 
 GetPrinterDC 
 返回所选打印设备的一个 HDC 句柄。 
 PrintAll 
 若要打印文档的所有页则返回TRUE。 
 PrintCollate 
 若用户选择了Collate Copies检查框(需要校对打印拷贝)则返回TRUE。 
 PrintRange 
 如果用户要打印文档的一部分页,则返回TRUE。 
 PrintSelection 
 若用户想打印当前选择的部分文档,则返回TRUE。 

CFileDialog

CFileDialog fileDlg(TRUE);

         fileDlg.m_ofn.lpstrTitle=_T("选择文件");

         fileDlg.m_ofn.lpstrDefExt= _T("exe");

         fileDlg.m_ofn.lpstrFilter="执行文件(*.exe)\0*.exe\0所有文件(*.*)\0*.*\0\0";

         if(IDOK==fileDlg.DoModal())                    //如果用户选择了文件并点击了确定

         {

                  //fileDlg.GetFileName()

                  //fileDlg.GetPathName()

         }

 

CFile file;

file.Open(fileDlg.GetPathName(),CFile::modeRead);

file.Close();               //关闭

 

 

 

         if(nChar== VK_RETURN)

         {

                  CFileDialogfileDlg(FALSE);

                  fileDlg.m_ofn.lpstrTitle=_T("选择文件");

                  //fileDlg.m_ofn.lpstrDefExt= _T("exe");

                  fileDlg.m_ofn.lpstrFilter="所有文件(*.*)\0*.*\0\0";

                  if(IDOK==fileDlg.DoModal())                    //如果用户选择了文件并点击了确定

                  {

                          CFilefile;

                          file.Open(fileDlg.GetPathName(),CFile::modeCreate|CFile::modeReadWrite);

                          charpMapName[22]={0};

                          file.Write(pMapName,22);

                          file.Write(&m_nMapCx,4);

                          file.Write(&m_nMapCy,4);

                          file.Write(m_pMap,m_nMapCx*m_nMapCy);

                          file.Close();               //关闭

                           MessageBox("保存成功");

                          return;

                  }

         }

 

 

 

 

//--------------多文件

         CFileDialogfileDlg(TRUE);

         charsBuffer[5000];

         ZeroMemory(sBuffer,sizeof(sBuffer));

         fileDlg.m_ofn.lpstrTitle=_T("选择文件");

         fileDlg.m_ofn.lpstrDefExt= _T("exe");

         fileDlg.m_ofn.lpstrFilter="执行文件(*.exe)\0*.exe\0所有文件(*.*)\0*.*\0\0";

         fileDlg.m_ofn.Flags|= OFN_ALLOWMULTISELECT;

         fileDlg.m_ofn.lpstrFile= sBuffer;

         fileDlg.m_ofn.nMaxFile= 5000;

 

 

         CStringstrFileName;

         if(IDOK==fileDlg.DoModal())                    //如果用户选择了文件并点击了确定

         {

                  //fileDlg.GetFileName()

                  //fileDlg.GetPathName()

                  CFilefile;

                  POSITIONpos = fileDlg.GetStartPosition();

                  while(pos)

                  {

                          strFileName= fileDlg.GetNextPathName(pos);

                          //MessageBox(str);

 

                          strFileName= fileDlg.GetPathName();

                          //MessageBox(str);

                  }

         }

 

 

 

 

//-------------------------------- 选择目录

         charszPath[MAX_PATH];     //存放选择的目录路径

         ZeroMemory(szPath,sizeof(szPath));  

         BROWSEINFObi;  

         bi.hwndOwner= m_hWnd;  

         bi.pidlRoot= NULL;  

         bi.pszDisplayName= szPath;  

         bi.lpszTitle= "请选择保存的目录:";  

         bi.ulFlags= 0;  

         bi.lpfn= NULL;  

         bi.lParam= 0;  

         bi.iImage= 0;  

         //弹出选择目录对话框

         LPITEMIDLISTlp = SHBrowseForFolder(&bi);  

 

         if(lp&& SHGetPathFromIDList(lp, szPath))  

         {

                  //szPath是目录

         }

         else

         {

                  //出错返回重选

         }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: