《面向对象程序设计》课程界面设计练习题目
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《面向对象程序设计》课程界面设计练习题目
Windows NT系统内建了若干个的常用控件,极大地方便了Windows下可视化程序的开发。
对于初学者来说,能够熟练地使用这些控件,是学好C++面向对象编程的关键步骤。
为了指引初学者或者检验学习效果,下面设计了五个练习题目,囊括了大部分的常用控件,以及程序界面开发中常常使用的技术。
练习题目如下:
一、播放器配置程序
二、消息提示器
三、流媒体管理器
四、可定制背景的视图
五、通讯簿
一、播放器配置程序
内容:
制作一个基于对话框的播放器配置程序,能够从配置文件(*.ini )中读取设置信息;能够将修改后的设置信息保存在配置文件中。
界面如图1所示:
图1 播放器设置界面
目的:
掌握使用VS 建立基于对话框的应用程序;熟悉标签(Static Text )、分组(Group Box )、按钮(Button )、编辑框(Edit Control )、组合框(Combo Box )、单选按钮(Radio Button )、复选框(Check Box )、热键设置控件(Hot Key )等常用控件的属性、事件;掌握配置文件(*.ini )的读写;学习MSDN 文档的查阅等。
要求:
1、 控件1(组合框):不可输入文字,只能从下拉列表中选取一项,列表中的
内容为:简体中文、繁軆中文、English ;
2、 控件2(复选框):默认勾选。
3、 控件3(热键设置控件):当控件2勾选时,控件才3可编辑;当控件2未1
2 3
4
5
6
7
8
9
12 13
14 15 16
10
11
勾选时,控件3灰掉(不可编辑);
4、控件4~7(复选框):默认勾选控件4和控件5;
5、控件8(编辑框):只能输入数字,范围1~60;
6、控件9~11(一组单选按钮):默认选中控件9;
7、控件12(按钮):当点击按钮时,在13中输出如图1所示的文字;
8、控件13(编辑框):能够输入换行符,具有垂直滚动条,当文本框内容不能
全部显示时,滚动条自动有效;
9、控件14~16(按钮):按钮15初始不可用,当更改设置信息后才激活;接收
回车提交命令;点击该按钮,将新的设置信息(控件12和13不触发配置信息改变)写回与程序同目录下,名称为config.ini配置文件中;
点击按钮14时,如果设置信息有更改,将设置信息写入配置文件,并关闭对话框;若设置信息未发生改变,直接关闭对话框;
点击16直接关闭对话框;
10、配置文件读写要求:程序启动时若没有找到配置文件,能够按照默认设置
初始化界面(按钮15激活),点击按钮14和15生成配置文件并写入设置信息,点击16则不生成配置文件;若找到配置文件,从文件中加载配置信息并初始化程序界面;
11、对话框样式:对话框可以最小化,不能最大化,不可以改变大小;界面布
局要工整;对话框初始时控件1取得焦点,按tab键焦点将按图中标注的序号逐一移动到下个控件上。
提示:
1、复选框勾选状态的获取:可以将复选框与一个BOOL变量关联,通过BOOL
变量得知其勾选与否;也可以获取其控件状态(state)来得到是否被勾选;
可以响应复选框的单击事件来处理复选框状态改变时的任务;
2、单选按钮组的概念:点选按钮有组的概念,同一组内的单选按钮相互排斥,
只能有一个被点选;一个单选按钮A若具有GROUP=true属性,则紧跟其后的GROUP=false属性的单选按钮同A为一组,可以为A关联一个int型变量,改变量反应了该组内那个按钮被点选;
3、配置文件的读写:配置文件(*.ini)为文本文件,常用于保存配置信息;系统具
有GetPrivateProfileString、WritePrivateProfileString等函数用于操作配置文件,具体可参见MSDN中相关介绍;
4、使用Tab键移动焦点:需要控件具有Tabstop属性;焦点移动的顺序与界面
控件的排放顺序有关,可以在界面编辑界面按Ctrl+D显示控件的序号,在序号上点击可以修改控件的顺序。
二、消息提示器
内容:
制作一个基于对话框的消息提示器,能够添加、删除消息,轮流展现消息。
主界面如图2所示;点击“消息管理”,弹出消息管理界面,如图3所示;在消息管理界面点击“+”,弹出新建消息对话框,如图4所示。
图2 消息提示器 目的:
进一步了解对话框的设置,如模态和非模态、置顶等;学会界面布局管理;掌握界面逻辑控制;掌握列表(List Box )控件的使用;掌握定时器的使用。
要求:
1、控件1-1(复选框):设置属性为按钮样式;点击一次,按钮凹下,文字变为“取消置顶”,对话框置顶(主界面失去焦点,获得焦点的其他程序界面仍不能遮盖住主界面),再次点击按钮,按钮弹出,文字恢复为“置顶”,主界面取消置顶;
2、控件1-2、1-3(按钮):点击按钮1-2弹出消息管理界面(模态),主界面不可操作;点击按钮1-3,按钮1-2灰掉(不可操作),按钮1-3文字变为“停止提示”,1-5中开始显示消息;再次点击按钮1-3,按钮1-2激活,按钮1-3文字恢复为“开始提示”;点击1-4,若正在提示消息,停止提示,然后退出程序;
3、控件1-5(编辑框):用于显示提示的消息,能够显示多行文字,具有水平、垂直滚动条,只读,无边框;未进行消息提示时,内容为空;
4、控件2-1、2-2(列表):项为消息名称;列表2-1显示不进行提示的消息;列1-1
1-5
1-2 1-3
1-4
表2-2显示要进行提示的消息;
图3 消息管理对话框
图4 新建消息对话框
5、 控件2-3(按钮):点击弹出新建消息对话框;
6、 新建消息:输入名称和消息内容,点击按钮3-3,检查消息名称是否不为空,3-1
3-2
3-3 3-4
2-1 2-2
2-3 2-4 2-9 2-10
2-11
2-12
2-13 2-5
2-6
2-7
2-8
若为空给出修改提示,不为空则创建新的消息,消息列表增加一项;点击“取消”不创建新的消息;
7、控件2-4(按钮):点击按钮,若消息列表未选中一项给出提示;已选中一
项,将选中项删除;
8、控件2-5(按钮):点击按钮,若消息列表未选中一项给出提示;已选中一
项,将其移动到提示列表;
9、控件2-6(按钮):点击按钮,若提示列表未选中一项给出提示;已选中一
项,将其移动到消息列表;
10、控件2-7(按钮):点击按钮,将消息列表中的项全部移到提示列表;
11、控件2-8(按钮):点击按钮,将提示列表中所有项移到消息列表;
12、控件2-9(按钮):点击按钮,若提示列表未选中一项给出提示;已选中一
项,将选中项上移一次(已位于最顶端的项不再移动);
13、控件2-10(按钮):点击按钮,若提示列表未选中一项给出提示;已选中一
项,将选中项下移一次(已位于最底端项不再移动);
14、控件2-11(编辑框):用于设定轮流提示消息的时间隔,仅可输入数字,数
值范围500~30000;
15、界面逻辑:当提示列表中没有要提示的消息时,1-3灰掉;当提示列表中存
在消息时,1-3激活;点击1-3,启动消息提示,按设定的时间间隔,依照提示列表中消息的顺序逐一在1-5中显示提示列表中的消息;
16、对话框样式:标题栏上动态显示当前时间;主界面可用鼠标动态调整大小;
当主界面大小改变时,其中按钮相对窗口边缘的位置不变,只有1-5大小发生变化。
提示:
1、定时器的使用:启动定时器采用Cwnd::SetTimer函数,程序退出前应该调用
CWnd::KillTimer停止之前启动的定时器;函数的具体使用方法参考MSDN 文档;
2、对话框的置顶,界面控件位置、大小修改:可通过Cwnd::SetWindowsPos函
数实现;函数的具体使用方法参考MSDN文档;
三、流媒体管理器
内容:
制作一个基于单文档框架的流媒体管理器(视图类的基类为CFormView ),能够添加、删除流媒体,查看流媒体属性等,主界面如图5所示,菜单结构如图6所示,添加流媒体对话框如图7所示:
图5 流媒体管理器
图6 菜单结构
图7 添加流媒体界面
目的: 熟悉单文档程序框架;学会菜单、工具栏的编辑以及消息响应;掌握表格控件(List Control )、IP 地址控件(IP Address )、选项卡控件(Tab Control )的使1-1 菜单结构如图6
1-2
1-3
2-1
2-2
2-3
2-4
2-5
2-6
用;了解右击快捷菜单的使用等。
要求:
1、程序框架:单文档程序框架,视图类的基类为CFormView;主框架可以用
鼠标调节大小;具备菜单栏1-1、工具栏1-2,不要状态栏;将默认主界面标题栏中的“–无标题”去掉;按照图5图6修改默认菜单和工具栏,菜单“视图”和“帮助”项不变,工具栏按钮依次为“添加流媒体”、“删除流媒体”、“属性”;
2、控件1-3(表格):具有如图5示的报表样式及表头;填充整个View区域,
改变程序窗口大小,1-3也调节大小;右击1-3中一项数据弹出如图5所示的快捷菜单,内容同主菜单“流媒体”项;
3、菜单“流媒体”-“添加流媒体”:点击弹出添加流媒体对话框;
4、控件2-1(编辑框):限最大字符数16;
5、控件2-2(组合框):默认列表数据为“RTSP”、“MMS”、“HTTP”;用户也
可以输入文字;
6、控件2-3(IP地址控件);
7、控件2-4(编辑框):可输入多行文字;限制最大字符数128;
8、控件2-5、2-6(按钮):输入完设置信息,点击按钮2-5添加一个流媒体,
同时1-3对应添加一项;若设置信息除备注外有空,将不添加流媒体,给出提示;点击按钮2-6放弃添加新的流媒体;
9、界面逻辑:若没有1-3中未选中一项,菜单“流媒体”中“删除流媒体”、
“属性”不可用,工具栏对应按钮不可用;
10、界面逻辑:若1-3中选中一项,点击菜单“流媒体”-“删除流媒体”,弹出
删除确认对话框,确认后删除选中的流媒体,点击工具栏“删除流媒体”
按钮具有同样响应;
11、界面逻辑:若1-3中选中一项,点击菜单“流媒体”-“属性”或工具栏按
钮“属性”,弹出下图8所示的“流媒体属性”对话框;对话框具有两个页面,“常规”页面显示选中流媒体的信息(均不可编辑),“网络”页面显示网络状态(为简单起见,固定为图示内容)。
点击“确定”关闭属性对话框。
图8 流媒体属性-常规页面
图9 流媒体属性-网络页面
提示:
1、去掉标题栏的“–无标题”:可以在函数CMainFrame::PreCreateWindow中
去掉框架样式FWS_ADDTOTITLE;
2、IP 地址控件内容的获取:可通过关联字符串的方式获取输入的IP地址;可
通过关联DWORD整数的方式获取输入的IP地址;
3、选项卡的使用:图8和图9共使用了三个对话框;通过在TabControl控件的
区域内创建嵌入式的子对话框实现图示效果,子对话框具有Border=None、Style=Child的样式,然后通过CDialog::Creat函数创建,再调用ShowWindow 显示出来;在TabControl的切换事件中,根据选中的要显示页面索引,将对
应的子对话框显示出来,将其它对话框隐藏起来;
4、选项卡的替代者:属性页(CPropertySheet、CPropertyPage)也能实现选项卡
的效果,可以在网络上查找使用方法;
四、可定制背景的视图
内容:
制作单文档程序,如图10所示的效果,能够根据设置的“画面属性”在视图中绘制背景:
1-1
图10 主界面及菜单结构
2-1
2-2 2-3
2-4
2-5 2-6
2-7 2-8
图11 画面属性设置界面
目的:
掌握滑块控件(Slider Control)、提示条(ToolTip Control)的使用;了解自定义控件的方法;掌握文件浏览对话框(CFileDialog)、颜色选择对话框(CColorDialog)等常用对话框的使用;了解使用GDI绘制简单图形图像的方法等。
要求:
1、主界面样式:主窗口采用视图基类继承自CView的单文档程序框架;可用
鼠标调节窗口大小,同时视图内容也改变大小并保持填充整个区域;标题文字顶部居中;在默认菜单中添加“设置”-“画面设置”;工具栏只有一个按钮“画面设置”;点击“画面设置”,弹出画面属性对话框;状态栏中显示鼠标相对于视图左上角的位置;
2、控件2-1(编辑框):最大字符数限制为1-16;内容默认为“画面1”;
3、控件2-2(滑块):调节范围(1-30),2-3为编辑框,只能输入数字,范围
(1-30);调节Slider,编辑框同步显示当前设置值;改变编辑框中的数值,Slider同步改变滑块位置;默认值8;
4、控件2-4(自定义按钮):点击按钮弹出颜色选择对话框;选择颜色后,在
按钮上显示选择的颜色;默认颜色值为RGB(0,0,255);
5、控件2-5(编辑框):只读;
6、控件2-6(按钮):点击按钮,弹出文件选择对话框,文件类型过滤类型
为.bmp、.jpg、.png,选中文件后,编辑框2-5中显示文件路径;
7、控件2-7(按钮):点击按钮,完成“画面属性”设置,主窗口视图中按设
置绘制出背景图像;
8、控件2-8(按钮):点击按钮,放弃“画面属性”设置的修改,视图背景不
变;
9、“画面属性”界面初始化:程序启动后,初次弹出“画面属性”对话框,
加载默认设置;之后弹出“画面属性”对话框加载当前设置;
10、提示条:鼠标放置到控件2-1、2-4、2-6上,会弹出对应的提示条,如图11
所示。
(图中为了表示各控件的提示内容,而全部显示出来);
提示:
1、滑块控件的使用:同滚动条相似,滑块位置改变后会向窗体发送
WM_HSCROLL(水平Slider)或WM_VSCROLL(垂直Slider)消息;对话框中响应该消息的函数具有三个参数,其中一个为CScrollBar* pScrollBar,用于指定发送消息的控件,需转换为CSliderCtrl*类型的指针获取位置;
2、自定义按钮:需要从CButton派生一个子类,姑且叫做CColorBtn,然后再
CColorBtn类中响应鼠标点击事件弹出颜色对话框,选择颜色后在DrawItem 函数中以选中的颜色绘制控件外观;使用自定义控件时,在对话框中放置一
个按钮将其与CColorBtn类型的变量关联,就可以将放置的按钮样式展现为自定义样式;
3、提示条控件的使用:提示条在界面设计工具箱中找不到,需要完全由代码创
建显示等,可通过网络查找使用方法;
五、通讯簿
内容:
制作一个通讯录程序,程序主界面如图12所示:
图12 通讯簿主界面
图13 完成拖动联系人的效果
图14 添加分组界面
目的: 掌握树形控件(Tree Control )、时间日期控件(Date Time Picker )、分割线(Picture Control )的使用;掌握拖拽、移动、释放左键等鼠标事件的使用。
要求:
1、 控件1-1(树形控件):用于显示分组和联系人;节点具备图标;具有Has
Button 、Has Lines 、Lines At Root 属性;默认具有“未分组”节点;点击树中的分组,右侧“联系人信息”各内容为空;点击选中一个联系人,右侧2-1 释放鼠标后完成节点移动
2-3 1-1 1-2
1-3
1-4
1-5 1-6
1-7
1-8
1-9 1-10
1-11 1-12 1-13 1-14 1-16
1-15 2-2
“联系人信息”显示该人的各项信息;
2、控件1-2、1-
3、1-5~1-9(编辑框):1-2、1-3最大字符树限制为16个;1-5、
1-6分别用于显示电话1、电话2,只能输入数字,最大字符个数限制为16个;1-7、1-8最大字符个数限制为128个;1-9可输入换行符,具有水平、垂直滚动条,最大字符数限制为256个;
3、控件1-4(日期时间控件):用于显示和设置联系人的生日;为日期模式;
4、界面逻辑:点击按钮1-10,若姓名不为空,则以“联系人信息”中的内容
生成一个新的联系人并加入到“未分组”中;若姓名空给出补全提示;5、界面逻辑:拖树中未选中联系人,按钮1-11灰掉;若树中选中一个联系人,
安妮1-11激活;点击按钮1-11,若姓名不为空,则以“联系人信息”中的内容修改树中选中的联系人信息;若姓名为空给出补全提示;
6、界面逻辑:若树中未选中联系人,按钮1-12灰掉;若树中选中一个联系人,
按钮1-12激活;点击按钮1-12,弹出删除联系人确认提示,若确认删除,将树中选中的联系人删除;若取消删除,不进行任何操作;
7、界面逻辑:点击按钮1-13,弹出添加分组对话框,输入分组名称(字符数
限8个),点击按钮2-2添加一个联系人分组;若分组名称为空给出补全提示;点击按钮2-3放弃添加分组;
8、界面逻辑:若树中未选中一个分组,按钮1-14灰掉;若树中选中一个分组,
按钮1-14激活;点击按钮1-14,若选中“未分组”,弹出不能删除提示,否则弹出删除分组确认提示,若确认删除将树中选中分组内的联系人移至“未分组中”,然后将选中分组删除;若取消删除,不进行任何操作;
9、控件1-15(水平划分线):旁边的为垂直划分线,常用于界面功能区划分;
划分线是静态类控件的一种,在界面编辑器中可先放置Picture Control之后修改Type属性为Etched Horz(水平)或Etched Vert(垂直)来实现;10、操作性要求:可以拖动联系人节点进行分组(如图箭头示意),分组节点不
可拖动;拖拽时具有拖拽图像,当鼠标落至某个分组时,该分组自动打开,并将分组节点选中;释放鼠标结束拖拽并完成节点移动及选中,如图13所示;
提示:
1、树形控件节点拖动的实现:需要响应4个消息,分别是TVN_BEGINDRAG、
WM_MOUSEMOVE、WM_LBUTTONUP、WM_KILLFOCUS:消息
TVN_BEGINDRAG标志着开始拖拽;消息WM_MOUSEMOVE标志着正在拖拽;消息WM_LBUTTONUP标志着拖拽结束;消息4是为了实现当程序失去焦点时自动结束拖拽。