1、visual c+ 程序设计实验指导Visual C+程序设计实验指导海南软件职业技术学院Hainan Software Profession Institute(2005-2006学年度第二学期)教师姓名: 季 文 天 系 部: 软 件 工 程 系 授课专业: 软件技术 授课班级: 04软件技术(3) 实验一:编制一个MFC应用程序一、实验目的: 1. 熟悉并掌握MFC基本应用程序结构 2掌握MFC消息映射机制 3掌握响应简单事件的方法二、实验环境: Windows 2000 Professional Visual C+ 6.0 Enterprise三、实验内容 1、编写一个简单的MFC应用
2、程序四、试验步骤:1、建立一个Win32工程,HelloMFC。2、选择“工程”“设置”菜单,选择包含MFC类库。3、输入下列代码:#include / MFC头文件class CHelloApp : public CWinApp / 声明应用程序类 public: virtual BOOL InitInstance(); ;CHelloApp theApp; / 建立应用程序类的实例class CMainFrame: public CFrameWnd / 声明主窗口类 public: CMainFrame() / 创建主窗口 Create(NULL, 我的窗口, WS_OVERLAPPEDW
3、INDOW, CRect(0,0,400,300); protected: afx_msg void OnLButtonDown(UINT nFlags, CPoint point); DECLARE_MESSAGE_MAP();/ 消息映射入口BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_WM_LBUTTONDOWN() / 单击鼠标左键消息的映射宏END_MESSAGE_MAP()void CMainFrame:OnLButtonDown(UINT nFlags, CPoint point) MessageBox (你好,我的Visual C+世界
4、!, 问候, 0) ; CFrameWnd:OnLButtonDown(nFlags, point);/ 每当应用程序首次执行时都要调用的初始化函数BOOL CHelloApp:InitInstance() m_pMainWnd = new CMainFrame(); m_pMainWnd-ShowWindow(m_nCmdShow); m_pMainWnd-UpdateWindow(); return TRUE; 五、实验报告依据本节实验内容书写实验报告,包括如下内容:(1)实验目的(2)实验环境(3)操作步骤(4)遇到的问题及解决方法(5)回答实验问题(6)实验心得和体会 实验二: 编辑框
5、控件一、实验目的: 1. 掌握编辑控件风格 2掌握编辑控件单行、多行风格 3掌握编辑控件数据的获取二、实验环境: Windows 2000 Professional Visual C+ 6.0 Enterprise三、实验内容 1、使用静态文本、组框、编辑框以及按钮等控件,设计界面。用户在“成绩1”、“成绩2”和“成绩3”编辑框中输入成绩后,单击计算平均分按钮,将显示出这三个成绩的平均分。四、试验步骤:(1)打开前面的Ex_CommCtrls。(2)向应用程序中添加一个对话框资源,打开属性对话框将其标题改为“使用编辑框”,ID号改为IDD_EDIT。(3) 用编辑器为对话框添加如下表所示的一些
6、控件。(4)双击对话框模板或按Ctrl+W快捷键,为对话框资源IDD_EDIT创建一个对话框类CEditDlg。 (5)打开ClassWizard的Member Variables标签,在Class name中选择CEditDlg,选中所需的控件ID号,双击鼠标或单击Add Variables按钮。依次为控件增加成员变量。 (6)切换到ClassWizard的Messsage Maps标签页,为CEditDlg增加WM_INITDIALOG的消息映射,并添加下列代码: BOOL CEditDlg:OnInitDialog() CDialog:OnInitDialog(); m_strAve =
7、 0.00; UpdateData(FALSE);/ 将成员变量数据传给控件,并在控件中显示 return TRUE; (7)用ClassWziard为按钮IDC_BUTTON1添加BN_CLICKED的消息映射,并增加下列代码: void CEditDlg:OnButton1() UpdateData(); / 将控件显示的数据传给成员变量 double ave = (double)(m_nScore1+m_nScore2+m_nScore3)/3.0; m_strAve.Format(%6.2f, ave); UpdateData(FALSE); / 将成员变量数据传给控件并显示 (8)定
8、位到CEx_CommCtrlsDlg:OnButton1函数处,修改代码如下: if (nID = IDC_RADIO1) CEditDlg dlg; dlg.DoModal(); (9)在Ex_CommCtrlsDlg.cpp文件的开始处,增加包含CEditDlg的头文件。 #include “EditDlg.h” (10)编译运行并测试。五、实验报告依据本节实验内容书写实验报告,包括如下内容:(1)实验目的(2)实验环境(3)操作步骤(4)遇到的问题及解决方法(5)回答实验问题(6)实验心得和体会 实验三: 列表控件一、实验目的: 1. 掌握列表控件的风格 2掌握列表控件通知消息 3掌握列
9、表控件的几种基本操作二、实验环境: Windows 2000 Professional Visual C+ 6.0 Enterprise三、实验内容 1、将一个SCORE结构(含有三门成绩的数据成员)数据和列表框中每一个学生姓名列表关联起来。用户单击添加记录按钮时,学生成绩记录中的“姓名”被添加在列表框中,该学生的成绩与该列表项关联。单击删除记录时,列表框中当前选择项被删除,相关联的数据所占的内容空间被释放。任何时候选中列表框中某个学生,相应的记录数据都被显示出来四、试验步骤:(1)打开前面创建的基于对话框应用程序程序项目Ex_CommCtrls。(2)向应用程序中添加一个对话框资源IDD_L
10、ISTBOX,标题定为“使用列表框”,用ClassWizard为此对话框类定义为CListBoxDlg。(3)删除原来的Cancel按钮,用编辑器为对话框添加如下表所示的控件。 (4)打开ClassWizard的Member Variables页面,在Class name中选择CListBoxDlg,选中所需的控件ID号,双击鼠标或单击Add Variables按钮。 (5)切换到ClassWizard的Messsage Maps标签页,为按钮IDC_DATA_ADD添加BN_CLICKED的消息映射,增加代码: void CListBoxDlg:OnDataAdd() UpdateData(
11、TRUE); if (m_strName.IsEmpty() / 判断m_strName是否为空 MessageBox(姓名不能为空!); return; m_strName.TrimLeft(); / 裁剪m_strName左边的空格 m_strName.TrimRight(); / 裁剪m_strName右边的空格 if (m_List.FindString(-1,m_strName) != LB_ERR) MessageBox(列表框中已有相同姓名,不能添加!); return; int nIndex = m_List.AddString(m_strName); / 向列表框添加学生姓名
12、 / 将该学生成绩与新增的列表项关联起来 SCORE data; data.score1 = m_nScore1; data.score2 = m_nScore2; data.score3 = m_nScore3; m_List.SetItemDataPtr(nIndex, new SCORE(data); (6)用ClassWizard为按钮IDC_DATA_DEL添加BN_CLICKED的消息映射,增加代码: void CListBoxDlg:OnDataDel() int nIndex = m_List.GetCurSel(); / 获得当前选择项的索引 if (nIndex != LB
13、_ERR) m_List.DeleteString(nIndex); / 删除当前选择项 m_strName.Empty(); m_nScore1 = m_nScore2 = m_nScore3 = 0; UpdateData(FALSE); else MessageBox(当前没有选择项或列表框操作失败!); (7)用ClassWizard为按钮IDC_LIST1添加LBN_SELCHANGE的消息映射,增加代码: void CListBoxDlg:OnSelchangeList1() int nIndex = m_List.GetCurSel(); if (nIndex != LB_ERR
14、) m_List.GetText(nIndex, m_strName); SCORE *data=(SCORE *)m_List.GetItemDataPtr(nIndex); m_nScore1 = data-score1; m_nScore2 = data-score2; m_nScore3 = data-score3; UpdateData(FALSE); (8)用ClassWizard为对话框添加WM_DESTROY的消息映射,增加代码: void CListBoxDlg:OnDestroy() / 此消息是当对话框关闭时发送的 for (int nIndex = m_List.Get
15、Count()-1; nIndex=0; nIndex-) / 删除所有与列表项相关联的SCORE结构数据,并释放内存 delete (SCORE *)m_List.GetItemDataPtr(nIndex); CDialog:OnDestroy(); / 关闭对话框 (9)打开ListBoxDlg.h源文件,在类CListBoxDlg定义的public处添加下列代码: public: struct SCORE int score1; int score2; int score3; ;(10) 定位到CEx_CommCtrlsDlg:OnButton1函数处,修改代码如下: if (nID
16、= IDC_RADIO2) CListBoxDlg dlg; dlg.DoModal(); (11)在Ex_CommCtrlsDlg.cpp文件的开始处,增加包含CListBoxDlg的头文件。 #include “ListBoxDlg.h”(12) 编译运行并测试。 五、实验报告依据本节实验内容书写实验报告,包括如下内容:(1)实验目的(2)实验环境(3)操作步骤(4)遇到的问题及解决方法(5)回答实验问题(6)实验心得和体会 实验四: 组合控件实例一、实验目的: 1. 了解组合控件风格 2掌握组合控件通知消息 3掌握组合控件几种基本操作二、实验环境: Windows 2000 Profes
17、sional Visual C+ 6.0 Enterprise三、实验内容 1、根据用户从组合框中选择的填充样式,在对话框中绘制一个矩形区域四、试验步骤:(1)打开前面创建的基于对话框应用程序程序项目Ex_CommCtrls。(2)向应用程序中添加一个对话框资源IDD_COMBO,标题定为“使用组合框”,用ClassWizard为此对话框类定义为CComboDlg。(3) 删除原来的Cancel按钮,用编辑器为对话框添加控件。 (4)打开ClassWizard的Member Variables标签,为组合框IDC_PATTERN增加成员变量m_Pattern,其类型为Control类的CCom
18、boBox 。(5)为CComboDlg类添加一个int类型的成员变量m_nDrawPattern。(6)切换到ClassWizard的Messsage Maps标签页,为组合框IDC_PATTERN添加CBN_SELCHANGE(组合框中的当前选项发生改变)的消息映射,并增加下列代码:void CComboDlg:OnSelchangePattern() int nIndex = m_Pattern.GetCurSel();/ 获得当前选项的索引 if (nIndex != CB_ERR) m_nDrawPattern = m_Pattern.GetItemData(nIndex); / 获
19、得与当前选项相关联的数据 Invalidate(); / 强制系统调用OnPaint函数重新绘制 (7)用ClassWizard为对话框添加WM_PAINT的消息映射,并增加下列代码: void CComboDlg:OnPaint() CPaintDC dc(this); / device context for painting(绘图所必须的设备环境) CWnd* pWnd = GetDlgItem(IDC_DRAW);/ 获得控件IDC_DRAW的窗口指针 pWnd-UpdateWindow(); / 避免系统自动重绘 CDC* pDC = pWnd-GetDC(); / 获得所需要的绘图
20、设备环境 CBrush drawBrush; / 定义一个画刷 drawBrush.CreateHatchBrush(m_nDrawPattern,RGB(0,0,0);/ 创建画刷 CBrush* pOldBrush = pDC-SelectObject(&drawBrush); / 将画刷选入当前设备环境中 CRect rcClient; / 定义一个CRect变量 pWnd-GetClientRect(rcClient); / 获得窗口客户区大小 pDC-Rectangle(rcClient); / 用当前画刷绘制一个矩形区域 pDC-SelectObject(pOldBrush); /
21、 恢复设备环境原来的画刷设置 (8)用ClassWizard为对话框添加WM_INITDIALOG的消息映射,增加代码:BOOL CComboDlg:OnInitDialog() CDialog:OnInitDialog(); CString str6 = 水平线,竖直线,向下斜线,向上斜线,十字线,交叉线; int nIndex; for (int i=0; iUpdateWindow(); Draw(); (7)用ClassWizard为对话框添加WM_INITDIALOG的消息映射,增加代码: BOOL CScrollDlg:OnInitDialog() CDialog:OnInitDi
22、alog(); / 设置滚动条和滑动条的范围和当前位置 m_Scroll.SetScrollRange(0,255); m_Scroll.SetScrollPos(m_RValue); m_Slider.SetRange(0,255); m_Slider.SetPos(m_GValue); / 设置旋转按钮的范围 m_Spin.SetRange(0,255); UpdateData(FALSE); / 将数据传给控件 m_bEditOK = TRUE; return TRUE; (8)用ClassWizard为对话框添加WM_HSCROLL的消息映射,增加代码: void CScrollDlg
23、:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) int nID = pScrollBar-GetDlgCtrlID(); if (nID = IDC_SLIDER1) / 是滑动条产生水平滚动消息 m_GValue = m_Slider.GetPos();/ 获得滑动条当前的位置 if (nID = IDC_SCROLLBAR1) / 是滚动条条产生水平滚动消息 switch(nSBCode) case SB_LINELEFT:m_RValue-; break; case SB_LINERIGHT:m_RValue+; b
24、reak; case SB_PAGELEFT: m_RValue -= 10; break; case SB_PAGERIGHT:m_RValue += 10; break; case SB_THUMBTRACK:m_RValue = nPos;break; if (m_RValue255) m_RValue = 255; m_Scroll.SetScrollPos(m_RValue); UpdateData(FALSE); Draw(); CDialog:OnHScroll(nSBCode, nPos, pScrollBar); (9)将项目工作区切换到ClassView页面,用鼠标右击“CScrollDlg”项,在弹出的快捷菜单中选中“Add Member Function”,将要增加的函数名设为Draw,函数类型为void,并添加下列代码: void CScrollDlg:Draw() CWnd* pWnd = GetDlgItem(IDC_DRAW); CDC* pDC = pWnd-GetDC(); / 获得窗口当前的设备环境指针 CBrush drawBrush; / 定义画刷变量 drawBrush.CreateSolidBrush(RGB(m_RValue,m_GValue,m_BValue); / 创建一个填充色画刷。 /
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1