Windows编程实验五
- 格式:docx
- 大小:474.72 KB
- 文档页数:10
武汉轻工大学Windows编程实验报告(实验五)姓名:刘文斌院系:数学与计算机学院班级:软件工程13 03班学号: 13051100 50老师:刘文涛2015.12.16实验五常用控件[程序1:Ex_DlgCtrls] 用控件的编程方式来创建一个按钮(1) 选择“文件” “新建”菜单,在弹出的“新建”对话框中单击“工程”标签,选择MFCAppWizard(exe)的项目类型,在工程框中输入项目名Ex_DlgCtrls(2)单击[确定]按钮,在出现的“Step 1”对话框中选择“基本对话框)”应用程序类型,单击[完成]按钮,创建一个默认的基于对话框的应用程序项目。
(3)将项目工作区切换到ClassView页面,展开CEx_DlgCtrlsDlg类,右击CEx_DlgCtrlsDlg类名,弹出如图所示的快捷菜单。
(4)从快捷菜单中选择Add Member Variable,出现如图所示的对话框,在Variable Type(变量类型)编辑框中输入CButto n(MFC按钮类),在Variable Name(变量名) 编辑框中输入要定义的CButton类对象名m_btnWnd。
(5)单击[OK]按钮,这样Visual C++就会自动在CEx_DlgCtrlsDlg类中添加该成员变量。
在项目工作区的ClassView页面中,双击OnInitDialog函数名,在该函数中添加下列代码:BOOL CEx_DlgCtrlsDlg::OnInitDialog(){CDialog::OnInitDialog();…m_btnWnd.Create("你好", WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,CRect(20, 20, 120, 60), this, 201); // 创建CFont *font = this->GetFont(); // 获取对话框的字体m_btnWnd.SetFont(font); // 设置控件字体return TRUE; // return TRUE unless you set the focus to a control}(6)编译并运行,结果如图所示[程序2:映射控件消息]1. 在MFC中,映射一个控件消息是非常简便的,如下面的过程是对新添加的按钮控件映射BN_CLICKED(单击)消息。
将项目工作区窗口切换到ResourseView页面,双击Dialog资源下的标识IDD_EX_DLGCTRLS_DIALOG,打开该对话框资源模板。
删除“TODO: 在这里设置对话控制。
”控件,添加一个按钮控件,保留其默认属性。
如图所示。
2 按快捷键Ctrl+W,打开MFC ClassWizard对话框,查看“Class name”列表中是否选择了CEx_DlgCtrlsDlg,在IDs列表中选择IDC_BUTTON1,这是添加按钮后,系统自动为此按钮设置的默认标识符,然后在Messages框中选择BN_CLICKED消息。
3 单击[Add Function]按钮或双击BN_CLICKED消息,出现“Add Member Function”对话框,在这里可以输入成员函数的名称,系统默认的函数名为OnButton1。
4单击[OK]按钮,在MFC ClassWizard的“Member functions”列表中将列出新增加的成员数。
在此成员函数中添加下列代码:void CEx_DlgCtrlsDlg::OnButton1(){MessageBox("你按下了\"Button1\"按钮!");}5.编译并运行,当单击[Button1]按钮时,就会执行OnButton1函数,弹出一个消息对话框。
这就是按钮BN_CLICKED消息的映射过程,其他控件的消息也可以类似操作。
运行结果:[程序3:]写一个单文档程序,用菜单命令打开一个对话框,通过该对话框中的红色,绿色,蓝色单选按钮选择颜色,在视图中绘制不同颜色的矩形。
步骤:1、新建一个单文档,并在菜单栏里新建一个菜单,如图:2,新建一个对话框类,在其中添加控件,如图:3、创建一个对话框类CFuxuanDlg 。
给类添加成员变量,如图:4,进入Class Wizard 。
选择对话框类CFuxuanDlg。
分别选择ID 为IDC_BLUE、IDC_GREEN、IDC_RED,添加函数如下:void CFuxuanDlg::OnRed() {m_red = IsDlgButtonChecked(IDC_RED);UpdateWindow();}void CFuxuanDlg::OnGreen() {m_green = IsDlgButtonChecked(IDC_GREEN);UpdateWindow();}void CFuxuanDlg::OnBlue() {m_blue = IsDlgButtonChecked(IDC_BLUE);UpdateWindow();}5,进入Class Wizard 。
选择对话框类E3View。
分别选择ID 为ID_OPENDLG。
添加函数如下:void CE3View::OnOpendlg(){CFuxuanDlg f;f.DoModal();COLORREF color = RGB(f.m_red? 255 : 0 , f.m_green? 255 : 0 , f.m_blue? 255 : 0 );CPen newpen, *oldpen;CClientDC dc(this);newpen.CreatePen(PS_SOLID,2,color);oldpen = dc.SelectObject(&newpen);dc.Rectangle(200,200,300,300);dc.SelectObject(oldpen);}6、在E3View.cpp类的头文件后面加入:#include "FuxuanDlg.h"运行结果:[程序4:]写一个单文档程序,添加一个工具栏按钮。
单击该按钮弹出一个对话框,通过该对话框中的红色,绿色,蓝色复选框选额颜色,在视图中输出一行文本。
步骤:1,在程序3 的基础上,添加一个工具栏按钮,如图:2、进入Class Wizard 。
选择对视图类E3View。
选择ID 为ID_FILENEW。
添加函数如下void CE3View::OnFileNew(){CFuxuanDlg f;f.DoModal();COLORREF color = RGB(f.m_red? 255 : 0 ,f.m_green? 255 : 0 ,f.m_blue? 255 : 0 );CDC* pDC = GetDC();pDC->SetTextColor(color);pDC->TextOut(50,50,"这是程序四的一行文本!");}运行结果:[程序5:]写一个对话框程序,根据用户从列表框中选择的线条样式,在对话框中绘制一个矩形。
线条样式有水平线,垂直线,向下斜线,十字线等四种画刷。
步骤:1,新建一个对话框程序,并添加控件,如图:2、在对话框类中添加成员变量,如图:3,在E6Dlg.h中添加public:CRect m_sample;4、进入Class Wizard。
选择对话框类CE51Dlg.cpp。
分别选择选择WM_INITDIALOG、WM_DESTROY、LBN_SELCHANGE。
添加函数如下:BOOL CE51Dlg::OnInitDialog(){…………………………………………m_list.AddString("水平线");m_list.AddString("垂直线");m_list.AddString("向下斜线");m_list.AddString("十字线");GetDlgItem(IDC_SAMPLE) -> GetWindowRect(&m_sample);ScreenToClient(&m_sample);int Border = (m_sample.right - m_sample.left)/6;m_sample.InflateRect(-Border,-Border);return TRUE; // return TRUE unless you set the focus to a control}void CE51Dlg::OnSelchangeList1()int index = m_list.GetCurSel();int HatchStyle[] = {HS_VERTICAL , HS_DIAGCROSS , HS_HORIZONTAL , HS_FDIAGONAL };CDC* p = GetDC();CBrush* bold,bnew;bnew.CreateHatchBrush(HatchStyle[index],RGB(0,0,0));bold = p->SelectObject(&bnew);p->Rectangle(&m_sample);p->SelectObject(bold);bnew.DeleteObject();}void CE51Dlg::OnDestroy(){CDialog::OnDestroy();for(int index = m_list.GetCount()-1 ; index >= 0 ; index--){delete m_list.GetItemDataPtr(index);}}运行结果:[程序6:]用组合框取代列表框,实现程序5一样的功能。
步骤:1,新建一个对话框程序,并添加控件,如图:2、在对话框类中添加成员变量,如图:3,在E6Dlg.h中添加public:CRect m_sample;4、进入Class Wizard。
选择对话框类CE6Dlg.cpp。
分别选择选择WM_INITDIALOG、WM_DESTROY、CBN_SELCHANGE。
添加函数如下BOOL CE6Dlg::OnInitDialog(){…………………………………….// TODO: Add extra initialization herem_combo.AddString("水平线");m_combo.AddString("垂直线");m_combo.AddString("向下斜线");m_combo.AddString("十字线");GetDlgItem(IDC_SAMPLE) -> GetWindowRect(&m_sample);ScreenToClient(&m_sample);int Border = (m_sample.right - m_sample.left)/6;m_sample.InflateRect(-Border,-Border);return TRUE; // return TRUE unless you set the focus to a control}void CE6Dlg::OnDestroy(){CDialog::OnDestroy();for(int index = m_combo.GetCount()-1 ; index >= 0 ; index--){delete m_combo.GetItemDataPtr(index);}}void CE6Dlg::OnSelchangeCombo1(){int HatchStyle[] = {HS_VERTICAL , HS_DIAGCROSS , HS_HORIZONTAL , HS_FDIAGONAL };int index = m_combo.GetCurSel();CDC* p = GetDC();CBrush* bold,bnew;bnew.CreateHatchBrush(HatchStyle[index],RGB(0,0,0));bold = p->SelectObject(&bnew);p->Rectangle(&m_sample);p->SelectObject(bold);bnew.DeleteObject();}运行结果:实验总结:在本次实验中,我能熟练使用对话框程序,并能熟练使用各种控件,但对控件的各种函数不是不是很了解,以后会加强练习。