vc++6.0-常用控件2

实验目的: (1)设计一个如图3.1所示的“学生基本信息”对话框。 (2)在实验2的基础上,实现功能:在图2.1中的“课程信息”按钮下方添加一个“学生基本信息”按钮,单击该按钮,弹出“学生基本信息”对话框,单击“添加”按钮,学生基本信息显示在列表框中., (3)在CEx_CtrlsDlg对话框中添加一个滚动条和两个滑动条来调整对话框的背景颜色的3个分量:R(红色分量)、G(绿色分量)和B(蓝色分量),结果如图3.2所示。

图3.1 “学生基本信息”对话框

图3.2 设置对话框背景颜色

实验仪器:

电脑一台(CPU:Inter(R) Xeon(R) E3-1230 v3 @ 3.3GHz
内存:8.0GB 操作系统:Win8.1虚拟机xp 使用软件:Vc++ 6.0)

1**在实验3的工作文件夹中复制Ex_Ctrls**文件夹

将本书实验2中的Ex_Ctrls文件夹复制到实验3的工作文件夹中。

2**启动Visual C++ 6.0**

启动Visual C++ 6.0系统。

3**.**创建并添加“学生基本信息”对话框

① 选择“文件”→“打开工作区”菜单,将“…\Visual C++程序\实验\实验3\Ex_Ctrls”文件夹中的Ex_Ctrls项目打开。

② 添加一个新的对话框资源,将ID号改为IDD_INPUT,标题为“学生成绩输入”,将对话框字体改为“宋体,9号”。将OK和Cancel按钮标题改为“确定”和“取消”。

③ 调整对话框的大小,将“确定”和“取消”按钮移至对话框的下方,然后显示对话框网格。

④ 参看图3.1,向对话框添加如表3.1所示的控件。

3.1 学生基本信息对话框添加的控件

添加的控件

ID

标 题

其 他 属 性

编辑框

IDC_EDIT_NAME

——

默认

编辑框

IDC_EDIT_NO

——

默认

单选按钮

IDC_RADIO_MALE

默认

单选按钮

IDC_RADIO_FEMALE

默认

日期时间控件

IDC_DATETIMEPICKER1

——

默认

组合框控件

IDC_COMBO_SPECIAL

——

默认

⑤ 双击对话框模板空白处,为该对话框模板创建一个对话框类CInputDlg。

⑥ 在MFC ClassWizard的Member Variables页面中,确定Class name中是否已选择了CInputDlg,选中所需的控件ID号,双击鼠标或单击Add Variables按钮。依次为表3.2控件增加成员变量。

3.2 控件变量

控件ID

变 量 类 别

变 量 类 型

变 量 名

范围和大小

IDC_EDIT_NAME

Value

CString

m_strName

20

IDC_EDIT_NO

Value

CString

m_strNO

20

IDC_COMBO_SPECIAL

Value

CString

m_strSpecial

IDC_COMBO_SPECIAL

Control

CComboBox

m_comboSpecial

IDC_DATETIMEPICKER1

Control

CTime

m_tBirth

⑦ 在MFC ClassWizard的Messsage Maps页面中,为CInputDlg添加WM_INITDIALOG消息映射,并添加下列代码:

1
2
3
4
5
6
7
8
9
BOOL CInputDlg::OnInitDialog()
{
CheckRadioButton(IDC\_RADIO\_MALE,IDC\_RADIO\_FEMALE,IDC\_RADIO\_FEMALE);// 默认的为女性。或者仿照课本112页用if…else语句。
         m_comboSpecial.AddString( "机械工程及其自动化" );
         m_comboSpecial.AddString( "电气工程及其自动化" );
         m_strSpecial = "机械工程及其自动化";
         m_tBirth=CTime(1990,1,1,0,0,0);
         UpdateData(FALSE);
}

⑧ 用MFC ClassWizard为CInputDlg增加IDC_SPIN_S1控件的UDN_DELTAPOS消息映射,并添加下列代码:

1
2
3
4
5
6
7
8
9
10
void CInputDlg::OnDeltaposSpinS1(NMHDR* pNMHDR, LRESULT* pResult)
{
         NM\_UPDOWN* pNMUpDown = (NM\_UPDOWN*)pNMHDR;
         UpdateData(TRUE);                                // 将控件的内容保存到变量中
         m_fScore1 += (float)pNMUpDown->iDelta * 0.5f;
         if (m\_fScore1<0.0) m\_fScore1 = 0.0f;
         if (m\_fScore1>100.0) m\_fScore1 = 100.0f;
         UpdateData(FALSE);                     // 将变量的内容显示在控件中
         *pResult = 0;
}

改为:(或者在初始化函数中修改m_bMale=0) 模仿课本111页,为 CInputDlg类添加BOOL类型的成员变量m_bMale(或手动在.h文件中添加BOOL m_bMale;),并在CInputDlg类设置该变量的初始值。如下

1
2
3
4
5
6
7
8
9
10
11
12
CInputDlg::CInputDlg(CWnd* pParent /*=NULL*/)
         : CDialog(CInputDlg::IDD, pParent)
{
         m_bMale=FALSE;//或者=0,表示默认选择女
         //{ {AFX\_DATA\_INIT(CInputDlg)
         m\_strName = \_T("");
         m\_strSpecial = \_T("");
         m\_strNo = \_T("");
         m_tBirth = 0;
         //}}AFX\_DATA\_INIT

}

⑨ 打开IDD_EX_CTRLS_DIALOG对话框资源,在 “课程信息”按钮下方添加一个“学生基本信息”按钮,并将ID号设为IDC_BUTTON_STUINFO。

⑩ 用MFC ClassWizard为按钮IDC_BUTTON_STUINFO添加BN_CLICKED消息映射,并添加下列代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void CEx_CtrlsDlg::OnButtonStuinfo()
{
         CInputDlgdlg;
         if (IDOK != dlg.DoModal()) return;
        while(m_List.GetCount()!=0)        
              m_List.DeleteString(0);
         CString strSex("女");
         if (dlg.m_bMale) strSex = "男";
         m\_List.AddString( "姓名:"+dlg.m\_strName);
         m\_List.AddString( "学号:"+dlg.m\_strNo);
         m_List.AddString( "性别:"+strSex);
         m\_List.AddString( "出生年月:"+dlg.m\_tBirth.Format("%Y-%m-%d"));
         m\_List.AddString( "所学专业:"+dlg.m\_strSpecial);
}

在Ex_CtrlsDlg.cpp文件的前面添加CStuInfoDlg类的头文件包含:

1
2
#include "CourseDlg.h"
#include "StuInfoDlg.h"

编译运行并测试。结果如图3.3所示。 图3.3 学生基本信息添加后的结果

4**.**改变对话框背景颜色

① 将项目工作区窗口切换到ResourceView页面,打开IDD_EX_CTRLS_DIALOG对话框资源。 ② 打开对话框网格,参看图3.2的控件布局,为对话框添加如表3.3所示的一些控件。 表3.3 添加的控件

添加的控件

ID

标 题

其 他 属 性

垂直滚动条

IDC_SCROLLBAR_RED

——

默认

滑动条(绿色)

IDC_SLIDER_GREEN

——

方位为Vertical, 其他默认

滑动条(蓝色)

IDC_SLIDER_BLUE

——

方位为Vertical, 其他默认

③ 用MFC ClassWizard为表3.4控件添加成员变量。 表3.4 控件变量

控件ID

变 量 类 别

变 量 类 型

变 量 名

范围和大小

IDC_SCROLLBAR_RED

Control

CScrollBar

m_scrollRed

——

IDC_SLIDER_GREEN

Control

CSliderCtrl

m_sliderGreen

——

IDC_SLIDER_GREEN

Value

int

m_nGreen

IDC_SLIDER_BLUE

Control

CSliderCtrl

m_sliderBlue

——

IDC_SLIDER_BLUE

Value

int

m_nBlue

——


④ 为CEx_CtrlsDlg类添加两个成员变量,一个是int型m_nRed,用来设置颜色R、G、B中的红色分量,另一个是画刷CBrush类对象m_Brush,用来设置对话框背景所需要的画刷。

⑤ 在CEx_CtrlsDlg::OnInitDialog函数中添加下列代码:

1
2
3
4
5
6
7
8
9
10
11
BOOL CEx_CtrlsDlg::OnInitDialog()
{
         …
         m_scrollRed.SetScrollRange(0, 255);
         m_sliderBlue.SetRange(0, 255);
m_sliderGreen.SetRange(0, 255);
         m\_nBlue = m\_nGreen = m_nRed = 192;
         UpdateData( FALSE );
         m\_scrollRed.SetScrollPos(m\_nRed);
         return TRUE;  // return TRUE unless you set the focus to a control
}



⑥ 用MFC ClassWizard为CEx_CtrlsDlg类映射WM_VSCROLL消息,并添加下列代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void CEx_CtrlsDlg::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
         int nID = pScrollBar->GetDlgCtrlID();                     // 获取对话框中控件ID号
         if (nID == IDC\_SCROLLBAR\_RED) {                   // 或是滚动条产生的水平滚动消息
                  switch(nSBCode){
                           case SB\_LINEUP:       m\_nRed--;                   // 单击滚动条向上箭
                                                               break;
                           case SB\_LINEDOWN:         m\_nRed++;         // 单击滚动条向下箭头
                                                               break;
                           case SB\_PAGEUP:      m\_nRed -= 10;  
                                                               break;
                           case SB\_PAGEDOWN:m\_nRed += 10
                                                               break;
                           case SB\_THUMBTRACK:m\_nRed = nPos;   
                                                               break;

                  }
                  if (m\_nRed<0) m\_nRed = 0;
                  if (m\_nRed>255) m\_nRed = 255;
                  m\_scrollRed.SetScrollPos(m\_nRed);
         }
         Invalidate();                  // 使对话框无效,强迫系统重绘对话框
                  CDialog::OnVScroll(nSBCode, nPos, pScrollBar);

}

1
2
3
4
5
6
7
8
9
10
11
12
⑦ 用MFC ClassWizard为CEx\_CtrlsDlg类映射WM\_CTLCOLOR消息,并添加下列代码:

HBRUSH CEx_CtrlsDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
         //HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
         UpdateData(TRUE);
         COLORREF color = RGB(m\_nRed, m\_nGreen, m_nBlue);
         m_Brush.Detach();                                  // 使画刷和对象分离
         m_Brush.CreateSolidBrush(color);                   // 创建颜色画刷
         pDC->SetBkColor( color );                    // 设置背景颜色
         return (HBRUSH)m_Brush;                   // 返回画刷句柄,以便系统使此画刷绘制对话框
}

⑧ 编译运行并测试。

5**.**写出实验报告

分析上述运行结果以及思考与练习,写出实验报告。

思考与练习

(1)若将控制绿色和蓝色颜色分量的滑动条全部换成滚动条,则代码应如何修改?

(2)若将CEx_CtrlsDlg对话框中的列表框换成静态文本,并用于显示信息,则应如何实现?

(3)模仿课本112页为CInputDlg的IDOK添加BN_CLICKED消息映射。 实验结果分析 知道了控件的基本操作,添加控件和修改代码,调整控件位置。

  • 版权声明: 本博客所有文章,未经许可,任何单位及个人不得做营利性使用!转载请标明出处!如有侵权请联系作者。
  • Copyrights © 2015-2020 翟天野

请我喝杯咖啡吧~