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

📄 chap6_4.htm

📁 VC++编程实例。非常详细
💻 HTM
📖 第 1 页 / 共 2 页
字号:
<html>

<head>
<title>6.4 在非对话框窗口中使用控件</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
</head>

<body link="#3973DE" alink="#3973DE" background="../../bg.gif">
<font SIZE="5"><b><div align="center"><center>

<table border="0" width="85%" cellspacing="0" cellpadding="0" bgcolor="#FFFFFF">
  <tr>
    </b><td><div align="center"><center><table border="0" width="615" cellpadding="0"
    cellspacing="0" height="20">
      <tr>
        <td width="377" bgcolor="#15397D" height="20"></td>
        <td width="238" bgcolor="#000000" height="20"><p align="right"></font><a
        href="../../vc.htm"><span style="text-decoration: none"><font color="#FFFFFF">电脑报Visual 
        C++网络教程</font></span></a></td>
      </tr>
    </table>
    </center></div><font FACE="Times New Roman" SIZE="3"><b><p ALIGN="CENTER"></b></font><font
    color="#3973DE" FACE="Times New Roman" SIZE="3">6.4 </font><font SIZE="3" color="#3973DE">在非对话框窗口中使用控件</font><font
    FACE="Times New Roman" SIZE="3"></p>
    <p ALIGN="JUSTIFY"></font><span style="font-size: 9pt">  控件并不是对话框独有的,事实上,很多非对话框窗口都可以使用控件.比较典型的应用是在表单视图、工具条和状态栏中使用控件.</span></p>
    <b><p ALIGN="JUSTIFY"></b><span style="font-size: 9pt"><font color="#3973DE">6.4.1 
    在表单视图中使用控件</font></span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">  MFC提供了一个名为CFormView的特殊视图类,我们称其为表单视图.表单视图是指用控件来输入和输出数据的视图,用户可以方便地在表单视图中使用控件.表单视图具有对话框和滚动视图的特性,它使程序看起来象是一个具有滚动条的对话框.在有些情况下,用表单视图比用普通视图更符合用户的需要,例如,在向数据库输入数据时,显然用表单的形式可以更习惯些.</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">  用AppWizard可以方便地创建基于表单视图的应用程序,只要在MFC 
    AppWizard对话框的第六步先选择CView,然后在Base class栏中选择CFormView,AppWizard就会创建一个基于CFormView的应用程序.</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">  读者可以按上述方法建立一个名为Test的应用程序.在Test工程的资源中,读者会发现一个ID为IDD_TEST_DIALOG的对话框模板,该对话框模板可供用户放置和安排控件.在程序运行时,框架根据该对话框模板创建CFormView对象,并根据模板的信息在表单视图中自动创建控件.与设计对话框类相类似,用户可以用ClassWizard为表单视图类加入与控件对应的成员变量,可以调用UpdateData在控件和成员变量之间交换数据,但对控件的初始化工作是在OnInitialUpdate函数而不是在OnInitDialog函数中进行的.</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">  基于表单视图的应用程序与基于对话框的应用程序都是在应用程序中直接使用控件,但二者有很多不同之处.基于对话框的应用程序是用一个对话框来作为程序的主窗口的,因而程序的主窗口的特性与对话框类似,如窗口的大小不能改变,程序没有菜单条、工具条和状态栏等.基于表单视图的应用程序仍然是基于Doc/View框架结构的(见七、八、九章),只是视图被换成了表单视图,也就是说,应用程序的窗口可以改变大小,程序有菜单条、工具条和状态栏,且程序仍然可以Dov/View运行机制来处理文档.</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">  表单视图比较简单,这里就不举例说明了.在第十章,读者会看到使用表单视图的例子.</span></p>
    <b><p ALIGN="JUSTIFY"></b><span style="font-size: 9pt"><font color="#3973DE">6.4.2 
    在工具条和状态栏中使用控件</font></span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">  一个专业的程序常常会在工具条和状态栏中加入一些控件以方便用户的使用.例如,在Developer 
    Studio的工具条中就有不少组合框,而在状态栏中则常常会显示一个进度条来表明工作的进度.</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">  如果读者想在自己程序的工具条和状态栏中加入控件,则需要掌握一些技巧.在本小节,我们将结合一个具体实例来演示这些技巧.例程的名为CtrlInBar,其界面如图6.8所示.可以看出,该程序在工具条中创建了一个组合框,在状态栏中创建了一个进度条.</span></p>
    <p ALIGN="center"><span style="font-size: 9pt"><img src="T6_8.gif"
    alt="T6_8.tif (174388 bytes)" WIDTH="480" HEIGHT="342"></span></p>
    <p ALIGN="center"><span style="font-size: 9pt">图6.8 CtrlInBar程序</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">  现在让我们开始工作.首先,请读者用AppWizard建立一个名为CtrlInBar的单文挡MFC应用程序,然后,请按清单6.4修改源代码.注意在程序中编写了一个CToolBar类的派生类CMyToolBar,以及一个CStatusBar的派生类CMyStatusBar,这两个类与CMainFrame类在同一模块中.</span></p>
    <b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">清单6.4 
    在工具条和状态栏中创建控件的有关代码</span></b></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">// MainFrm.h : interface of the CMainFrame 
    class</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">//</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">/////////////////////////////////////////////////////////////////////////////</span></p>
    <b><p ALIGN="JUSTIFY"><span style="font-size: 9pt">#define IDC_MYCOMBO 100</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">class CMyToolBar : public CToolBar</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">public:</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">CComboBox m_ComboBox;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">BOOL CreateComboBox(int nIndex);</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">#define ID_INDICATOR_PROGRESS 100</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">class CMyStatusBar : public CStatusBar</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">public:</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">CProgressCtrl m_Progress;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">int m_nProgressPane;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">BOOL CreateProgressCtrl(int nPane);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">afx_msg void OnSize(UINT nType, int cx, 
    int cy);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">DECLARE_MESSAGE_MAP()</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">class CMainFrame : public CFrameWnd</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">protected: // control bar embedded members</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"><b>CMyStatusBar</b> m_wndStatusBar;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"><b>CMyToolBar</b> m_wndToolBar;</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">};</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">// MainFrm.cpp : implementation of the 
    CMainFrame class</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">static UINT indicators[] =</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">ID_SEPARATOR, // status line indicator</span></p>
    <p><b><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">ID_SEPARATOR</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">int CMainFrame::OnCreate(LPCREATESTRUCT 
    lpCreateStruct)</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">if (CFrameWnd::OnCreate(lpCreateStruct) == 
    -1)</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">return -1;</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt"> </span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">if (!m_wndToolBar.Create(this) ||</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">!m_wndToolBar.LoadToolBar(IDR_MAINFRAME))</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">TRACE0(&quot;Failed to create 
    toolbar\n&quot;);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">return -1; // fail to create</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_wndStatusBar.Create(this) ||</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">!m_wndStatusBar.SetIndicators(indicators,</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">sizeof(indicators)/sizeof(UINT)))</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">{</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">TRACE0(&quot;Failed to create status 
    bar\n&quot;);</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">return -1; // fail to create</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">// TODO: Remove this if you don't want 
    tool tips or a resizeable toolbar</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">m_wndToolBar.SetBarStyle(m_wndToolBar.GetBarStyle() 
    |</span></p>
    <p ALIGN="JUSTIFY"><span style="font-size: 9pt">CBRS_TOOLTIPS | CBRS_FLYBY | 
    CBRS_SIZE_DYNAMIC);</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">m_wndToolBar.CreateComboBox(0); //在工具条的最左边创建组合框</span></p>

⌨️ 快捷键说明

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