VC++第4章对话框与常用控件
对话框和控件
10.1 10.2 10.3 10.4 习题 对话框和控件的基本概念 使用AppWizard开发MFC应用程序 基本控件 通用对话框
10.1.1 对话框的基本概念
在MFC中,对话框的功能被封装在了CDialog类中, CDialog类是CWnd类的派生类。 有模式对话框垄断了用户的输入,当一个有模式对 话框打开时,用户只能与该对话框进行交互,而其 它用户界面对象收不到输入信息。 无模式对话框类似普通的Windows窗口,在无模式 对话框打开时,用户可以同时打开其它窗口对象, 操作完毕后,又可用鼠标或其它方式激活该窗口。
出现“Add Member Function”对话框,在这里可以
输入成员函数的名称,系统默认的函数名为 OnButton1。
1 控件的消息及消息映射
(5)单击[OK]按钮,在MFC ClassWizard的“Member functions”列表中将列出新增加的成员函数。 在此成员函数中添加下列代码: void CEx_DlgCtrlsDlg::OnButton1() { MessageBox("你按下了\"Button1\"按钮!"); } (6) 编译并运行,当单击[Button1]按钮时,就会执行 OnButton1函数,弹出一个消息对话框。这就是按钮 BN_CLICKED消息的映射过程,其他控件的消息也可以类 似操作。
10.3 基本控件
控件的选择 静态文本 组框 复选框 组合框 水平滚动条 旋转按钮 滑动条 列表视图 标签 复合编辑 月历 用户定制工具 静态图片 编辑框 按钮 单选框 列表框 垂直滚动条 进展条 热键 树形视图 动画 日期选择 IP地址 组合框的扩展
图10.11 基本控件
第四章对话框和常用控件
2.1 对话框和控件概述
对话框是一种用户界面,它为用户提供了一种标准的处理数据的 方法。 从本质来说,对话框实际上是一个窗口,在MFC层次结构中, 对话框实际上是封装在Cdialog中,Cdialog类是CWnd类的派生类, 它是所有对话框的基类 对话框由两部分组成:对话框资源和对话框类。 控件是在系统内部定义的用于和用户交互的基本单元。
2.8.3 列表框
1. 列表框的风格和消息 按性质来分,列表框有单选、多选、扩展多选以及非选四种类型
图 不同类型的列表框
2.8.3 列表框
当列表框中发生了某个动作,如用户双击选择了列表框中某一项 时,列表框就会向其父窗口发送一条通知消息。
表 列表框的通知消息
2.8.3列表框
列表框的项除了用字符串来标识外,还常常通过索引来确定。索 引表明项目在列表框中排列的位置,它是以0为基数的,即列表框中 第一项的索引是0,第二项的索引是1 (1) 添加列表项
2.2 对话框的常用操作
1.创建对话框资源 在Visual C++中,用户通过工作区窗口可以方便的创建对话框资 源。主要有两种方式:(1)利用工作区的“Resource View”选项卡创 建对话框资源;(2)通过工作区的“ClassView”选项卡创建对话框 资源。
默认对话框 模板 默认对话框 资源ID号
2.8 工具箱中的常用控件
为了方便开发人员进行界面布局,Visual C++开发环境提供了一 个控制面板窗口,其中包含了各种常用的控件。
控件的选择 静态文本 组框 复选框 组合框 水平滚动条 旋转按钮 滑动条 列表视图 标签 复合编辑 月历 静态图片 编辑框 按钮 单选框 列表框 垂直滚动条 进展条 热键 树形视图 动画 日期选择 IP地址
对话框和常用控件
CDialog
Visual C++程序设计
CDialog类从CWnd类派生而来,所以它继承了 CWnd类的成员函数,具有CWnd类的基本功能 , 在 你 的 CDialog 类 的 派 生 类 中 可 以 直 接 调 用 CDialog类的成员函数。大部分的成员函数是虚 函数,可以在你的派生类中重载,以实现特定的 目 的 。 除 了 CDialog 类 成 员 函 数 , 类 CWnd 和 CWinApp也提供了一些成员函数用于对话框的 管理。
对话框保留在屏幕的同时,用户还可以在应用程序 其它窗口中进行工作的对话框称为非模态对话框。例 如,Word字处理软件中的Find 和Replace对话框 就是非模态对话框的一个很好的例子。
4.1.2 对话框的组成
对话框模板
对话框模板定义了对话框的特性(比如大小、位 置和风格)以及对话框中每个控件的类型和位置。 程序员不仅可以使用对话框资源编辑器建立对话框 资源模板外,还可以根据需要在内存中创建对话框 模板。当对话框模板创建后,程序员好可以在创建 和管理对话框时动态地改变部分控件的信息,如禁 止、变灰、改变标题和大小。
从程序员角度来看,对话框和控件都是窗口,查看 MSDN中的MFC组织图可以看到,它们都是从 CWnd类派生来的,这正好说明了“对话框和控件都 是窗口”。因此,对对话框的操作,经常要使用窗口 的成员函数来进行。
4.1.1 对话框的分类
1.模态对话框 在对话框关闭之前,用户无法在应用程序的其它窗
口中进行工作的对话框称为模态对话框。例如 Windows的各种应用软件中的Open File 对话框, 用户不能在应用程序的其它地方工作,直到对话框关 闭。 2.非模态对话框
VC++对话框与常用控件
返
回
CMyCalculatorDlg类添加数据成员 4.2.4 为CMyCalculatorDlg类添加数据成员
为 了 实 现 计 算 器 功 能 , 我 们 需 要 向 CMyCalculatorDlg 类 ( 即 MyCalculatorDlg.h文件中)添加变量。变量属性和用途如下表。
数据类型 double double double CString
教学内容
MyCalculator程序 演示 开发MyCalculator程序 口令对话框 通用对话框 常用控件介绍
§4.1 MyCalculator程序
程序运行结果
程序运行演示
返回目录
开发MyCalculator MyCalculator程序 §4.2 开发MyCalcuபைடு நூலகம்ator程序
4.2.1 创建工程 4.2.2 可视化设计 为编辑框IDC_DISPLAY IDC_DISPLAY引入变量 4.2.3 为编辑框IDC_DISPLAY引入变量 CMyCalculatorDlg类添加数据成员 4.2.4 为CMyCalculatorDlg类添加数据成员 BUTTON按钮的BN_CLICKED事件添加响应函数 按钮的BN_CLICKED 4.2.5 为BUTTON按钮的BN_CLICKED事件添加响应函数 4.2.6 编写程序代码 4.2.7 技术要点 4.2.8 程序优化
返
回
技术要点——UpdateData函数 UpdateData函数 4.2.7 技术要点 UpdateData
① UpdateData函数是CDialog的基类CWnd的成员函数; ② 函数原型如下: BOOL TRUE ); UpdateData( BOOL bSaveAndValidate =
VisualC++应用程序设计实验报告之对话框和按钮的控件
VisualC++应用程序设计实验报告之对话框和按钮的控件实验步骤与调试过程1.创建工作文件夹2.创建一个基于对话框的应用程序Ex_Research3.设计“上网问卷调查”对话框(1)按教程的步骤先将该对话框应用程序上机练习并通过(2)添加一个静态文本控件,标题为“你每天上网的平均时间”,保留默认的标识符(3)添加4个单选按钮控件,在其属性对话框中,分别将其标题设置为“<1小时”、“<2小时”、“<3小时”、“>3小时”,标示符分别为IDC_TIME_L1、IDC_TIME_L2 、IDC_TIME_L3、IDC_TIME_M4(4)选中第一个单选按钮的Group属性选项。
(5)划蚀刻线,添加静态图片控件,在其属性对话框中将其类型属性调整为“框架”,颜色属性选择“蚀刻”。
4.修改代码:(1)在OnInitDialog函数中添加如下代码:CheckRadioButton(IDC_TIME_L1,IDC_TIME_M3,IDC_TIME_L1 );(2)在OnOk函数中添加如下代码:str=str+"\n你每天平均上网的时间: \n";nID=GetCheckedRadioButton(IDC_TIME_L1,IDC_TIME_M3);GetDlgItemText(nID,strCtrl);str=str+strCtrl;5.编译运行并测试实验结果正常运行,可以按照要求显示。
由于初始化时已经设置了默认选,运行程序弹出对话框中每个提问均有选现象被选中,这样就避免了用户对某些问题未选择而带来的错误。
当用户选择完毕后,单击确认后,便弹出另一个对话框,将用户所选择的信息显示出来。
改程序界面简单明了,方便用户理解操作,而且对用户选择的内容及时反馈。
疑难小结通过本次实验熟练掌握了对话框的使用和控件创建和使用的方法主要算法和程序清单BOOL CEx_ResearchDlg::OnInitDialog(){CDialog::OnInitDialog();// Add "About..." menu item to system menu.// IDM_ABOUTBOX must be in the system command range.ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARA TOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}// Set the icon for this dialog. The framework does this automatically// when the application's main window is not a dialogSetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small icon// TODO: Add extra initialization hereCheckRadioButton(IDC_AGE_L18,IDC_AGE_M38,IDC_AGE_18 T27);CheckRadioButton(IDC_CM_FTTL,IDC_CM_OTHER,IDC_CM_F TTL);CButton* pBtn=(CButton*)GetDlgItem(IDC_DO_POP);pBtn->SetCheck(1); //使“收发邮件”复选框选中return TRUE; // return TRUE unless you set the focus to a control}d CEx_ResearchDlg::OnOK(){// TODO: Add extra validation hereCString str,strCtrl;str="你的年龄";UINTnID=GetCheckedRadioButton(IDC_AGE_L18,IDC_AGE_M38);GetDlgItemText(nID,strCtrl);str=str+strCtrl;str=str+"\n你使用的接入方式:";nID=GetCheckedRadioButton(IDC_CM_FTTL,IDC_CM_OTHE R);GetDlgItemText(nID,strCtrl);str=str+strCtrl;str=str+"\n你上网主要是:";UINTnCheckIDs[4]={IDC_DO_POP,IDC_DO_READ,IDC_DO_GAME,I DC_DO_OTHER};CButton* pBtn;for(int i=0;i<4;i++){pBtn=(CButton*)GetDlgItem(nCheckIDs[i]);if(pBtn->GetCheck()){pBtn->GetWindowText(strCtrl);str=str+strCtrl;str=str+" ";}}MessageBox(str);CDialog::OnOK();}void CEx_ResearchDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint(); }}。
从零开始学VC系列教程 二.对话框及常用控件实验
从零开始学VC系列教程二. 对话框及常用控件实验恭喜你,进入VC学习的第二节了.这一节是人机交互的基础.所谓人机交互,说通俗点就是与机器对话.然而我们现在的技术还不能像科幻片里一样与机器人直接说话就行了.所以,我们的操作意图还得通过文本输入,命令按钮等等来实现.本节内容:学会对话框调用及一些常用控件的使用方法.学习目的:学习人机交互,为软件开发提供界面基础.1.新建工程.参考第一节的方法新建一个工程,名字为Eg02完成后如下图细心的朋友一定会发现.新建的工程里还有一个对话框,ID名是IDD_ABOUTBOX这个是做什么用的呢?我们用到的软件都会有一个版权声明.通过第一章的学习,大家应该知道怎么观看这个IDD_ABOUTBOX对话框了吧.没错!双击IDD_ABOUTBOX就可以了.我们会看到如下的一个对话框这就是我们这个程序的关于对话框,一般用于版权声明及版本号标识.大家看到的这个对话框里有两个静态文本框和一个图像框(Picture),静态文本框我们在前一节已经介绍过了.大家可以修改一下版权所有这一行,填什么都可以,签个大名也行.完成以后你一定想看看效果,这个对话框怎么打开呢?其实VC已经为我们做好了.先按F7编译,然后按F5运行.大家可以看到程序运行了.单击应用程序图标,就会出现一个菜单,选最后一个[关于Eg02],关于对话框就弹出来了.当然,这是系统为我们做好的.自己怎么在程序中调用这个对话框呢?为了演示,首先参考第一节的内容添加一个按钮,然后把按钮的ID改为IDC_BTN_ABOUTME,把标题,也就是Caption 改为[关于].最终效果如下下面我们为按钮添加代码.相信大家一定还记得怎么进入代码吧..对了,双击[关于]按钮,在弹出的对话框中点[确定]就可以了.为了让大家更好的理解下面的操作,我们先要解释一下关于对话框的类.VC向导会为关于对话框建立一个类,大家看看下面的图单击标签ClassView(这里显示的是[Class…])就可以看到Eg02这个应用程序的类.第一个CAboutDlg就是关于对话框的类.CEg02Dlg对应IDD_EG02_DIALOG.中间的Ceg02App是应用程序的基础类.所以,如果要对关于对话框进行操作,就要用到类CAboutDlg,因为与此有关的函数及变量都封装在CAboutDlg中.看到这里大家可能又糊涂了,没关系,在以后的教程中,通过一些练习大家就会慢慢领会到的.这里还是先为[关于]按钮添加代码.void CEg02Dlg::OnBtnAboutme(){// TODO: Add your control notification handler code here}上面是VC为[关于]按钮添加的响应函数.我们添加代码成以下所示void CEg02Dlg::OnBtnAboutme(){// TODO: Add your control notification handler code hereCAboutDlg ADlg;ADlg.DoModal();}一共有两句,第一句是CAboutDlg ADlg;作用是定义一个变量Adlg.第二句是ADlg.DoModal();功能是调用类CAboutDlg里的一个函数DoModal();这个函数在MSDN里的解释是Call this member function to invoke the modal dialog box and return the dialog-box result when done. This member function handles all interaction with the user while the dialog box is active. This is what makes the dialog box modal; that is, the user cannot interact with other windows until the dialog box is closed.一般我们用于显示一个对话框.其实大家看看CAboutDlg这个类下面,只有两个函数DoModal()这个函数并不在这个里面.第一章我们提到过类的派生和继承.其实CAboutDlg这个类是派生于CDialog类,DoModal()这个函数是CDialog的成员函数,由于CAboutDlg是继承父类CDialog的,所以CDialog里的函数在CAboutDlg中也可以使用.下面我们来说说几个常用控件的使用.首先在IDD_EG02_DIALOG对话框中加入一个Edit(编辑框)控件.Edit一般用于输入输出数据文本.相当于VB里的TextBox.加入Edit控件后,编辑其属性为然后,我们再加一个按钮(PushButton),并编辑其属性为接下来,我们先说一下要实现的效果.很简单,在编辑框里输入一个文本,然后按显示,就把文本显示在静态文本框中.所以,这里要把静态文本编辑框的ID改为IDC_DISPLABEL下面我们为[显示]按钮添加代码void CEg02Dlg::OnBtnShow(){// TODO: Add your control notification handler code hereCString a;GetDlgItemText(IDC_EDIT_INPUT,a);SetDlgItemText(IDC_DISPLABEL,a);}其实不复杂,也只有三句,第一句定义一个CString类变量a 我们来说说GetDlgItemText这个函数吧.查查MSDN就知道函数原型了.int GetDlgItemText(int nID,LPTSTR lpStr,int nMaxCount)const;int GetDlgItemText( int nID, CString& rString ) const;大家看看就觉得奇怪了,怎么有两个原型啊?并且一个是传两个参数,另一个是传三个参数.在VC里面,同一个类下是可以存在多个同名函数的,具体调用哪个函数要看参数的不同.在这里我们传入了两个参数,所以VC会调用int GetDlgItemText( int nID, CString& rString ) const;这个函数.第一个函数是控件的ID号,第二个是字串.第二个传了地址,所以我们在下一句中用的a已经是获得IDC_EDIT_INPUT的文本了.运行效果如下下面介绍一下进度条的使用以及定时器的使用.我们要实现的效果是进度从0到满格,然后再从0到满格,依次循环.每跳一格间隔500ms,这个时间我们用定时器来实现.首先从控件条里拖出一个进程条到对话框,修改属性如下然后我们要介绍一下VC的定时器.VC里面使用定时器有多种方式,我们先介绍一种作为抛砖引玉首先添加一个Windows消息处理器.消息这个词语可能很陌生,我们会在后面很多次说明.这里先照图做在类管理器里选中Ceg02Dlg这个类,然后点右键,就会弹出一个菜单,选择[Add Windows Message Handler…],接下来会弹出另一个菜单双击WM_TIMER然后按[确定]就可以了.大家会看到,CEg02Dlg类中多了一个函数这个就是VC中的定时器响应函数.然后双击这个函数就进入代码了然后我们为Timer事件添加代码.void CEg02Dlg::OnTimer(UINT nIDEvent){// TODO: Add your message handler code here and/or call default IDC_PROGRESS static int nPos=0;((CProgressCtrl*)(GetDlgItem(IDC_PROGRESS)))->SetPos(nPos);if(nPos<100) nPos+=10;else nPos=0;CDialog::OnTimer(nIDEvent);}首先定义一个整型的变量nPos用于记录进度条的进度值.默认时,进度条0为空,100为满格.从后的程序大家可以看到,这个变量自加到100就变为0.最难理解的就是((CProgressCtrl*)(GetDlgItem(IDC_PROGRESS)))->SetPos(nPos);首先, GetDlgItem(IDC_PROGRESS)这个函数用来获取IDC_PROGRESS的句柄,在VC里面引入了句柄这个词语,我们将在下一章中对消息和句柄进行详细的说明, 句柄是WINDOWS 用来标识被应用程序所建立或使用的对象的唯一整数,WINDOWS使用各种各样的句柄标识诸如应用程序实例,窗口,控制,位图,GDI对象等等。
软件程序设计与训练第4章VC++对话框(5)
2、6处理消息 对话框是一种窗口,可以处理各种消息。 首先,使用Class Wizard把消息映射到对话 框类中,给对话框类添加相应的消息处理 函数;然后,再编写消息处理函数中的代 码。
CDialog派生类中一般都要重载以下成员函数: ①OnInitDialog 响应消息WM_INITDIALOG 初始化对话框时,将调用这个函数。 ②OnOk 单击“确定”按钮响应控件 通知消息BN_CLICKED时,将调用这个函 数。 ③OnCancel 单击“取消”按钮响应控件 通知消息BN_CLICKED时,将调用这个函 数。 如果对话框中的按钮不仅仅是“确定” 或“取消”按钮,那么在对话类中还需要 编写消息处理函数来响应由其他按钮产生 实例1:编程演示对话框的显示 的控件通知消息。
• 对话框类中的成员变量可以拥有Control属性,而 不是Value属性。Value属性指的是从控件所返回 数据的类型(如CString或long等);Control属性允 许通过某一成员变量对控件进行直接访问,成员 变量的类型必须是MFC控件类(如CEdit或 CComboxList)之一。 • 对于某一给定的控件,可以有多个具有Value属性 的成员变量,但最多只能有一个具有Control属性 的成员变量。 • 具有Control属性的成员变量又称为成员对象,可 以使用成员对象调用控件的任何成员变量。例如, 对于由m_checkboxDefault变量表示的CButton类 型的复选框控件,可以用 m_checkboxDefault.SetState(TRUE)来设置控件 的状态。
2 创建对话框并显示
2.1创建对话框模板
使用对话框编辑器来创建包含不同控件 的对话框资源 对话框编辑器使用对应的#define常量来 更新项目的resource.h文件。
VC++ MFC对话框和常用教程
第五章对话框和常用控件对话框是Windows应用程序中最重要的用户界面元素之一,是与用户交互的重要手段,在程序运行过程中,对话框可用于扑捉用户的输入信息或数据。
对话框是一个特殊类型的窗口,任何对窗口进行的操作(如:移动、最大化、最小化等)都可在对话框中实施,一般来说,在对话框中通过各种控件(如:按钮、编辑框、列表框、组合框等)来和用户进行交互。
控件是在系统内部定义的用于和用户交互的基本单元。
一、对话框的使用Visual C++提供的对话框编辑器能“可视”地进行设计、编辑,并可用ClassWizard为对话框从CDialog基类中派生一个类,MFC的CDialog类封装了用于对话框的显示、关闭等操作的许多功能函数,例如:DoModal函数用来显示模式对话框并返回用户操作的结果。
1、模式对话框(为186附加举例页)所谓模式对话框是指,当对话被弹出时,用户必须在对话框中进行相应的操作,在退出对话框之前,对话框所在的应用程序不能继续执行。
平常我们所见到的对话框大多是模式对话框。
例:模式对话框(通过菜单命令弹出)1)建一个单文档(SDI)应用程序2)创建对话框模板Insert→Resource→选中Dialog→单击New拖过一个静态文本,鼠标对准它,按右键点properties改标题为“新建模式对话框”。
3)鼠标右键对准对话框的任何位置单击,选择properties选项,设置ID为IDD_MYDIALOG 4)给对话框创建类双击新建对话框的任何位置,单击OK,写类名为“CMyDlg”,保证”CDialog”作为该类的基类。
5)创建菜单命令:a)打开资源编辑器的菜单项Menub)双击IDR_MAINFRAMEc)双击右边空白菜单,点开pop_up(让它是空白),在名字处写”弹出对话框(&A)”,ID 处写ID_PUPDIALOG6)将菜单命令连接到主框架程序中,完成ID_PUPDIALOG的消息映射:View→ClassWizard→保证Class name里是CMainFrame,在ObjectIDs里找到ID_PUPDIALOG点黑→Messages里(右边)点COMMAND建立主框架对象方法并加代码:void CMainFrame::OnPupdialog(){ CMyDlg MyDlg;MyDlg.DoModal(); //DoModal()是CDialog类成员函数,通过调用该//函数将显示对话框。
任务4 对话框与常用控件编程
任务4 对话框与常用控件编程一、综合课程实习目的1.掌握模式对话框的创建与使用。
2.掌握常用控件的使用方法。
3.熟悉通用对话框和消息对话框.。
4.熟悉GDI绘图对象的使用二、综合课程实习内容创建一个MFC应用程序ControlUse,进行学生数据的显示。
三、综合课程实习指导1.创建一个MFC(基于对话框)的应用程序ControlUse2.在对话框中加入控件,如上图所示。
对话框的消息处理函数:首先针对学生信息的消息处理:初始化列表:OnButtonInit()添加代码:void CControlUseDlg::OnButtonInit(){// TODO: Add your control notification handler code hereDWORDdwExStyle=LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES|LVS_EX_HEADERDRA GDROP|LVS_EX_ONECLICKACTIV ATE;m_ListCtrl.ModifyStyle(0,LVS_REPORT|LVS_EX_ONECLICKACTIVA TE);m_ListCtrl.SetExtendedStyle(dwExStyle);m_ListCtrl.SetTextColor(RGB(200,200,0));m_ListCtrl.SetBkColor(RGB(240,247,233));m_ListCtrl.InsertColumn(0,"学号",LVCFMT_CENTER,65,0);m_ListCtrl.InsertColumn(1,"姓名",LVCFMT_CENTER,65,0);m_ListCtrl.InsertColumn(2,"性别",LVCFMT_CENTER,65,0);m_ListCtrl.InsertColumn(3,"系部",LVCFMT_CENTER,65,0);m_ListCtrl.InsertColumn(4,"党员",LVCFMT_CENTER,65,0);m_ListCtrl.InsertColumn(5,"数学",LVCFMT_CENTER,65,0);m_ListCtrl.InsertColumn(6,"英语",LVCFMT_CENTER,65,0);m_ListCtrl.InsertColumn(7,"总分",LVCFMT_CENTER,65,0);m_scoremath="0";m_scoreenglish="0";UpdateData(false);}“<<添加数据”按钮void CControlUseDlg::OnButtonAdd(){// TODO: Add your control notification handler code hereUpdateData(true);int nIndex=m_ListCtrl.GetItemCount();if(m_sNO== "" ){MessageBox("请输入学号!",NULL,MB_OK);GetDlgItem(IDC_EDIT_NO)->SetFocus();return;}if(m_Name== "" ){MessageBox("请输入姓名!",NULL,MB_OK);GetDlgItem(IDC_EDIT_NAME)->SetFocus();return;}else{CString strtemp;m_ListCtrl.InsertItem(nIndex,m_sNO);m_ListCtrl.SetItemText(nIndex,1,m_Name);if(m_iSex==0)strtemp="男";elsestrtemp="女";m_ListCtrl.SetItemText(nIndex,2,strtemp);m_comDept.GetWindowText(strtemp);m_ListCtrl.SetItemText(nIndex,3,strtemp);if(m_bParty==true)strtemp="是";elsestrtemp="否";m_ListCtrl.SetItemText(nIndex,4,strtemp);m_ListCtrl.SetItemText(nIndex,5,m_scoremath);m_ListCtrl.SetItemText(nIndex,6,m_scoreenglish); }m_sNO=m_Name="";m_comDept.SetCurSel(-1);m_bParty=false;m_scoremath="0";m_scoreenglish="0";UpdateData(false);}“<<修改数据”按钮void CControlUseDlg::OnButtonEdit(){// TODO: Add your control notification handler code here UpdateData();int nItem=m_ListCtrl.GetNextItem(-1,LVNI_SELECTED); if(nItem!=-1){CString strtemp;m_ListCtrl.SetItemText(nItem,1,m_Name);if(m_iSex==0) strtemp="男";else strtemp="女";m_ListCtrl.SetItemText(nItem,2,strtemp);m_comDept.GetWindowText(strtemp);m_ListCtrl.SetItemText(nItem,3,strtemp);if(m_bParty==true) strtemp="是";else strtemp="否";m_ListCtrl.SetItemText(nItem,4,strtemp);m_ListCtrl.SetItemText(nItem,5,m_scoremath);m_ListCtrl.SetItemText(nItem,6,m_scoreenglish);}else{MessageBox("请选中一条记录!");}m_sNO=m_Name="";m_comDept.SetCurSel(-1);m_bParty=false;m_scoremath="0";m_scoreenglish="0";UpdateData(false);}“×删除数据”按钮void CControlUseDlg::OnButtonDel(){// TODO: Add your control notification handler code hereint nItem=m_ListCtrl.GetNextItem(-1,LVNI_SELECTED);if(nItem!=-1){m_ListCtrl.DeleteItem(nItem);}m_sNO=m_Name="";m_comDept.SetCurSel(-1);m_bParty=false;m_scoremath="0";m_scoreenglish="0";UpdateData(false);}“总分”按钮void CControlUseDlg::OnButtonSum(){// TODO: Add your control notification handler code hereint nIndex=m_ListCtrl.GetItemCount();for(int i=0;i<nIndex;i++){int sum=0;sum=sum+atoi(m_ListCtrl.GetItemText(i,5))+atoi(m_ListCtrl.GetItemText(i,6));CString s1;s1.Format("%d",sum);m_ListCtrl.SetItemText(i,7,s1); }}修改之前列表控件必须选中一行才能修改,所以列表控件有OnClickList1消息,该消息代码如下:void CControlUseDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult){// TODO: Add your control notification handler code hereint nItem=m_ListCtrl.GetNextItem(-1,LVNI_SELECTED);if(nItem!=-1){m_sNO=m_ListCtrl.GetItemText(nItem,0);m_Name=m_ListCtrl.GetItemText(nItem,1);CString str;str=m_ListCtrl.GetItemText(nItem,2);//MessageBox(str);if(str=="男") m_iSex=0;else m_iSex=1;str=m_ListCtrl.GetItemText(nItem,3);m_comDept.SetWindowText(str);str=m_ListCtrl.GetItemText(nItem,4);if(str=="是") m_bParty=true;else m_bParty=false;m_scoremath=m_ListCtrl.GetItemText(nItem,5);m_scoreenglish=m_ListCtrl.GetItemText(nItem,6);}UpdateData(false);*pResult = 0;}四、实验任务1.进行合法性输入判断,如图所示。
VC++4对话框PPT课件
ZLi5_1_2
5
方法二
Li5_2
•用MFC AppWizard[exe]创建对话框模板
•设计对话框
右击工具栏空白处打开控件工具栏
•创建对话框数据成员
添加与对话框控件相关联的数据成员。目的是接收用户输入
的数据。Ctrl+W->Member Variables
•为控件添加消息处理函数
一般不需要对对话框中的[OK]与[Cancel]按钮进行消息映射,
•{
• UpdateData()
// 默认参数是TRUE,将控件中的数据传给相关联的数据成员
• switch(fuhao) {
• case'+': m_result=m_num1+m_num2;
•
break;
• case'-': m_result=m_num1-m_num2;
•
break;
• case'*': m_result=m_num1*m_num2;
3
(4) 在程序中使用对话框
对话框类 对象; 对象.DoModal(); DoModal() :模式对话框函数用于对话框的显示与终止 如在菜单命令的消息函数中.
CMyDlog dlg; if (dlg.DoModal()==IDOK) { ……; int x1=10,y1=10; Int x2=10+dlg.m_lenth,y2=10+dlg.m_lenth; dc.Rectangle(x1,y1,x2,y2);); }
第1个参数TRUE:【打开】对话框;
第2个参数“bmp”:如果在文件名对话框中输入文件名时未指定扩展名, 则会自动附加“.bmp”;
VC++常用控件
©2013-8North University of China
中北大学计算机系基础教研室
控件的组织和共有属性
控件组织:利用对话框编辑器和控件工 具栏进行控件的添加、删除和编辑。
控件的属性决定了控件的外观和功能, 利用控件属性对话框来设置。
©2013-8North University of China
时,数据从控件向相关联的成员变量复制
©2013-8North University of China 8
中北大学计算机系基础教研室
§4.2 静态控件和按钮
静态控件和按钮是Windows最基本的控 件。 一、静态控件
静态控件是用来显示一个字符串、框、矩形、 图标,位图或增强的图元文件。 在对话框编辑器的控件工具栏中,属于静态 控件的有:静态文本、组框和静态图片三种。
©2013-8North University of China 11
中北大学计算机系基础教研室
编辑框的基本功能
口令设置 选择文本 设置编辑框的页边距 剪贴板操作 获取多行编辑框文本
©2013-8North University of China
12
中北大学计算机系基础教研室
旋转按钮控件的通知消息只有一个: UDN_DELTAPOS,是当控件的当前数 值将要改变时向其父窗口发送的。
10
按钮选中操作
©2013-8North University of China
中北大学计算机系基础教研室
§4.3 编辑框和旋转按钮控件
编辑框是一个让用户从键盘输入和编辑文本的 矩形窗口,用户可以通过它很方便的输入各种 文本、数字或者口令,也可以使用它编辑或修 改简单的文本内容。 “旋转按钮控件”是一对箭头按钮,用户点击 它们来增加或减小某个值,比如一个滚动位置 或显示在相应控件中的一个数字。 一个旋转按钮控件通常是与一个相伴的控件一 起使用的,这个控件称为“伙伴窗口”。
vc之控件篇
VC之控件篇1 使用Windows标准控件1.1 常见控件列表Windows标准控件即普通控件,撰写此文时,笔者每天面对的Word就带了一脸的控件,当然你肯定也熟悉:字体选择下拉框、工具栏、滚动条、状态栏,如此等等。
常见的Windows标准控件在VC里就有:图2 控件集窗口通常这个控件集窗口在你的对话框设计界面的附近总能找到,如果找不到,在VC工具栏的任何空白处点击右键,在弹出菜单的Controls菜单项前面打上勾即可,如图所示:图3 显示控件集窗口你也许已经看到了,我们图1所示的FlashPlayer中有3个控件是Windows标准控件,好,我们先系统地学习一下怎么使用这3个控件。
1.2 引入控件1. 准备对话框对话框相当于控件的容器,我们当然要先准备一个对话框。
好办,直接创建一个基于对话框的工程就是了:图4 准备对话框Step 1注意,在Step 2中要确认“3D Controls”和“ActiveX Controls”前面打上勾,如图所示:图5 准备对话框Step 2这样你的程序就支持三维控件和我们后面即将使用到的ActiveX控件了。
如果去掉了勾,或者你面对的正是你师兄当年准备论文的旧的project,它好像并不支持ActiveX控件,那该怎么办呢(好多VC网友总是带着那张哭丧脸的表情问我这种问题)?没事,在主程序文件的Ini tInstance()函数头部加上以下语句即可:查看源代码拷贝至剪贴板打印代码1.BOOL CFlashPlayerApp::InitInstance()2.{3. AfxEnableControlContainer();4.5.#ifdef _AFXDLL6. Enable3dControls(); // Call this when using MFC in a shared DLL7.#else8. Enable3dControlsStatic(); // Call this when linking to MFC statically9.#endif10.11.//…12.}B O O L CFl ashPl ayer App::I ni t I nst a{Af xEnabl eCont r ol Cont ai ne#i f def_AFXD LL对话框准备好了,缺省情况下,它总会自动带上3个控件:2个按钮,“确定”与“取消”和一个“TOD O: 在这里设置对话控制” 文本标签。
第4章 对话框和常用控件
(a)
(b)
图4.7 单个控件和多个控件的选择框
4.1.4 添加和布局控件
3. 控件的删除、复制和布局 控件的删除、 当单个控件或多个控件被选取后,按方向键或用鼠标拖动控件的选择框可移动控 件。若在鼠标拖动过程中还按住Ctrl键则复制控件。若按Del键可将选取的控件删 除。当然还有其他一些编辑操作,但这些操作方法和一般的文档编辑器基本相 同,这里不再重复。 对于控件的布局,对话框编辑器中提供了控件布局工具栏,如图4.8所示,它可 以自动地排列对话框内的控件,并能改变控件的大小。
图4.11 静态文本控件的属性对话框 图4.10 添加的静态文本控件
4.1.5 创建对话框类
在对话框资源模板的空白区域(没有其他元素或控件)内双击鼠标,将弹出如图 4.12所示的对话框,询问是否为对话框资源创建一个新类。 单击[OK]按钮,将弹出如图4.13所示的New Class对话框。在Name框中输入类 名CFirstDlg。Base class和Dialog ID内容是由系统自动设置的,一般无需修改。 从Base class框的内容可以看出,用户对话框类是从基类CDialog派生而来的。 单击[OK]按钮,一个基于对话框资源模板的对话框类CFirstDlg就创建好了。此 时,出现MFC ClassWizard(MFC类向导)对话框。Biblioteka 4.1.4 添加和布局控件
需要注意的是: (1) 一旦单个控件被选取后,其四周由选择框包围着,选择框上还有几个(通常是 八个)蓝色实心小方块,拖动它可改变控件的大小,如图4.7(a)所示。 (2) 多个控件被选取后,其中只有一个控件的选择框有几个蓝色实心小方块,这 个控件称为主要控件,而其他控件的选择框的小方块是空心的。如图4.7(b)所示。
VC入门宝典4常用控件
{
UpdateData(true);
CString str;
str.Format("%d",m_value);
MessageBox(str);
*pResult = 0;
}
再加上:
m_ctrl.SetRange(20,120);// 设置最小,最大值
void CControlsDlg::OnAPPEND()
{
UpdateData();
if(m_input.IsEmpty()) return;
int i = m_ctrl.GetCount();
m_ctrl.SetCurSel(i-1);//选取最后一个;
定义一个成员变量CBitmapButton bb,在OnInitDialog()加
bb.AutoLoad(IDOK,this);
有一个问题要注意,当点上自画时,默认按钮会被取消,所以你必须重新设定一个默认按钮。
将上面的一句改成:
bb.LoadBitmaps("OKU");//最多可以加载4幅,至少加载一幅。
int i = m_ctrl.GetCurSel();
if(-1 != i)
m_ctrl.DeleteString(i);
}
常用函数:
ResetContent 清空。
int FindString( int nStartAfter, LPCTSTR lpszItem ) const;
}
备用函数
CRect r;
GetClientRect(&r);
r存储了取消按钮的边界值。
列表框
《Visual C++程序设计教程》第四章对话框设计和Windows常用控件
4.1 对话框应用程序介绍
1.对话框组成 对话框主要由以下两部分组成: (1) 对话框资源:定义了对话框的特性(如大小、位 置和风格等)以及对话框中每个控件的类型、位置等 属性。一般情况下,对话框资源在资源编辑器中静 态地定义,也可以用编程的方法在程序运行时动态 地创建。 (2) 对话框类:对话框类是与对话框资源相关联的, 基于CDialog类的派生类,它提供编程接口来管理对 话框。
1.通过资源编辑器添加控件 打开对话框资源编辑器弹出如图48所示的控 件工具栏之后,就可以方便地在对话框中添加 各种控件了。 (1)单击添加:在控件工具栏上单击要添加 的控件后,将鼠标移动到对话框模板上,此时 鼠标光标变成了“+”形状,在对话框上再次单 击鼠标,控件就添加到对话框模板上了。 (2)拖动添加:拖动要添加的控件到对话框 模板上,然后释放鼠标,也可以添加控件。
(2)单击“新建”按钮可以创建一个资源类型列表中指定类 型的新资源;单击“定制”按钮可以创建资源类型列表中 没有的新类型的资源;单击“导入”按钮可以将外部已有 的位图、图标等资源添加到当前应用程序中。 (3)修改对话框属性。在对话框模板的空白处右击,从弹出 的快捷菜单中选择“属性”命令,弹出如图4-3的“对话属 性”对话框。
4.列表框控件(CListBox) 列表框是一种输入控制,它可以使用户从所列的表 项中进行选择。用户可以在其中选择一个或多个项, 这与单选按钮和复选框的功能有些相近,但不同的 是,列表框中项的数目是灵活变化的,程序运行时 可往列表框中添加或删除某些项。并且,当列表框 中项的数目较多不能一次全部显示时,还可以通过 滚动条来拓展显示范围。
轻松学VisualC之常用控件介绍共29页
5.4.1 复选框按钮简介
有些选择是多项的,例如,你喜欢的蔬菜有哪些, 而像性别这样的选项就只能选一个。可以利用上一 节所介绍的单选框来处理单项选择问题,还有很多 时候我们需要利用复选框来解决多项选择的问题。
和单选按钮一样,我们通常把类型相同的选项用组 框来作为标示。用ClassWizard可以为每一个复选框 按钮关联一个值类型变量用作数据交换使用,该变 量是BOOL型,值为TRUE时表示选中了该复选框, 值为FALSE时表示没有选中该复选框。
5.3.2 单选框按钮例子
下面举个单选框的小例子,实现单击“查询”按钮 弹出用户所选择的职业。
5.4 复选框按钮
复选框按钮(Check Box)也是Windows提供的又一 种很常见的按钮。但是使用的时候不需要像单选按 钮那样进行分组。可以使用复选按钮,从一组选项 中选择一个选项或多个选项,各个选项之间的选中 状态互不相关。本节也只介绍复选框最常用的操作, 其它一些属性或控件类型变量的使用可根据前几节 介绍的方法自己尝试或查看相应的帮助文档。
5.4.2 复选框按钮例子
下面通过一个小例子来说明复选框的基本使用。实 现单击“查询”按钮弹出一个消息对话框,显示您 所喜欢的蔬菜。
5.5 列表框
如果需要从多个数据中进行选择,可以使用列表框 (List Box)实现。使用列表框不仅可以从已有的数 据中进行选择,还可以很方便地实现动态添加和删 除数据。这一节主要介绍列表框的一些基本属性和 常用的操作方法。
5.3 单选按钮
使用单选按钮(Radio Button)从一组选项中选择唯 一一个选项,当我们在填写表格时经常会用到。例 如,在一组职业中选择你的职业等。本节讲解单选 按钮最常用的操作及一些特点。
5.3.1 单选按钮的特点及其应用
vc中的对话框和控件
10.2.1 生成基于对话框的MFC应用程序框架
(1)启动MFC AppWizard (2) MFC AppWizard-Step 1对话框:选择应用 程序的类型和语言。 (3) MFC AppWizard-Step 2 of 4对话框:询 问了三个问题并要求输入一个标题。 (4) MFC AppWizard-Step 3 of 4对话框:询 问了三个问题。 (5) MFC AppWizard-Step 4 of 4对话框:显 示AppWizard为应用程序生成的派生类的一些情况。 (6) 编译运行。
第10章 对话框和控件
10.1 10.2 10.3 10.4 习题 对话框和控件的基本概念 使用AppWizard开发MFC应用程序 基本控件 通用对话框
10.1 对话框和控件的基本概念
10.1.1 对话框的基本概念 10.1.2 控件的基本概念
10.1.1 对话框的基本概念
在MFC中,对话框的功能被封装在了CDialog类中, CDialog类是CWnd类的派生类。 有模式对话框垄断了用户的输入,当一个有模式对 话框打开时,用户只能与该对话框进行交互,而其 它用户界面对象收不到输入信息。 无模式对话框类似普通的Windows窗口,在无模式 对话框打开时,用户可以同时打开其它窗口对象, 操作完毕后,又可用鼠标或其它方式激活该窗口。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
返回目录
4.2.1 创建工程
创建MyCalculator工程的步骤: (1) 启动Visual C++6.0。从“File”菜单中选择“New” ; (2) 在New对话框中选择“Project”标签 ,然后指定工程类型MFC AppWizard[exe]、工程名MyCalculator和工程位置D:\MyVC; (3) 点击“OK”按钮,弹出MFC AppWizard-Step 1对话框。选择 “Dialog based”单选按钮,创建一个基于对话框的应用程序; (4) 单击“Finish” 按钮。此时Visual c++6.0将显示NewProject Information窗口; (5) 单 击 “ OK” 按 钮 。 于 是 , Visual C++6.0 就 会 创 建 MyCalculator工程以及相关的所有文件。
数据变量名 称 m_first
m_second
数据的作用
存储一次运算的第一个数以及一 次运算的结果 存储一次运算的第二个数
存储小数点的系数权值 存储运算操作符
m_coff m_operator
4.2.5 为Button按钮的 BN_CLICKED事件添加响应函数
Object IDs IDC_BUTTON1 …… IDC_BUTTON9 IDC_BUTTON_POINT IDC_BUTTON_SIGN IDC_BUTTON_ADD IDC_BUTTON_MINUS IDC_BUTTON_MUTIPLY …… Messages BN_CLICKED …… BN_CLICKED BN_CLICKED BN_CLICKED BN_CLICKED BN_CLICKED BN_CLICKED …… Member Functions OnOnButton1() …… OnOnButton9() OnButtonPoint() OnButtonSign() OnButtonAdd() OnButtonMinus()
以点击“+”运算符为例,在消息响应函数中编写如下代码。 void CMyCalculatorDlg::OnButtonAdd() { Calculate(); m_operator="+"; }
void CMyCalculatorDlg::Calculate(void) { switch(m_operator.GetAt(0)) { case '+': m_first +=m_second;break; case '-': m_first -=m_second;break; case '*': m_first *=m_second;break; case '/': if(fabs(m_second)<= 0.000001) { m_display = "除数不能为零";
返
回
用 MFC ClassWizard 为 对 话 框 IDD_MYCALCULATOR_DIALOG 中 的 所 有 Button按钮的BN_CLICKED事件添加处理函数,如表4-3所示。
OnButtonMutiply() ……
返
回
4.2.6 编写程序代码
1. 为数字“N”按钮的消息响应函数添加代码。算法设计如下:
返 回
4.2.2 可视化设计
返
回
可视化设计,就用VC++自带的工具软件Winzards, 制作计算器程序界面。即添加计算器中的数字、运算符 等按钮和数字显示编辑框。 控件的两个要素:ID标识符和Caption文本
返
回
4.2.3 为编辑框IDC_DISPLAY引入变量
为了能够在程序运行过程中,将输入的数据和计算的结果在编 辑框上显示,必须为它引入一个变量,从而能够使编辑框以变量的 形 式 出 现 在 程 序 中 。 利 用 函 数 UpdateData(true) 或 UpdateData(false)就可达到目的。 在MFC ClassWizard对话框中,选择“Member Variable”标签为 IDC_DISPLAY编辑框引入变量:CString m_display;
}
完全类似,请读者为其它数字按钮的消息响应函数添加代码。
2. 为运算符(+、-、*、/)按钮的消息响应函数添加代码 算法描述:
(1)m_first与 m_second作m_operator运算后m_first;
(2)0m_second; (3)m_first m_display (显示) (4)用当前点击的运算符 m_operator; (5)将小数的权值变量m_coff置1.0复位。
返
回
4.2.7 技术要点——字符串CString类
CString类的对象由一个长度可变的字符序列组成,包含很多成员函数用来操作字 符串,可以很方便地实现对字符串的各种操作。CString类中的字符是TCHAR类型 的。 (1) 构造函数 CString();//产生一个空的CString对象
CString(const CString&stringSrc);//用另一个CString对象的值初始化对象
UpdateData(false); return;
} m_first /=m_second;break; }
m_second=0.0;
m_coff = 1.0; UpdateDisplay(m_first);//更新编辑框的显示内容 }
void CMyCalculatorDlg::UpdateDisplay(double lVal) { m_display.Format( _T("%f"),lVal); int i=m_display.GetLength(); //格式化输出,将输出结果后的零全部截去 while(m_display.GetAt(i-1)=='0') {m_display.Delete(i-1,1);i--;} UpdateData(false); //更新显示编辑框变量m_display } 其它运算类似,留给读者自已完成。
UpdateData(TRUE); 相应的变量
UpdateData(FALSE) 相应的控件,即显示
//将控件中的数据传递给
//将变量中的数据传递给
4.2.7 技术要点——关于消息响应函数
用MFC ClassWizard为对话框中某按钮的BN_CLICKED事件添加 消息处理函数时,MFC ClassWizard为我们做了三件事: (1) 在类的定义MyCalculatorDlg.h文件中,添加了消息响应函数 的函数原型; (2) 在类的实现文件MyCalculatorDlg.cpp中,添加了函数体; (3) 在类的实现文件MyCalculatorDlg.cpp中,添加了消息映射。 所以,如果想删除通过ClassWizard创建的消息响应函数,在MFC ClassWizard 对 话 框 中 , 选 中 要 删 除 的 函 数 , 单 击 “ Delete function”按钮将函数删除。但是源文件中相应的函数体并没有删 除,需要手工方法将函数体删除。
第4章 对话框与常用控件
教学目标
掌握Button 、Edit Box和Static Text 控 件的创建和使用方法 掌握基于对话框的应用程序的编程技术 掌握模式对话框、非模式对话框和通用对 话框的设计与调用
《Visual C++程序设计》电子教案----王明福编
教学内容
MyCalculator程序 演示 开发MyCalculator程序 口令对话框 通用对话框 常用控件介绍
返
回
// “.”按钮的消息响应函数
void CMyCalculatorDlg::OnButtonPoint() { m_coff = 0.1 ;
} // “+/-”按钮的消息响应函数 void CMyCalculatorDlg::OnButtonSign() { m_second = -m_second; UpdateDisplay(m_second);
5. 为“C”和“1/X”按钮的消息响应函数编写代码
void CMyCalculatorDlg::OnButtonClear()
{
m_first=0.0;
m_operator = "+"; UpdateDisplay(0.0);
m_second=0.0;
m_coff = 1.0;
}
void CMyCalculatorDlg::OnButtonReciprocal()
}
返
回
4.2.7 技术要点——UpdateData函数
① UpdateData函数是CDialog的基类CWnd的成员函数; ② 函数原型如下: BOOL TRUE ); UpdateData( BOOL bSaveAndValidate =
③ 一般在对话框的派生类中,利用UpdateData函数进 行控件和相应变量之间的数据传递,形式如下:
返
回
4.2.4 为CMyCalculatorDlg类添加数据成员
为 了 实 现 计 算 器 功 能 , 我 们 需 要 向 CMyCalculatorDlg 类 ( 即 MyCalculatorDlg.h文件中)添加变量。变量属性和用途如下表。
数据类型
double
double double CString
§4.1 MyCalculator程序
程序运行结果
程序运行演示
返回目录