收藏 分享(赏)

《面向对象C++》项目设计new.doc

上传人:dreamzhangning 文档编号:2641024 上传时间:2018-09-24 格式:DOC 页数:8 大小:78KB
下载 相关 举报
《面向对象C++》项目设计new.doc_第1页
第1页 / 共8页
《面向对象C++》项目设计new.doc_第2页
第2页 / 共8页
《面向对象C++》项目设计new.doc_第3页
第3页 / 共8页
《面向对象C++》项目设计new.doc_第4页
第4页 / 共8页
《面向对象C++》项目设计new.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、- 1 -安 徽 新 华 学 院面向对象程序设计 C+项目设计考试项目名称:MFC 关机、重起、切换用户程序院 系: 信息工程学院 年级专业: 09 计科一班 小组名称: 梦五队 指导教师: 张怡文 完成时间: 2010 年 6 月 6 日信息工程学院院 信息与计算科学系- 2 -C+程序设计项目设计任务及成绩院(系):信息工程学院 教研室:软件教研室角色 成员姓名 承担分工任务曹伟郑文浩查振兵单新星李玉环葛豪王莹编写代码及测试课 程 设 计 任 务1、 进一步理解和掌握面向对象程序设计的基本思想和特点;2、 能利用 C+和 MFC 进行可视化程序设计及分析;3、编写完全的设计分析文档。 -

2、3 -成绩成绩: 指导教师签字: 年 月 日一、设计目的与任务1、进一步理解和掌握面向对象程序设计的基本思想和特点;2、能利用 C+和 MFC 进行可视化程序设计及分析;3、编写完全的设计分析文档。二、设计方案与实施项目:可视化关机、重起、切换用户程序的设计与实现一、设计目的设计实现一个可视化的关机、重起、切换用户程序,主要对话框等构成,可以直接通过可视化的按钮和对话框与用户进行交互,实现关机、重起、切换用户的功能。二、功能结构设计(对话框)Class View 里的三个类的简单说明: class CMyDlg : public CDialog类 CDialog 是在屏幕上显示的对话框基类。对

3、话框有两类:模态对话框和非模态对话框。模态对话框在应用继续进行之前必须关闭。非模态对话框允许用户执行另外的操作而不必取消或删除该对话框。可覆盖的函数 OnInitDialog 覆盖该函数可改变对话框初始设置。OnOK 覆盖该函数可在对话框中进行 OK按钮操作。缺省值是关闭对话框,DoModal 返回 IDOK 。OnCancel 覆盖该函数可在对话框中进行 Cancel 按钮操作或按 ESC 键。缺省值是关闭对话框,DoModal 返回 IDCANCEL。另,在派生类 CMyDlg 和 CAboutDlg 中都有函数DoDataExchange(),其是用来在里面添加控件或者控件属性对应的成员

4、变量的,在执行 UpdateData()时系统会自动调用。调用它来初始化对话框的控件或更新数据。定义一个 ComboBox 变量: m_Combocomputer;然后就可以在对应的对话框的 DoDataExchange 函数中这样写到 DDX_Control(pDX,IDC_BUTTON1, m_Combocomputer),以后对 m_Combocomputer 的操作就会显现在对话框的那个 button 上了,实现了数据交换的功能。 class CAboutDlg : public CDialog类 CAboutDlg 是对话框类,它是由 MFC 类库中的 CDialog 类派生而来的。

5、 class CMyApp : public CWinApp类 CMyApp 是应用程序类,它的基类是 CWinApp。每个基于 MFC 的应用- 4 -程序都必须有一个从 CWinApp 类派生的对象。1. 基类说明:MFC 提供基类 CDialog,该类为对话框类,该类中有多个成员函数完成不同功能。从派生类运行时的画面可以推断出,基类已经提供的成员函数至少有:画面控制函数,初始化函数等;虚函数至少有 Ok(),Cancel() ,OnInitDialog()等实现多态性。2.派生类说明:在派生类中:1) 添加数据成员: ComboBox 类的对象 m_Combocomputer 和画面的组

6、合框对应。Int 型 m_num 的变量和编辑框对应。2)函数: OnOK(),OnInitDialog()等。3.相关成员函数功能说明:1) 函数 OnInitDialog()是布尔类型的虚函数,负责组合框,是在 CMyDlg 类中添加的组合框,则在 CMyDlg 类中的 OnInitDialog()函数添加初始化值,组合框被定义了一个 ComboBox 类的对象 m_Combocomputer,通过该对象的AddString()的函数可以添加初始值,如,m_Combocomputer.AddString(“change user“);m_Combocomputer.AddString(“r

7、estart“);m_Combocomputer.AddString(“Shutdown“)这些添加的在组合框的下拉框中是按字母顺序排列的。2)OnOK()函数的修改,不是调用基类的 CDialog:OnOK()的函数,通过对象m_Combocomputer 的 GetCurSel()函数返回组合框中列表框中当前选中的项的下OK()Cancel()OnInitDialog()-函数 virtual BOOL OnInitDialog();virtual void OnOK();成员 virtual void OnCancel();基类CDialog派生类CMyDlg-数据 CComboBox

8、m_Combocomputer;成员 int m_num;派生类CAboutDlg- 5 -标,用 switch 语句来匹配当前的下标而执行相应的操作。关于 GetCurSel()的一点说明,是返回组合框中列表框中当前选中的项的下标,没选的时候是-1,是从 0 开始编号的。4.引用函数说明:1) UpdateData(true)画面数据读入到后台处理函数中。2) UpdateData(false)把后台处理函数中的数据输出到画。3) ExitWindowsEx (EWX_REBOOT,0);重启4) ExitWindowsEx (EWX_SHUTDOWN,0);关机5) ExitWindows

9、Ex(EWX_LOGOFF,0); 切换用户6) ExitWindowsEx(EWX_FORCE+EWX_SHUTDOWN,0); 强制关机5新添加的功能添加了强制关机。三、实现步骤1. 建立一个对话框工程,如:开关机。2. 在资源视图中参考给定画面进行画面设计,添加组合框控件(Combo Box) ,两个按钮分别为 ok 和 cancel。3. 设置 Combo Box 控件 ID 为 IDC_Restart。4. 在类向导中为 IDC_Restart 添加 ComboBox 类型成员变量m_Combocomputer。5. 添加初始化代码,在类视图(classView)的 CMyDlg 中

10、找到 OnInitDialog()函数,双击该函数,为其添加代码如下: m_Combocomputer.AddString(“切换用户“);m_Combocomputer.AddString(“重启“);m_Combocomputer.AddString(“关机“);m_Combocomputer.AddString(“关机必须的“);是初始化组合框的。因是在 CMyDlg 类中添加的组合框,则在 CMyDlg 类中的负责初始化的 OnInitDialog()函数中添加,将其上的四个语句加在 return 语句之上即可。6修改 CMyDlg 类中 OnOK()函数的定义部分,不在是缺省的调用基

11、类的 OnOK()函数,添加 switch 语句匹配当前的下标而执行相应的操作。如下,方法一:void CMyDlg:OnOK() / TODO: Add extra validation hereUpdateData(true);int m_nType;m_nType=m_Combocomputer.GetCurSel();UpdateData(false);switch(m_nType)case 0:ExitWindowsEx(EWX_SHUTDOWN,0);- 6 -break;case 1:ExitWindowsEx(EWX_REBOOT,0);break;case 2:ExitWin

12、dowsEx(EWX_LOGOFF,0);break;方法二:void CMfc_RestartDlg:OnOK() / TODO: Add extra validation hereUpdateData(true);int m_nType;m_nType=m_Combocomputer.GetCurSel();m_num = m_nType;UpdateData(false);switch(m_nType)case 0:HANDLE hToken;TOKEN_PRIVILEGES tkp;if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUS

13、T_PRIVILEGES|TOKEN_QUERY, tkp.PrivilegeCount = 1;tkp.Privileges0.Attributes = SE_PRIVILEGE_ENABLED;AdjustTokenPrivileges(hToken,FALSE,ExitWindowsEx(EWX_SHUTDOWN, 0);break;case 1:if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES|TOKEN_QUERY, tkp.PrivilegeCount = 1;tkp.Privileges0.Attri

14、butes = SE_PRIVILEGE_ENABLED;- 7 -AdjustTokenPrivileges(hToken,FALSE,ExitWindowsEx(EWX_REBOOT, 0);break;case 2:ExitWindowsEx(EWX_LOGOFF,0);break;注:以上的 if 语句是获得系统的权限。注:要加修改 case 语句要匹配的值,因命令在组合框中的列表框中排列是按字母顺序的而不是按在赋值时给的顺序排列的。可能会导致与 switch 要匹配的不同从而出现该命令不是该动作。7.关于第 6 步的两个方法说明方法一的测试说明:由编辑框内的数据可知 GetCurSe

15、l()函数返回组合框中列表框中当前选中的项的下标是可行数据与 switch 的匹配数据相同(是人工安排的,先查看组合框内的命令的循序) ,但点击 ok 按钮时,只有在选择注销时,ok 按钮对应的后台onok 函数才有效。我认为可能涉及到系统权限的问题(有的时候可以) 。方法二就可以。但必须注意的是不光方法一还二都有一个问题,那就是当前鼠标选中的命令下标,是由初始化组合框内容决定的,其是按字母循序排列的。则switch 语句中的选择执行命令就有局限性,要靠人工查看决定,如果加一个项就要重新编号匹配相应的命令。四、主要画面初始运行画面效果:- 8 -图 1.1 开关机初始画面图 1.2 点下来框选择后的画面四、结 论1、通过 MFC 设计实现了一个可视化的开关机程序。2、可视化开关机的主要功能有:切换用户,关机,重启,强制关机3、主要用到的类有:CMyDlg,CAboutDlg,CMyApp4、主要添加的功能有:切换用户,关机,重启,强制关机5、设计小结:在 MFC 中每个视图都有一个 ID 号来对前台的事件编号,通过对 ID 号新建函数或变量与后台对应,以此来执行相应的动作。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报