MFC公用对话框的使用

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 创建一个FindFind/Replace对话框对象

BOOL Create(BOOL bFindDialogOnly,LPCTSTRlpszFindWhat,LPCTSTR lpszReplaceWhat=NULL,DWORD dwFlag=FR_DOWNCWnd* 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

         {

                  //出错返回重选

         }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苦逼的IT男

你的鼓励是我最大的创作动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值