实验二.docx
- 文档编号:28386613
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:17
- 大小:588.12KB
实验二.docx
《实验二.docx》由会员分享,可在线阅读,更多相关《实验二.docx(17页珍藏版)》请在冰豆网上搜索。
实验二
实验二Windows编程基础
实验目的:
●了解WindowsSDK和MFC的程序框架。
●熟悉基本控件的预定义注册名和MFC类。
●熟悉窗口常见的消息。
●学会不同方式手动添加消息映射。
实验内容:
●SDK编程。
●MFC编程
●MFC向导
实验内容
2.1SDK编程
用SDK来编写一个Windows应用程序Ex_SDK,该程序的窗口客户区中含有一个“输入半径”静态文本、编辑框和一个“圆面积”按钮,单击“圆面积”按钮则根据编辑框输入的数据,计算并在另一个静态文本控件中输入圆的面积,如图2.1所示。
具体的实验过程如下:
●基于SDK的Win32程序框架
●创建控件和提示文本。
●获取并输出计算结果。
2.1.1基于SDK的Win32程序框架
图2.1
具体步骤如下:
(1)创建一个名称Ex_SDK的Win32Application的空工程
(2)创建一个名为Ex_SDK.cpp的源程序文件。
(3)打开源程序文件Ex_SDK.cpp进行编辑,在打开的文档窗口中输入下面的代码:
(4)
编译并运行。
结果显示出一个大小为400*320的窗口。
2.1.2创建控件和提示文本
基于SDK的Win32程序框架一般总是由两个基本函数组成:
一个是入口函数WinMain,它包含了整个框架的运行代码;另一个是用户定义的窗口过程函数SDKWndProc.,用来接收和处理各种不同的消息。
在主窗口中,控件创建的代码既可以写在主窗口CreateWindow函数调用之后,也可以写在SDKWndProc消息处理函数中。
当主窗口创建之时应用程序就会发出WM_CREATE消息,跟踪该消息,添加下列代码:
在SDKWndProc函数中加入以下变量:
在SDKWndProc函数中加入以下消息处理函数:
这样就创建了两个静态控件、一个编辑框和一个按钮。
需要说明的是:
●将hwndHint、hwndRes、hwndEdit、hwndButton窗口句柄定义成static的目的是使其成为局部的全局变量,当SDKWndPro第一次调用创建后,就会一直有效。
●用CreateWindow函数创建窗口时,若指定的是预定义的窗口名BUTTON、COMBOBOX、EDIT、LISTBOX、SCROLLBAR和STATIC,则创建的是按钮、组合框、编辑框、列表框、滚动条和静态控件等窗口。
由于这些控件窗口必须是主窗口的子窗口,所以为其指定的风格中一定要有WS_CHILD和WS_VISIBLE,同时指定父窗口句柄为主窗口句柄hwnd。
●各控件的字体可通过SendMessage函数并制定WM_SETFONT消息来更改。
DEFAULT_GUI_FONT是获取系统消息对话框和菜单中的默认字体。
编译运行,结果如图2.2所示。
图2.2
2.1.3获取并输出计算结果
一旦输入界面创建之后,就需要跟踪按钮的“单击”(BN_CLICKED)的命令消息,从编辑框获取用户输入的圆半径,计算面积后在另一个静态控件hwndRes中输出,若获取的半径无效,则弹出一个消息对话框,显示“圆半径输入无效!
”。
具体的代码如下:
同时,因在程序中用到了sprintf函数,从而需在代码源文件的最前面添加stdio.h文件的包含预处理指令:
编译运行,结果如图2.1所示。
2.1.4程序扩展
仿照前面的程序,给窗口加上“计算长方形面积”的程序界面,并要求从窗口获取长方形的长和宽的数据,并把计算结果输出到窗口界面中。
2.2MFC编程
同前面的Ex_SDK任务相同,这里用MFC来编写一个Windows应用程序Ex_MFC,结果如果如图2.3所示。
图2.3
具体实验过程如下:
MFC程序框架。
WM_CREATE消息及其映射。
按钮消息映射。
2.2.1MFC程序框架
具体步骤如下:
(1)新建一个Win32Application工程,名称为“Ex_MFC”
(2)为工程添加一个名为“EX_MFC.cpp”的源文件,代码如下:
(3)选择工程→设置菜单命令,在出现的对话框中选择“常规”标签,然后在“Microsoft基础类”组合框中选择“使用MFC作为共享的DLL”,单击确定按钮。
编译运行,结果如图2.7所示。
2.2.2WM_CREATE消息及其映射
MFC封装了Windows应用程序所需要的各种类,其中表2.1列出了MFC封装的基本控件类。
这样一来,控件的创建只需在主窗口类CMainFrame中先声明一个控件类对象。
然后调用相应的成员函数Create即可。
那么控件的Create代码应该写在何处才更适合呢?
控件名称
Windows类名
MFC类
功能描述
静态控件
STATIC
CStatic
用来显示一些几乎固定不变的文字或图形
按钮
BUTTON
CButton
用来产生某些命令或改变某些选项,包括单选按钮、复选框和组框
编辑框
EDIT
CEdit
用于完成文本和数字的输入和编辑
列表框
LISTBOX
CListBox
显示一个列表,让用户从中选择一个或多个项
组合框
COMBOBOX
CComboBox
是一个列表框和组合框组合的控件
滚动条
SCROLLBAR
CScrollBar
通过滚动快在滚动条上的移动和滚动按钮来改变某些量
一般来说,通过窗口的WM_CREATE消息映射,并在映射函数中添加子窗口的创建代码是最好的程序方法。
在MFC中,窗口的WM_CREATE消息是按独特的MFC消息映射机制来映射的,如下面的过程:
(1)在CMainFrame类声明代码之后,添加该类的消息映射入口代码段,并在代码段中添加WM_CREATE消息映射宏ON_WM_CREATE();
(2)在CMainFrame类中添加WM_CREATE消息函数的声明,同时还应在类中添加本次任务所需的CStatic、CEdit和CButton类对象声明:
(3)在消息映射入口代码段之后,添加OnCreate消息函数的实现代码:
(4)编译运行。
2.2.3按钮消息映射
事实上,MFC几乎为每一个控件的通知消息都提供了相应的消息映射宏,从而大大简化了程序,其过程如下:
(1)在消息映射入口代码段中添加下列BN_CLICKED的消息映射宏,其中103是按钮在Create时指定的标识值:
(2)在CMainFrame类中添加BN_CLICKED消息函数OnCalArea的声明:
(3)在消息映射入口代码段之后,添加OnCalArea消息函数的实现代码:
(4)编译运行,结果如图2.3所示。
2.3MFC向导
事实上,在VisualC++6.0中不需要输入上述代码,甚至不需要输入一句代码就能创建所需要的应用程序,这就是MFC应用程序向导(MFCAppWizard)的功能。
对于前面的EX_SDK、EX_MFC任务,可用MFC向导创建基于对话框的应用程序Ex_DLG来实现,结果如图2.4所示。
●具体的实验过程如下:
●创建对话框应用程序。
●添加和布局控件。
●映射消息并完善代码。
图2.4Ex_DLG运行结果
2.3.1创建对话框应用程序
具体步骤如下:
(1)选择“文件”→“新建”菜单命令,显示出“新建”对话框。
单击“工程”标签,从列表框中选中MFCAPPWizard(exe)项,在“工程名称”编辑框中输入项目名“Ex_DLG”,结果如图2.5所示。
图2.5“新建”对话框Ex_DLG
(2)单击“确定”按钮进入下一步,出现向导的步骤1(共1步)对话框,选定“基本对话框”(DialogBased,基于对话框的应用程序,简称对话框)类型。
单击“完成”按钮,出现一个信息对话框,显示出用户在前面几个步骤中做出的选择,单击“确定”按钮,系统开始创建,并又回到了VisualC++6.0的主界面,同时还自动打开对话框模板编辑器以及控件工具栏、控件布局工具栏等,如图2.6所示。
图2.6创建对话框程序后的开发环境
(3)拾取对话框模板中的“TODO:
XX”静态控件(图2.6中的方框标记),按Delete键删除。
右击对话框模板空白处,从弹出的快捷菜单中选择“属性”菜单命令,弹出对话框属性窗口,将其标题改为“实验2Windows编程基础”,结果如图2.7所示。
图2.7设置对话框标题
(4)编译并运行,结果如图2.8所示。
图2.8Ex_DLG第一次运行结果
2.3.2添加和布局控件
具体步骤如下:
(1)单击布局工具栏上的
按钮,打开对话框模板的网格。
(2)在控件工具栏上单击
图标并按住鼠标左键不放,移动到对话框左上角时释放鼠标键。
这样,第一个静态文本控件就添加到对话框中了。
(3)右击添加的静态文本控件,从弹出的快捷菜单中选择“属性”命令,弹出其属性对话框,在标题中输入“输入半径”,结果如图2.9所示。
图2.9
(4)类似的,将控件工具栏上的编辑框控件
拖放到刚才添加的静态文本控件的下方,这样就在对话框模板中添加了一个编辑框控件了。
移动鼠标至编辑框右边夹点(实心巨型点),当出现“水平调整”鼠标指针形状
时按下鼠标左键并向右移动,这样就增加了控件的长度,至满意长度时释放鼠标键。
(5)同样,将控件工具栏上的按钮控件
拖放到刚才添加的编辑框的右边,然后右击它,并从弹出的快捷菜单中选择“属性”命令,弹出其属性对话框,在标题中输入“圆面积”,结果如图2.10所示。
(6)最后,在添加的编辑框下添加一个静态文本控件,调整其长度至“圆面积”按钮右则边,然后右击它,并从弹出的快截菜单中选择“属性”命令,弹出其属性对话框,在其ID框中将其设定为IDC_STATIC_RES,结果如图2.11所示。
(7)关闭属性对话框,编译并运行。
2.3.3映射消息并完善代码
用MFC向导创建的应用程序可以用“类向导”工具来映射控件的消息,如下面的过程:
(1)按Ctrl+W快捷键,弹出MFCClassWizard对话框,查看是否已切换到MessageMaps标签页面。
(2)在Classname组合框中,查看其类名是否已选定为CEx_DLGDlg(图2.12中的标记1);在ObjectIDs列表框中选定IDC_Button1(图2.12中的标记2),然后双击Message列表中的BN_CLICKED消息或单击
按钮,弹出AddMemberFunction(添加成员函数)对话框,在这里可以输入成员函数的名称,系统默认的函数名为OnButton1,如图2.12所示。
图2.12添加消息映射
(3)单击“OK”按钮,BN_CLICKED消息映射函数添加到Memberfunction列表中。
双击消息函数OnButton1或单击
按钮,退出MFCClassWizard对话框,并转向文档窗口,定位到CEx_DLGDlg:
:
OnButton1函数实现的源代码处,可添加下列代码:
其中,GetDlgItem用来通过指定控件的ID来获取一个控件的类对象指针。
(4)编译并运行,结果如图2.4所示。
2.5思考与练习
(1)说说Ex_SDK、Ex_MFC和Ex_DLG在框架组成、消息处理和控件创建上有哪些相同和不同的地方。
(2)比较Ex_SDK和Ex_MFC,看看它们在设定控件字体时有什么不同,为什么Ex_DLG中的控件字体不要专门的代码去设置?
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验