⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chap5_6.htm

📁 VC++编程实例。非常详细
💻 HTM
📖 第 1 页 / 共 5 页
字号:
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">if(dlg.DoModal()==IDOK)</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">CString str=&quot;The file name is:&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=dlg.GetFileName();</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">AfxMessageBox(str);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></b></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">void CCommonDlgView::OnCommonPrint() </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">// TODO: Add your command handler code 
    here</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">CPrintDialog dlg(FALSE, PD_ALLPAGES); 
    //Print对话框</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">//设置Print对话框的属性</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">dlg.m_pd.nCopies=2;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">dlg.m_pd.nMinPage=1;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">dlg.m_pd.nMaxPage=50;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">dlg.m_pd.nFromPage=1;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">dlg.m_pd.nToPage=50;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">if(dlg.DoModal()==IDOK)</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">DispPrintInfo(dlg);</span></b></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">void CCommonDlgView::OnCommonPrintsetup() </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">// TODO: Add your command handler code 
    here</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">CPrintDialog dlg(TRUE) //Print Setup对话框</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">if(dlg.DoModal()==IDOK)</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">DispPrintInfo(dlg);</span></b></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">void 
    CCommonDlgView::DispPrintInfo(CPrintDialog&amp; dlg)</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">CString str;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">CString temp;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=&quot;Driver name:&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=dlg.GetDriverName();</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=&quot;\nDevice name:&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=dlg.GetDeviceName();</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=&quot;\nPort name:&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=dlg.GetPortName();</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=&quot;\nNumber of copies:&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">temp.Format(&quot;%d&quot;,dlg.GetCopies());</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=temp;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=&quot;\nCollate:&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=dlg.PrintCollate()?&quot;Yes&quot;:&quot;No&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=&quot;\nPrint all:&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=dlg.PrintAll()?&quot;Yes&quot;:&quot;No&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=&quot;\nPrint range:&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=dlg.PrintRange()?&quot;Yes&quot;:&quot;No&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=&quot;\nSelection:&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=dlg.PrintSelection()?&quot;Yes&quot;:&quot;No&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=&quot;\nFrom page:&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">temp.Format(&quot;%d&quot;,dlg.GetFromPage());</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=temp;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=&quot;\nTo page:&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">temp.Format(&quot;%d&quot;,dlg.GetToPage());</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=temp;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">AfxMessageBox(str);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></b></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">void CCommonDlgView::OnCommonFind() </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">// TODO: Add your command handler code 
    here</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">//判断是否已存在一个对话框</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">if(m_pFindReplaceDlg)</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">if(m_bFindOnly)</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">//若Find对话框已打开,则使之成为活动窗口</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">m_pFindReplaceDlg-&gt;SetActiveWindow();</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">return;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">else</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">//关闭Replace对话框</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">m_pFindReplaceDlg-&gt;SendMessage(WM_CLOSE);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">m_bFindOnly=TRUE;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">//创建Find对话框</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">m_pFindReplaceDlg=new CFindReplaceDialog;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">m_pFindReplaceDlg-&gt;Create(TRUE,NULL,NULL,FR_DOWN,this);</span></b></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">void CCommonDlgView::OnCommonReplace() </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">// TODO: Add your command handler code 
    here</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">//判断是否已存在一个对话框</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">if(m_pFindReplaceDlg)</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">if(!m_bFindOnly)</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">//若Replace对话框已打开,则使之成为活动窗口</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">m_pFindReplaceDlg-&gt;SetActiveWindow();</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">return;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">else</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">//关闭Find对话框</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">m_pFindReplaceDlg-&gt;SendMessage(WM_CLOSE);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">m_bFindOnly=FALSE;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">//创建Replace对话框</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">m_pFindReplaceDlg=new CFindReplaceDialog;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">m_pFindReplaceDlg-&gt;Create(FALSE,NULL,NULL,FR_DOWN,this);</span></b></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">//Find和Replace对话框通知消息处理函数</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">LRESULT 
    CCommonDlgView::OnFindReplaceCmd(WPARAM, LPARAM lParam)</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">//判断对话框是否被关闭</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">if(m_pFindReplaceDlg-&gt;IsTerminating())</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">m_pFindReplaceDlg=NULL;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">return 0;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"></b><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">让我们先来看看对Color对话框的测试。在CCommonDlgView::OnCommonColor中创建了一个Color对话框,在此处该对话框的用途是为视图中显示的正文指定背景色。在CCommonDlgView的构造函数中将背景色m_BackColor的初值设置为白色(0x00000000)。若DoModal返回IDOK,则调用CColorDialog::GetColor获取用户选择的颜色并将之保存在m_BackColor成员中。然后,调用Invalidate和UpdateWindow函数以重绘视图。这两个函数的说明如下:</span></p>
    <blockquote>
      <blockquote>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">void Invalidate( BOOL bErase = TRUE );<br>
        该函数的作用是使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为窗口类提供了WM_PAINT的消息处理函数OnPaint,OnPaint负责重绘窗口。视图类有一些例外,在视图类的OnPaint函数中调用了OnDraw函数,实际的重绘工作由OnDraw来完成。参数bErase为TRUE时,重绘区域内的背景将被擦除,否则,背景将保持不变。</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">void UpdateWindow( );<br>
        该函数的作用是使窗口立即重绘。调用Invalidate等函数后窗口不会立即重绘,这是由于WM_PAINT消息的优先级很低,它需要等消息队列中的其它消息发送完后才能被处理。调用UpdateWindow函数可使WM_PAINT被直接发送到目标窗口,从而导致窗口立即重绘。</span></p>
      </blockquote>
    </blockquote>
    <p><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">在CCommonView::OnDraw函数中调用了CDC::SetBkColor来设置背景色。CDC类用于绘图,在后面的几章里将会对其作详细介绍。CDC::TextOut函数用于输出正文。两个函数的说明如下:</span></p>
    <blockquote>
      <blockquote>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">virtual COLORREF SetBkColor( COLORREF 
        crColor );<br>
        用于设置背景色。参数crColor指定了背景色的RGB值。返回的是原来的背景色。</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">BOOL TextOut( int x, int y, const 
        CString&amp; str );<br>
        在指定的位置输出正文。参数x和y指定了输出起点的横向和纵向坐标。str参数是输出的字符串。若该函数调用成功则返回TRUE。</span></p>
      </blockquote>
    </blockquote>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">对文件选择对话框的测试比较简单。在CCommonDlgView::OnCommonOpenfile和CCommonDlgView:OnCommonSavefile函数中,分别创建了一个Open对话框和一个Save对话框。在创建Open对话框时,在CFileDialog的构造函数中规定了OFN_FILEMUSTEXIST属性,这样当用户试图打开一个不存在的文件时,对话框会发出错误信息并让用户从新选择文件。在创建Save对话框时,在CFileDialog的构造函数中规定了OFN_OVERWRITEPROMPT属性,这样,当用户试图覆盖一个已存在的文件时,对话框会询问用户是否真的要覆盖该文件。</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">若用户确认了对文件的选择

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -