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

📄 chap5_5.htm

📁 VC++编程实例。非常详细
💻 HTM
📖 第 1 页 / 共 3 页
字号:
    <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 CRegisterSheet::OnApplyNow()</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">CFrameWnd* pFrameWnd = (CFrameWnd*) 
    AfxGetMainWnd();</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">//获取指向视图的指针</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">CView* pView = 
    pFrameWnd-&gt;GetActiveFrame()-&gt;GetActiveView();</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">pView-&gt;SendMessage(WM_USER_OUTPUT, 
    (WPARAM)this);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">m_PersonalPage.SetModified(FALSE);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">m_UnitPage.SetModified(FALSE); //使Apply按钮禁止</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">}</span></b></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">在CRegisterSheet类内嵌入了CPersonalPage和CUnitPage对象,在该类的构造函数中调用CPropertySheet::AddPage将两个页添加到对话框中。</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">标签式对话框的OK、Cancel和Apply按钮的ID分别是IDOK、IDCANCEL和ID_APPLY_NOW。在按下Apply按钮后,CRegisterSheet对象应该作出响应,由于ClassWizard不能为CRegisterSheet类提供Apply按钮的BN_CLICKED消息处理函数,故必须手工声明和定义消息处理函数OnApplyNow,并在消息映射表中手工加入ID_APPLY_NOW的BN_CLICKED消息映射,该映射是通过ON_BN_CLICKED宏实现的。</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">函数OnApplyNow用CWnd::SendMessage向视图发送用户定义消息WM_USER_OUTPUT,并调用CPropertyPage::SetModified(FALSE)来禁止Apply按钮。在发送消息时,将this指针作为wParam参数一并发送,这是因为视图对象需要指向CRegisterSheet对象的指针来访问该对象。该函数演示了如何在程序的任意地方获得当前活动视图的方法:首先,调用AfxGetMainWnd()返回程序主窗口的CWnd类指针,然后将该指针强制转换成CFrameWnd类型,接着调用CFrameWnd::GetActiveFrame返回当前活动的框架窗口的一个CFrameWnd型指针,最后调用CFrameWnd::GetActiveView返回当前活动视图的一个Cview型指针。</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">在函数OnApplyNow中主要调用了下列函数:</span></p>
    <blockquote>
      <blockquote>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">CWnd* AfxGetMainWnd( );<br>
        该函数返回一个指向程序的主窗口CWnd指针。程序的主窗口可以是一个框架窗口,也可以是一个对话框。</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">virtual CFrameWnd* GetActiveFrame( );<br>
        函数返回一个CFrameWnd型的指针。如果是MDI(多文档界面)程序,则该函数将返回当前活动的子框架窗口,如果是SDI(单文档界面)程序,该函数将返回主框架窗口本身。</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">CView* GetActiveView( ) const;<br>
        返回一个指向当前活动视图的Cview型指针。</span></p>
        <p ALIGN="JUSTIFY"><span style="font-size: 9pt">LRESULT SendMessage( UINT message, WPARAM 
        wParam = 0, LPARAM lParam = 0 );<br>
        用于向本窗口发送消息。SendMessage会直接调用发送消息的处理函数,直到发送消息被处理完后该函数才返回。参数message说明了要发送的消息,wParam和lParam则提供了消息的附加信息。</span></p>
      </blockquote>
    </blockquote>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">清单5.15 CRegisterView类的部分代码</span></b></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">//文件RegisterView.h</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">class CRegisterView : public CEditView</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">. . . . . .</span></b></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">// Generated message map functions</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">protected:</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">//{{AFX_MSG(CRegisterView)</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">afx_msg void OnEditRegister();</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">afx_msg void OnEditPropdlg();</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">//}}AFX_MSG</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">afx_msg LRESULT OnOutput(WPARAM wParam, 
    LPARAM lParam);</span></b></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">DECLARE_MESSAGE_MAP()</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">//文件RegisterView.cpp</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">#include &quot;stdafx.h&quot;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">#include &quot;Register.h&quot;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">#include &quot;RegisterDoc.h&quot;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">#include &quot;RegisterView.h&quot;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">#include &quot;RegisterDialog.h&quot;</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">#include &quot;PersonalPage.h&quot;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">#include &quot;UnitPage.h&quot;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">#include &quot;RegisterSheet.h&quot;</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">BEGIN_MESSAGE_MAP(CRegisterView, 
    CEditView)</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">ON_MESSAGE(WM_USER_OUTPUT, OnOutput)</span></b></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">END_MESSAGE_MAP()</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">void CRegisterView::OnEditPropdlg() </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">CRegisterSheet RegisterSheet(&quot;登录&quot;); 
    </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">RegisterSheet.m_PersonalPage.m_strName=&quot;张颖峰&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">RegisterSheet.m_UnitPage.m_strUnit=&quot;南京邮电学院&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">if(RegisterSheet.DoModal()==IDOK)</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">OnOutput((WPARAM)&amp;RegisterSheet,0);</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">//用户定义消息WM_USER_OUTPUT的处理函数</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">LRESULT CRegisterView::OnOutput(WPARAM 
    wParam, LPARAM lParam)</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">CRegisterSheet 
    *pSheet=(CRegisterSheet*)wParam;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">CString str;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">GetWindowText(str);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=&quot;\r\n&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=&quot;姓名:&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=pSheet-&gt;m_PersonalPage.m_strName;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=&quot;\r\n&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=&quot;工作单位:&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=pSheet-&gt;m_UnitPage.m_strUnit;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">str+=&quot;\r\n&quot;;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">SetWindowText(str);</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></b></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">OnEditPropdlg函数负责初始化和创建标签式对话框,这一过程与创建普通对话框差不多。如果用户是按OK按钮返回的,则调用OnOutput函数输出数据。</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">CRegisterView类的OnOutput函数负责处理标签对话框发来的用户定义消息WM_USER_OUTPUT。用户定义消息的处理函数只能用手工的方法加入。用户定义消息的消息映射是用ON_MESSAGE宏来完成的。</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">函数OnOutput的两个参数wParam和lParam分别对应消息的wParam和lParam值。该函数从wParam参数中获得指向CRegisterSheet对象的指针,然后将该对象中的数据输出到视图中。</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">编译并运行Register,试一试自己设计的标签式对话框。</span></p>
    <div align="center"><center><table border="0" cellpadding="0" cellspacing="0" width="615">
      <tr>
        <td><span style="font-size: 9pt"><a href="chap5_4.htm">上一页</a></span></td>
        <td><p align="right"><span style="font-size: 9pt"><a href="chap5_6.htm">下一页</a></span></td>
      </tr>
    </table>
    </center></div><font SIZE="5"><hr noshade color="#3973DE" size="1">
    <p align="center"></font><font size="2" color="#000000">本教程由<a
    href="http://vcdynasty.yeah.net">Visual C++王朝(Where programmers come together)</a>协助制作<br>
    未经许可,请勿以任何形式复制</font></td>
    <b>
  </tr>
</table>
</center></div></b>
</body>
</html>

⌨️ 快捷键说明

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