visual c++ 程序设计实验指导.docx
《visual c++ 程序设计实验指导.docx》由会员分享,可在线阅读,更多相关《visual c++ 程序设计实验指导.docx(47页珍藏版)》请在冰豆网上搜索。
![visual c++ 程序设计实验指导.docx](https://file1.bdocx.com/fileroot1/2022-12/29/ba891e44-60e4-4d9f-ae72-926136d57bf7/ba891e44-60e4-4d9f-ae72-926136d57bf71.gif)
visualc++程序设计实验指导
《VisualC++程序设计》实验指导
海南软件职业技术学院
HainanSoftwareProfessionInstitute
(2005-2006学年度第二学期)
教师姓名:
季文天
系部:
软件工程系
授课专业:
软件技术
授课班级:
04软件技术(3)
实验一:
编制一个MFC应用程序
一、实验目的:
1.熟悉并掌握MFC基本应用程序结构
2.掌握MFC消息映射机制
3.掌握响应简单事件的方法
二、实验环境:
Windows2000Professional
VisualC++6.0Enterprise
三、实验内容
1、编写一个简单的MFC应用程序
四、试验步骤:
1、建立一个Win32工程,HelloMFC。
2、选择“工程”——〉“设置”菜单,选择包含MFC类库。
3、输入下列代码:
#include//MFC头文件
classCHelloApp:
publicCWinApp//声明应用程序类
{public:
virtualBOOLInitInstance();
};
CHelloApptheApp;//建立应用程序类的实例
classCMainFrame:
publicCFrameWnd//声明主窗口类
{public:
CMainFrame()
{//创建主窗口
Create(NULL,"我的窗口",WS_OVERLAPPEDWINDOW,CRect(0,0,400,300));
}
protected:
afx_msgvoidOnLButtonDown(UINTnFlags,CPointpoint);
DECLARE_MESSAGE_MAP()
};
//消息映射入口
BEGIN_MESSAGE_MAP(CMainFrame,CFrameWnd)
ON_WM_LBUTTONDOWN()//单击鼠标左键消息的映射宏
END_MESSAGE_MAP()
voidCMainFrame:
:
OnLButtonDown(UINTnFlags,CPointpoint)
{MessageBox("你好,我的VisualC++世界!
","问候",0);
CFrameWnd:
:
OnLButtonDown(nFlags,point);
}
//每当应用程序首次执行时都要调用的初始化函数
BOOLCHelloApp:
:
InitInstance()
{m_pMainWnd=newCMainFrame();
m_pMainWnd->ShowWindow(m_nCmdShow);
m_pMainWnd->UpdateWindow();
returnTRUE;
}
五、实验报告
依据本节实验内容书写实验报告,包括如下内容:
(1)实验目的
(2)实验环境
(3)操作步骤
(4)遇到的问题及解决方法
(5)回答实验问题
(6)实验心得和体会
实验二:
编辑框控件
一、实验目的:
1.掌握编辑控件风格
2.掌握编辑控件单行、多行风格
3.掌握编辑控件数据的获取
二、实验环境:
Windows2000Professional
VisualC++6.0Enterprise
三、实验内容
1、使用静态文本、组框、编辑框以及按钮等控件,设计界面。
用户在“成绩1”、“成绩2”和“成绩3”编辑框中输入成绩后,单击[计算平均分]按钮,将显示出这三个成绩的平均分。
四、试验步骤:
(1)打开前面的Ex_CommCtrls。
(2)向应用程序中添加一个对话框资源,打开属性对话框将其标题改为“使用编辑框”,ID号改为IDD_EDIT。
(3)用编辑器为对话框添加如下表所示的一些控件。
(4)双击对话框模板或按Ctrl+W快捷键,为对话框资源IDD_EDIT创建一个对话框类CEditDlg。
(5)打开ClassWizard的MemberVariables标签,在Classname中选择CEditDlg,选中所需的控件ID号,双击鼠标或单击AddVariables按钮。
依次为控件增加成员变量。
(6)切换到ClassWizard的MesssageMaps标签页,为CEditDlg增加WM_INITDIALOG的消息映射,并添加下列代码:
BOOLCEditDlg:
:
OnInitDialog()
{CDialog:
:
OnInitDialog();
m_strAve="0.00";
UpdateData(FALSE);//将成员变量数据传给控件,并在控件中显示
returnTRUE;
}
(7)用ClassWziard为按钮IDC_BUTTON1添加BN_CLICKED的消息映射,并增加下列代码:
voidCEditDlg:
:
OnButton1()
{UpdateData();//将控件显示的数据传给成员变量
doubleave=(double)(m_nScore1+m_nScore2+m_nScore3)/3.0;
m_strAve.Format("%6.2f",ave);
UpdateData(FALSE);//将成员变量数据传给控件并显示
}
(8)定位到CEx_CommCtrlsDlg:
:
OnButton1函数处,修改代码如下:
if(nID==IDC_RADIO1){
CEditDlgdlg;
dlg.DoModal();
}
(9)在Ex_CommCtrlsDlg.cpp文件的开始处,增加包含CEditDlg的头文件。
#include“EditDlg.h”
(10)编译运行并测试。
五、实验报告
依据本节实验内容书写实验报告,包括如下内容:
(1)实验目的
(2)实验环境
(3)操作步骤
(4)遇到的问题及解决方法
(5)回答实验问题
(6)实验心得和体会
实验三:
列表控件
一、实验目的:
1.掌握列表控件的风格
2.掌握列表控件通知消息
3.掌握列表控件的几种基本操作
二、实验环境:
Windows2000Professional
VisualC++6.0Enterprise
三、实验内容
1、将一个SCORE结构(含有三门成绩的数据成员)数据和列表框中每一个学生姓名列表关联起来。
用户单击[添加记录]按钮时,学生成绩记录中的“姓名”被添加在列表框中,该学生的成绩与该列表项关联。
单击[删除记录]时,列表框中当前选择项被删除,相关联的数据所占的内容空间被释放。
任何时候选中列表框中某个学生,相应的记录数据都被显示出来
四、试验步骤:
(1)打开前面创建的基于对话框应用程序程序项目Ex_CommCtrls。
(2)向应用程序中添加一个对话框资源IDD_LISTBOX,标题定为“使用列表框”,用ClassWizard为此对话框类定义为CListBoxDlg。
(3)删除原来的Cancel按钮,用编辑器为对话框添加如下表所示的控件。
(4)打开ClassWizard的MemberVariables页面,在Classname中选择CListBoxDlg,选中所需的控件ID号,双击鼠标或单击AddVariables按钮。
(5)切换到ClassWizard的MesssageMaps标签页,为按钮IDC_DATA_ADD添加BN_CLICKED的消息映射,增加代码:
voidCListBoxDlg:
:
OnDataAdd()
{UpdateData(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;}
intnIndex=m_List.AddString(m_strName);//向列表框添加学生姓名
//将该学生成绩与新增的列表项关联起来
SCOREdata;
data.score1=m_nScore1;
data.score2=m_nScore2;
data.score3=m_nScore3;
m_List.SetItemDataPtr(nIndex,newSCORE(data));
}
(6)用ClassWizard为按钮IDC_DATA_DEL添加BN_CLICKED的消息映射,增加代码:
voidCListBoxDlg:
:
OnDataDel()
{intnIndex=m_List.GetCurSel();//获得当前选择项的索引
if(nIndex!
=LB_ERR)
{m_List.DeleteString(nIndex);//删除当前选择项
m_strName.Empty();
m_nScore1=m_nScore2=m_nScore3=0;
UpdateData(FALSE);
}
elseMessageBox("当前没有选择项或列表框操作失败!
");
}
(7)用ClassWizard为按钮IDC_LIST1添加LBN_SELCHANGE的消息映射,增加代码:
voidCListBoxDlg:
:
OnSelchangeList1()
{intnIndex=m_List.GetCurSel();
if(nIndex!
=LB_ERR)
{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的消息映射,增加代码:
voidCListBoxDlg:
:
OnDestroy()//此消息是当对话框关闭时发送的
{for(intnIndex=m_List.GetCount()-1;nIndex>=0;nIndex--)
{//删除所有与列表项相关联的SCORE结构数据,并释放内存
delete(SCORE*)m_List.GetItemDataPtr(nIndex);
}
CDialog:
:
OnDestroy();//关闭对话框
}
(9)打开ListBoxDlg.h源文件,在类CListBoxDlg定义的public处添加下列代码:
public:
structSCORE
{intscore1;
intscore2;
intscore3;
};
(10)定位到CEx_CommCtrlsDlg:
:
OnButton1函数处,修改代码如下:
if(nID==IDC_RADIO2)
{CListBoxDlgdlg;
dlg.DoModal();
}
(11)在Ex_CommCtrlsDlg.cpp文件的开始处,增加包含CListBoxDlg的头文件。
#include“ListBoxDlg.h”
(12)编译运行并测试。
五、实验报告
依据本节实验内容书写实验报告,包括如下内容:
(1)实验目的
(2)实验环境
(3)操作步骤
(4)遇到的问题及解决方法
(5)回答实验问题
(6)实验心得和体会
实验四:
组合控件实例
一、实验目的:
1.了解组合控件风格
2.掌握组合控件通知消息
3.掌握组合控件几种基本操作
二、实验环境:
Windows2000Professional
VisualC++6.0Enterprise
三、实验内容
1、根据用户从组合框中选择的填充样式,在对话框中绘制一个矩形区域
四、试验步骤:
(1)打开前面创建的基于对话框应用程序程序项目Ex_CommCtrls。
(2)向应用程序中添加一个对话框资源IDD_COMBO,标题定为“使用组合框”,用ClassWizard为此对话框类定义为CComboDlg。
(3)删除原来的Cancel按钮,用编辑器为对话框添加控件。
(4)打开ClassWizard的MemberVariables标签,为组合框IDC_PATTERN增加成员变量m_Pattern,其类型为Control类的CComboBox。
(5)为CComboDlg类添加一个int类型的成员变量m_nDrawPattern。
(6)切换到ClassWizard的MesssageMaps标签页,为组合框IDC_PATTERN添加CBN_SELCHANGE(组合框中的当前选项发生改变)的消息映射,并增加下列代码:
voidCComboDlg:
:
OnSelchangePattern()
{intnIndex=m_Pattern.GetCurSel();//获得当前选项的索引
if(nIndex!
=CB_ERR)
{m_nDrawPattern=m_Pattern.GetItemData(nIndex);
//获得与当前选项相关联的数据
Invalidate();//强制系统调用OnPaint函数重新绘制
}
}
(7)用ClassWizard为对话框添加WM_PAINT的消息映射,并增加下列代码:
voidCComboDlg:
:
OnPaint()
{CPaintDCdc(this);//devicecontextforpainting(绘图所必须的设备环境)
CWnd*pWnd=GetDlgItem(IDC_DRAW);//获得控件IDC_DRAW的窗口指针
pWnd->UpdateWindow();//避免系统自动重绘
CDC*pDC=pWnd->GetDC();//获得所需要的绘图设备环境
CBrushdrawBrush;//定义一个画刷
drawBrush.CreateHatchBrush(m_nDrawPattern,RGB(0,0,0));//创建画刷
CBrush*pOldBrush=pDC->SelectObject(&drawBrush);
//将画刷选入当前设备环境中
CRectrcClient;//定义一个CRect变量
pWnd->GetClientRect(rcClient);//获得窗口客户区大小
pDC->Rectangle(rcClient);//用当前画刷绘制一个矩形区域
pDC->SelectObject(pOldBrush);//恢复设备环境原来的画刷设置
}
(8)用ClassWizard为对话框添加WM_INITDIALOG的消息映射,增加代码:
BOOLCComboDlg:
:
OnInitDialog()
{CDialog:
:
OnInitDialog();
CStringstr[6]={"水平线","竖直线","向下斜线","向上斜线","十字线","交叉线"};
intnIndex;
for(inti=0;i<6;i++)
{
nIndex=m_Pattern.AddString(str[i]);
m_Pattern.SetItemData(nIndex,i);
}
m_Pattern.SetCurSel(0);
m_nDrawPattern=0;
returnTRUE;
}
(9)定位到CEx_CommCtrlsDlg:
:
OnButton1函数处,修改代码如下:
if(nID==IDC_RADIO3)
{
CComboDlgdlg;
dlg.DoModal();
}
(10)在Ex_CommCtrlsDlg.cpp文件的开始处,增加包含CComboDlg的头文件。
#include“ComboDlg.h”
(11)编译运行并测试。
五、实验报告
依据本节实验内容书写实验报告,包括如下内容:
(1)实验目的
(2)实验环境
(3)操作步骤
(4)遇到的问题及解决方法
(5)回答实验问题
(6)实验心得和体会
实验五:
滚动条、滑动条和旋转按钮
一、实验目的:
1.掌握滚动条、滑动条和旋转按钮的风格
2.掌握滚动条、滑动条和旋转按钮的通知消息
3.掌握滚动条、滑动条和旋转按钮的基本操作
二、实验环境:
Windows2000Professional
VisualC++6.0Enterprise
三、实验内容
1、用滚动条、滑动条和旋转按钮控件分别来调整RGB的三个颜色分量,根据指定的颜色填充一个矩形区域。
四、试验步骤:
(1)打开前面创建的基于对话框应用程序程序项目Ex_CommCtrls。
(2)向应用程序中添加一个对话框资源IDD_SCROLL,标题定为“使用滚动条、旋转按钮控件和滑动条”,用ClassWizard为此对话框类定义为CScrollDlg。
(3)删除原来的Cancel按钮,用编辑器为对话框添加如下表所示的一些控件。
(4)打开ClassWizard的MemberVariables标签,在Classname中选择CScrollDlg,选中所需的控件ID号,双击鼠标或单击AddVariables按钮。
依次为下列控件增加成员变量。
(5)切换到ClassWizard的MesssageMaps标签页,为编辑框IDC_EDIT1、IDC_EDIT2和IDC_EDIT3添加EN_CHANGE的消息映射,使用它们的消息处理函数名都设为OnChangeEdit,并增加下列代码:
voidCScrollDlg:
:
OnChangeEdit()
{if(!
m_bEditOK)return;
UpdateData();
m_Scroll.SetScrollPos(m_RValue);
m_Slider.SetPos(m_GValue);
Draw();
}
(6)用ClassWizard为对话框添加WM_PAINT的消息映射,增加代码:
voidCScrollDlg:
:
OnPaint()
{CPaintDCdc(this);//devicecontextforpainting
CWnd*pWnd=GetDlgItem(IDC_DRAW);
pWnd->UpdateWindow();
Draw();
}
(7)用ClassWizard为对话框添加WM_INITDIALOG的消息映射,增加代码:
BOOLCScrollDlg:
:
OnInitDialog()
{CDialog:
:
OnInitDialog();
//设置滚动条和滑动条的范围和当前位置
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;
returnTRUE;
}
(8)用ClassWizard为对话框添加WM_HSCROLL的消息映射,增加代码:
voidCScrollDlg:
:
OnHScroll(UINTnSBCode,UINTnPos,CScrollBar*pScrollBar)
{intnID=pScrollBar->GetDlgCtrlID();
if(nID==IDC_SLIDER1)//是滑动条产生水平滚动消息
{m_GValue=m_Slider.GetPos();//获得滑动条当前的位置}
if(nID==IDC_SCROLLBAR1)//是滚动条条产生水平滚动消息
{switch(nSBCode)
{caseSB_LINELEFT:
m_RValue--;break;
caseSB_LINERIGHT:
m_RValue++;break;
caseSB_PAGELEFT:
m_RValue-=10;break;
caseSB_PAGERIGHT:
m_RValue+=10;break;
caseSB_THUMBTRACK:
m_RValue=nPos;break;
}
if(m_RValue<0)m_RValue=0;
if(m_RValue>255)m_RValue=255;
m_Scroll.SetScrollPos(m_RValue);
}
UpdateData(FALSE);
Draw();
CDialog:
:
OnHScroll(nSBCode,nPos,pScrollBar);
}
(9)将项目工作区切换到ClassView页面,用鼠标右击“CScrollDlg”项,在弹出的快捷菜单中选中“AddMemberFunction”,将要增加的函数名设为Draw,函数类型为void,并添加下列代码:
voidCScrollDlg:
:
Draw()
{CWnd*pWnd=GetDlgItem(IDC_DRAW);
CDC*pDC=pWnd->GetDC();//获得窗口当前的设备环境指针
CBrushdrawBrush;//定义画刷变量
drawBrush.CreateSolidBrush(RGB(m_RValue,m_GValue,m_BValue));
//创建一个填充色画刷。
/