友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

VC语言6.0程序设计从入门到精通-第21部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!


象。CGridDemoView::OnFilePrint() 中这一步骤具体如下:  



    CDC dc;  



    dc。Attach(dlg。GetPrinterDC());//把打印设备上下文附加到 DC 对象  



    (5 )进行打印的具体过程,本章不涉及这类内容,故略过,用户可以参考第 14 章。  

    (6 )结束打印。CGridDemoView::OnFilePrint() 中的对应代码如下:  



    //结束打印  



    DeleteDC(dc。Detach());    



4。5。2    页面设置对话框  



    页面设置对话框如图 4…28 所示,提供了 Windows 打印页面设置的标准功能,包括选择 

纸张、打印方向和页边距等。CpageSetupDialog 类中封装了页面设置对话框。  

    下面演示 GridDemo 例程如何使用页面设置对话框进行页边距的设置:m_rectMargin 保 



 ·90 ·  


…………………………………………………………Page 100……………………………………………………………

                                                                             第 4 章    对话框  



存在 CGridDemoView  的成员变量中,为 CGridDemoView::OnFilePrint() 的打印代码设置页边 

距。相关代码在 GridDemoView。cpp 文件的 CGridDemoView::OnFilePrintSetup()函数中,具体 

如下:  

     (1)创建 CGridDemoView::OnFilePrintSetup()函数。  

     CGridDemoView::OnFilePrintSetup()函数在 GridDemo 例程中是“文件|页面设置”菜单项 

的消息响应函数,对应 ID 为 ID_FILE_PRINT_SETUP 。由 IDE 的 AppWizard 默认创建的 SDI 

应用程序中,ID_FILE_PRINT_SETUP              对应的菜单项是“文件|打印设置”,只需要将菜单项 

的标题更改为“页面设置”即可与  GridDemo                     例程一致。用户只要依照第                3  章的讲解,在 

CGridDemoView 类中为该菜单项 ON_FILE_PRINT_SETUP 添加消息处理函数,就可以创建 

CGridDemoView::OnFilePrintSetup()函数。  



                                                                



                                   图 4…28    页面设置对话框  



     (2 )创建页面设置对话框对象,并设置初始值。这部分功能在CGridDemoView::OnFilePrintSetup() 

函数的开头实现,代码如下:  



     //打开一个页面设置对话框,用于设置打印区域,以毫米为单位  



     CPageSetupDialog dlg;  



     //初始化页边空白区域  



     dlg。m_psd。rtMargin=m_rectMargin;  



     (3 )打开页面设置对话框,保存程序用户设置的页面空白区域。这部分功能的实现代码 

在 CGridDemoView::OnFilePrintSetup()函数中具体如下:  



     if (dlg。DoModal()==IDOK)  



     {  



         //设置新的页边空白区域  



         dlg。GetMargins(&m_rectMargin;NULL);  



     }  



4。5。3    查找对话框  



     用户在查找字符串时,在查找对话框中可进行查找字符串的设置和其他查找选项的设 



                                                                                     ·91 ·  


…………………………………………………………Page 101……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通  



置,如查找方向、是否区分大小写等,如图 4…29 所示。  



                                                             



                                  图 4…29    查找对话框  



    查找对话框在 MFC  中封装为 CFindReplaceDialog 。该对话框跟其他 Windows 通用对话 

框不同之处在于该对话框一般不作为模态对话框使用,而作为非模态对话框。如单击“查找 

下一个”按钮时,对话框会向父窗口发送消息,通知主窗口进行查找。创建查找对话框的步 

骤如下:  

    (1)添加“编辑|查找”菜单的消息处理函数 CGridDemoView::OnFind() 。  

    GridDemo  例程中创建查找对话框的代码在                   CGridDemoView::OnFind() 函数中添加。 

CGridDemoView::OnFind() 函 数 是 “ 编 辑 | 查 找 ” 菜 单 的 消 息 处 理 函 数 , 对 应           ID  为 

ID_EDIT_FIND 。需要按照第 3 章的讲解,在“编辑”顶层菜单中添加标题为“查找”,ID 为 

ID_EDIT_FIND   的子菜单,然后为  CGridDemoView           类添加这个       ID  的消息处理函数,即 

OnFind() 。  

    (2 )为 CGridDemoView 类添加 CFindReplaceDialog 的指针成员变量。  

    按照 4。3  节中非模态对话框的创建过程,应当在堆中创建查找对话框的对象,因此,用 

户还需为 CGridDemoView 添加类型为“CFindReplaceDialog * ”的 m_pFindDlg 成员变量。方 

法为在    IDE  左侧工作区单击“ClassView ”选项卡,展开  GridDemo  classes               节点,然后在 

CGridDemoView 上单击鼠标右键,选择“Add Member Variable ”菜单项,打开“Add Member  

Variable ”对话框,在“Variable Type ”栏中输入“CFindReplaceDialog * ”,在“Variable Name ” 

栏中输入“m_pFindDlg ”的变量。  

    (3 )创建 CFindReplaceDialog 对象,并打开查找对话框。  

    这一功能由 CGridDemoView::OnFind()函数实现,代码如下:  



    void CGridDemoView::OnFind()    



    {  



        // TODO: Add your mand handler code here  



        //在堆中创建对话框  



        m_pFindDlg = new CFindReplaceDialog();  



        //打开一个没有匹配全词的查找对话框  



        m_pFindDlg…》Create( TRUE; 〃〃; 〃〃; FR_DOWN|FR_HIDEWHOLEWORD; this );    



    }  



    (4 )在 CGridDemoView 类中添加接收查找对话框 FINDMSGSTRING 消息的处理函数。  

    打开查找对话框后,当用户单击“查找下一个”或者其他按钮时,对话框会向父窗口发 

送 FINDMSGSTRING 消息,这不是 MFC  中预先定义好的消息,故不能通过 ClassWizard 添 

加消息处理函数,必须手动添加。添加过程如下:  

    o  先在 CGridDemoView。h 文件的头部“class CGridDemoView ”语句前添加如下代码,将 

      FINDMSGSTRING 消息注册为 WM_FINDREPLACE  自定义消息:  



 ·92 ·  


…………………………………………………………Page 102……………………………………………………………

                                                                                           第 4 章    对话框  



     const WM_FINDREPLACE = ::RegisterWindowMessage(FINDMSGSTRING);  



     o  同   时   在     CGridDemoView。h        文   件   的     CGridDemoView        类   的   声   明   中   找    到 

         DECLARE_MESSAGE_MAP() ”语句,在这个语句前一行添加如下语句作为消息处 

        “ 

        理函数的声明:  



     afx_msg LONG OnFindReplace(WPARAM wParam; LPARAM lParam);  



     o  接着在  CGridDemoView。cpp  文件的头部找到“END_MESSAGE_MAP() ”语句,在这 

        个语句的前一行添加如下语句绑定消息                                   WM_FINDREPLACE            和消息处理函 数 

        OnFindReplace() :  



     ON_REGISTERED_MESSAGE(WM_FINDREPLACE; OnFindReplace)  



     o  最后在 CGridDemoView。cpp 文件的末尾编写 CGridDemoView::OnFindReplace()函数, 

        其代码如下:  



     LRESULT CGridDemoView::OnFindReplace(WPARAM wparam; LPARAM lparam)  



      {  



           //获得查找对话框的对象指针  



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



             



           if( NULL != pDlg )  



           {  



                if (pDlg…》FindNext())  



                {  



                      //处理单击“查找下一个”按钮的查找处理  



                      ……  



                }  



           }  



           else if (pDlg…》IsTerminating())  



           {  



                //处理查找对话框关闭的消息  



                delete pDlg;          //删除对话框对象  



           }  



           return 0;  



      }  



     在 CGridDemoView::OnFindReplace()查找消息处理函数中,先调用了 CFindReplaceDialog 

静态成员函数 GetNotifier 根据消息的 lparam 参数获得查找对话框的指针,然后访问查找对话 

框对象查询当前的查找状态,主要有以下一些查询函数。  

     o  FindNext() :查询用户是否单击“查找下一个”按钮。  

     o  GetFindString() :获得查找字符串。  

     o  GetReplaceString() :获得替换字符串。  

     o  IsTerminating() :获得对话框是否关闭。  

     o  MatchCase() :获得是否区分大小写。  

     o  MatchWholeWord() :获得是否匹配全词。  



                                                                                                     ·93 ·  


…………………………………………………………Page 103……………………………………………………………

Visual C++ 6。0 程序设计从入门到精通  



    o  ReplaceAll() :查询用户是否单击“替换全部”按钮。  

    o  ReplaceCurrent() :查询用户是否单击“替换”按钮。  

    o  SearchDown():查询用户是否想向下查找。  

    完成上述 4 个步骤,就可以在 GridDemo 例程中使用查找对话框了。  



4。5。4    文件对话框  



    文件对话框一般出现在用户打开或保存文件时,用于选择打开或保存的文件路径,如图 

4…30 所示。  



                                                                  



                                   图 4…30    文件对话框  



    使用文件对话框时,同样只需打开一个对应的模态对话框。CFileDialog 封装了文件对话 

框的操作。相关代码在 CGridDemoDoc::OnFileOpen()函数中,添加步骤如下:  

     (1)创建 CGridDemoDoc::OnFileOpen()消息处理函数。  

    CGridDemoDoc::OnFileOpen()是文档类 CGridDemoDoc 处理“文件|打开”菜单消息的函 

数。用户可以根据第 3 章的讲解,为 GridDemoDoc 添加 ID 为 ID_FILE_OPEN 的消息处理函 

数,名称为 OnFileOpen,即可完成该处理函数的添加。  

     (2 )创建打开文件对话框对象。  

    这部分功能在         CGridDemoDoc::OnFileOpen() 函数的头部实现,其创建了名为                     dlg 的 

CFileDialog 类对象,代码如下:  



    //设置过滤器  



    char szFilters''=  



         〃数据文件  (*。dat)|*。dat|所有文件  (*。*)|*。*||〃;  



    //创建打开文件对话框  



    CFileDialog dlg (TRUE; 〃数据文件〃; 〃*。dat〃;  



         OFN_FILEMUSTEXIST| OFN_HIDEREADONLY; szFilters);  



     (3 )打开并使用打开文件对话框。  

    这部分功能在 CGridDemoDoc::OnFileOpen()函数中,具体如下:  



    //运行对话框  



    if( dlg。DoModal ()==IDOK )  



     {  



         //处理选中的文件  



         CString szPathName = dlg。GetPathName();  



 ·94 ·  


…………………………………………………………Page 104……………………………………………………………

                                                                              第 4 章    对话框  



         SetTitle(dlg。GetFileTitle());  



         OnOpenDocument(szPathName);      //打开文档  



     }  



     在这个步骤中,还可以用以下 CFileDialog 的一些成员函数获得对话框的选择。  

     o  GetFileExt() :获得选定文件的后缀名。  

     o  GetFileName() :获得选定文件的名称,包括后缀名。  

     o  GetFileTitle() :获得选定文件的标题,即不包括后缀名。  

     o  GetFolderPath() :获得选定文件的目录。  

     o  GetNextPathName() :获得下一个选定的文件的路径全名。  

     o  GetPathName() :获得选定文件的路径全名。  

     o  GetReadOnlyPref() :获得是否“以只读方式打开”。  

     o  GetStartPosition() :获得文件名列表中的第一个元素的位置。  



4。5。5    字体对话框  



     字体对话框用于选择字体,如图 4…31 所示。CFontDialog 封装了字体对话框的操作,其 

使用方法类似于其他模态通用对话框。  



                                                                 



                                     图 4…31    字体对话框  



     相关代码在 CGridDemoView::OnSetFont()函数中,添加步骤如下:  

     (1)添加 CGridDemoView::OnSetFont()消息处理函数。  

     CGridDemoView::OnSetFont() 函数是“编辑|字体”菜单的消息处理函数,对应                                ID  为 

ID_SET_FONT 。用户需要按照第 3 章的讲解,在“编辑”顶层菜单中添加标题为“字体”, 

ID 为 ID_SET_FONT 的子菜单,然后为 CGridDemoView 类添加这个 ID 的消息处理函数,即 

OnSetFont() 。  

     (2 )编辑 CGridDemoView::OnSetFont()消息处理函数使用字体对话框。代码如下:  



     void CGridDemoView::OnSetFont()    



     {  



         // TODO: Add your 
返回目录 上一页 下一页 回到顶部 1 2
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!