6vc对话框与控件.ppt_第1页
6vc对话框与控件.ppt_第2页
6vc对话框与控件.ppt_第3页
6vc对话框与控件.ppt_第4页
6vc对话框与控件.ppt_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,第六章对话框与控件,河北经贸大学 信息技术学院,VC+系统开发,2,本章导读,本章通过开发一个计算器和口令对话框程序,掌握Button、Edit Box和Static Text控件的使用方法 其他常用控件的使用技巧,如List Control 基于对话框的应用程序的编程技术 模式对话框、非模式对话框和通用对话框的设计与调用。,3,本章主要内容,通用对话框 常用控件介绍 MyCalculator程序 开发MyCalculator程序 口令对话框,4,6.1 对话框概述,对话框 对话框编辑器 对话框编程 控件的创建与使用,5,6.1.1 对话框 P154,可视化的界面,包含:按钮、文本框、复选

2、框等。 对话框是一个窗口,控件也是一个窗口 对话框的两种消息: WM_INITDIALOG:数据成员的初始化 WM_COMMAND:控件的消息 MFC对对话框的支持:对话框从CDialog基类中派生一个类, MFC的CDialog类封装了用于对话框的显示、关闭等常用操作的许多功能函数;MFC程序框架;ClassWizard类向导 公共对话框: P154表6-1 对话框控件及其CWnd成员函数 表6-2/表6-3 模式对话框和无模式对话框,6,对话框的类型P156,1.模式对话框 弹出后,用户必须作出相应得操作,否则不可以继续。 用途广。 2.无模式对话框 弹出后,一直保留在屏幕上,其他操作可继

3、续,用的时候激活对话框即可。 两者的终止函数不一样: Cdialog:EndDialog-模式 CWnd:DestroyWindow-无模式 所占内存空间不同: 模式对话框: 由系统自动分配内存,当对话框退出时,对话框对象自动删除。 无模式对话框: 则需要用户来指定内存,退出时用户删除对话框对象,7,6.1.2 使用对话框编辑器,添加、选取、删除对话框控件; 改变控件的Tab键次序; 利用基准线、标尺及布局工具进行控件的布局; 测试所编辑的对话框的性能。,8,对话框编程步骤 p160-164,添加对话框资源 在单文档项目MyHello中,Insert-resourc(ctrl+R)-Dialo

4、g 编辑对话框属性 向对话框内添加控件 添加/选取/控件的布局/测试对话框 使用ClassWizard,为对话框资源创建一个新类CMyDlg,为控件进行消息映射 afx_msg void OnButton1(); /向导完成 ON_BN_CLICKED(IDC_BUTTON1, OnButton1) /向导完成 在OnButton1()中添加用户代码 MessageBox(欢迎进入对话框的设计!); 在程序(MyHello.cpp)中使用模式对话框 #include “MyDlg.h” CMyDlg Dlg; / MyHelloApp:InitInstance() Dlg.DoModal();

5、,9,6.1.4 控件的创建与使用p164-168,步骤如下: 将控件添加到对话框模板中 在对话框类中增加与控件相关联的数据成员 根据需要在对话框类中定义处理这些数据的成员变量 在对话框的OnInitDialog函数体中,为控件设置一些初始条件 m_MyBtn.SetWindowText(欢 迎); 在对话框的控件消息处理函数中,添加控件处理代码,10,访问控件 P168,关联变量-ClassWizard添加 控件变量控件类对象,一个窗口对象 m_MyBtn.SetWindowText(“这是一个命令按钮”); 值变量普通类型CString、int DDX对话数据交换与DDV对话数据验证 Up

6、dateData(TRUE); /对于值变量,控件中的值传递变量 UpdateData(FALSE); 控件窗口指针 CEdit *pEdFirst=(CEdit *) GetDlgItem(ID_FIRSTNAME);,例如DDX_Text(pDX, IDC_PASSWORD_EDIT, m_password),11,综合示例一 -模式对话框与无模式对话框的编程(口令对话框),为MyHello程序添加”口令”对话框,12,1.对话框类型,无模式对话框 模式对话框,不允许用户在关闭对话框之前切换到应用程序的其他窗口,允许用户在该对话框与应用程序其他窗口之间的切换,预备知识,对话框是实现人机交互

7、的重要手段,对话框不但可以接收消息,而且可以被移动和关闭.,13,创建对话框资源,并添加各种所需控件; 创建对话框类(CDialog)的派生类,并将其与已创建的对话框资源相连接; 在派生类中添加所需的数据成员变量、数据交换函数(DDX)和数据验证函数(DDV) ; 为对话框各控件添加消息响应函数,编写程序代码; 为对话框的调用者添加对话框的调用。,对话框设计方法,14,对话框的工作原理,休息,对话框设计方法,15,调用模式对话框 CPasswordDialog m_Dlg;/声明对话框对象 m_Dlg.DoModal();/显示模态对话框 用户必须单击”确定(OK)“或”取消(Cancel)”

8、才能切换到其它窗口或对话框。,对话框的调用,16,调用非模式对话框 在视图类的头文件中添加CPasswordDialog的指针变量:CPasswordDialog *m_Dlg; /指针 在视图类的构造函数中将其初始化m_Dlg=NULL; 在调用函数中添加如下代码if(m_Dlg=NULL)m_Dlg=new CPasswordDialog;/ 动态创建 m_Dlg-Create(IDD_PASSWORD_DIALOG,this);m_Dlg-ShowWindow(SW_SHOW);/显示非模态对话框,对话框的调用,17,编辑对话框资源 Button ID: IDOK ; Caption:

9、确认 Button ID: IDCANCEL ; Caption: 取消 Static Text: ID : IDC_STATIC Caption: 请输入口令:,18,创建对话框类 右键单击对话框Class Wizard Adding Class对话框 Create a new className:CPasswordDialogBase class:CDialogDialogID: IDD_PASSWORD_DIALOG,创建“口令”对话框类-类向导,创建了一个类(CPasswordDialog),两个文件(PasswordDialog.h和PasswordDialog.cpp),19,“M

10、ember Variable”标签页Class name:CPasswordDialogControl IDs:IDC_PASSWORD_EDIT 单击”Add Variable”,显示Add Member Variable对话框 Variable name:m_Password Category: Value Variable type:CString,为编辑框引入变量,创建:DDX_Text(pDX, IDC_PASSWORD_EDIT, m_password),20,修改应用程序类的InitInstance()函数 BOOL CMyHelloApp:InitInstance() CPas

11、swordDialog Dlg; /声明CPasswordDialog类的对象 if(Dlg.DoModal() != IDOK) return false;/用户按下的不是确认按钮 if(Dlg.m_Password != 123456) /口令设为字符串123456 AfxMessageBox(口令错误,确认后将退出程序); return false; return TRUE; ,调用“口令”对话框,在MyHello.cpp头部加入包含语句#include”PasswordDialog.h”,模式对话框的调用,21,例如,在MyHello程序中,添加一菜单项,当点击该菜单项时,将口令对话框

12、以非模式显示:,显示非模式对话框,编辑菜单ID:ID_MODALLESSCaption:非模式对话框,22,在视图类的头文件中添加CPasswordDialog的指针变量,CPasswordDialog *m_pModallessDlg; 需要在MyHelloView.h中加入: #include PasswordDialog.h,构造函数:m_pModallessDlg=NULL; /初始化指针 析构函数:if(m_pModallessDlg!=NULL) delete m_pModallessDlg;/释放空间,修改视图类的构造函数和析构函数,if(m_pModallessDlg!=NUL

13、L) m_pModallessDlgDestroyWindow(); m_pModallessDlg=NULL; ,或者:,23,编写调用非模式对话框代码,“View/ClassWizard/MFC ClassWizard” Object IDS:ID_NOMODALLESS Class name:CMyHelloView Messages:COMMAND 添加了消息响应函数”OnModalless()”,单击”Edit Code” 编写代码如下: if(m_pModallessDlg=NULL) m_pModallessDlg=new CPasswordDialog;/ 动态创建 m_pMo

14、dallessDlg-Create(IDD_DIALOG1,this); m_pModallessDlg-ShowWindow(SW_SHOW);/显示非模态对话框,24,对话框控件和相关MFC类(P155,表6-2) 用于对话框控件的CWnd成员函数(P155,表6-3) 对话框编辑器,控件工具箱:”右击工具栏/control” “Tools/Customize/ToolsBars/Control” 修改控件的Tab键次序:”编排(Layout)/Tab Order”;或Ctrl+D按新的次序依此用鼠标单击各个控件,新的Tab键次序即可生成. 控件布局工具栏:P159,图6-5,设置Layo

15、ut/Guide Setings 测试对话框:Ctrl+T,技术要点总结:,25,改变对话框属性(P161),为控件设置初始条件(P165(4)在对话框的OnInitDialog函数体中,为控件设置初始条件,按钮控件的属性说明(P167),技术要点,消息对话框(P204),对话框左上角在父窗口中的坐标(居中),26,6.2 windows 标准控件,CStatic类控件的使用 CEdit类控件的使用 CButton类控件的使用 CListBox类控件的使用 CComBox类控件的使用,27,windows 标准控件,属性 方法 事件 对话框类的成员变量控件关联变量 value Control,

16、28,访问控件的两种方法,采用控件关联变量 值变量 m_iA=10; UpdateData(false); 控件变量 m_EditA.SetWindowText(“10”); 获取控件窗口指针 CEdit* pEditName=GetDlgItem(IDC_NAME); pEditName-SetWindowText(“ZHANG”); SetDlgItemText(IDC_NAME, m_Name); GetDlgItemText(IDC_NAME, m_Name);,29,1. CStatic类控件的使用,Static Text:静态文本作为标签 Group Box:分组框框架 Pictr

17、ue:静态图片显示位图或分割其他控件 默认ID为IDC_STATIC 只有CStatic类控件的ID号可以重复 详见P169,30,为对话框添加背景图片,使用Picture控件:方法简单,一定保证TabOrder为1 映射WM_CTLCOLOR消息,在OnCtlColor函数中返回一个图形刷子: 映射WM_PAINT消息,在OnPaint函数中选入位图,为对话框设置一幅背景图(Bitmap)有几种最常用的方法:,31,Picture控件,WM_CTLCOLOR,WM_PAINT,32,HBRUSH CBitmapBKDlg:OnCtlColor(CDC* pDC, CWnd* pWnd, UI

18、NT nCtlColor) if (nCtlColor = CTLCOLOR_DLG ) return (HBRUSH)m_BKBrush.GetSafeHandle(); return CDialog:OnCtlColor(pDC,pWnd,nCtlColor); ,CBitmapBKDlg:CBitmapBKDlg(CWnd* pParent /*=NULL*/): CDialog(CBitmapBKDlg:IDD, pParent) . CBitmap* pBitmap = new CBitmap; / ASSERT(pBitmap); pBitmap-LoadBitmap(IDB_BA

19、CKGROUD); m_BKBrush.CreatePatternBrush(pBitmap); delete pBitmap; ,利用对话框的OnCtlColor(),CTLCOLOR_BTN CTLCOLOR_DLG CTLCOLOR_EDIT CTLCOLOR_LISTBOX CTLCOLOR_MSGBOX CTLCOLOR_SCRLLBAR CTLCOLOR_STATIC,Private: CBrush m_BKBrush,33,void CxxxDlg:OnPaint() CPaintDC dc(this); / device context for painting CRect r

20、c; GetClientRect( /释放 ,利用对话框的OnPaint(),34,CDC绘图操作,CDC:BitBlt 从源设备环境拷贝一幅位图到当前设备环境 BOOL BitBlt ( int x, int y, int nWidth, int nHeight, CDC* pSrcDC, int xSrc, int ySrc, DWORD dwRop ); CDC:StretchBlt 从源设备环境(矩形)拷贝一幅位图到当前设备环境(矩形),如果必要,延伸或压缩 BOOL StretchBlt( int x, int y, int nWidth, int nHeight, CDC* pSr

21、cDC, int xSrc, int ySrc, int nSrcWidth, int nSrcHeight, DWORD dwRop );,35,2. CEdit类控件的使用,用来输入和编辑文本 单行文本 多行文本Multiline 口令 详见P170,36,CEdit类控件的属性,Multiline Number Want return Password Read-only Uppercase Lowercase,37,CEdit类控件的方法,口令设置: SetPasswordChar(#); 选择文本 输入/输出文本 -DDX技术,为编辑框添加值变量,通过使用UpdateData()完成

22、控件与变量之间的数据传送。 -定义CEdit类的对象或对象指针(P168) CWnd:SetWindowText(); CWnd: GetWindowText();,38,CEdit类控件的方法,CanUndo() Clear() Copy() Cut() EmptyUndoBuffer() GetFirstVisibleLine() GetModify() GetPasswordChar() GetRect() GetSel(),LimitText() LineFromChar() LineLength() LineScroll() Paste() ReplaceSel() SetModif

23、y() SetPasswordChar() SetReadOnly() SetSel() Undo(),39,CEdit类控件的事件 (P171表6-11),EN_CHANGE EN_ERRSPACE EN_HSCROLL EN_KILLFOCUS EN_MAXTEXT EN_SETFOCUS EN_UPDATE EN_VSCROLL,40,3. CButton类控件的使用(P171),命令按钮(Pushbuttons) 单选按钮(Radiobuttons) 复选按钮(Checkboxes),41,命令按钮,事件: BN_CLICKED 方法: SetWindowText(字符串) ShowW

24、indow(SW_SHOW/ SW_HIDE); EnableWindow(false/true); 例6-1 p172,42,一元二次方程求解,void CEx6_2Dlg:OnButton1() / TODO: Add your control notification handler code here UpdateData(); int disc; double re,im; disc=m_B*m_B-4*m_A*m_C; re=(double)-m_B/(2*m_A); im=(double)sqrt(abs(disc)/(2*m_A); if(disc=0) m_X1.Format

25、(X1=%6.2f,re+im); m_X2.Format(X2=%6.2f,re-im); ,else m_X1.Format(X1=%6.2f+%6.2f i, re,im); m_X2.Format(X2=%6.2f-%6.2f i, re,im); UpdateData(FALSE); ,43,单选按钮,属性: Group:与Tab order 管理一组控件 事件 BN_CLICKED 检查是否选中的方法 (1)IsDlgButtonChecked(ID) (2)连接变量的值:0,1,2,3. . 注意事项:P172(1)(2)(3),44,复选框,属性 事件 检查是否选中的方法 (1

26、)IsDlgButtonChecked(ID) (2)连接变量的值:true/false 例6-2(P174),45,一个简单的整数运算计算器(演示),综合示例二-一个简单的整数计算器,46,编辑框与按钮类控件作业 一个功能较丰富的计算器程序设计,休息,演示,47,开发MyCalculator程序,创建工程:使用MFC AppWizard创建应用程序的基本框架; 可视化设计:制做Windows风格的图形用户界面和各种控件; 编写程序代码。,用VC+6.0编写MFC应用程序,一般有三个步骤:,48,“File/New/Projects/MFC AppWizardexe/工程名:MyCalcula

27、tor,位置:E:MyVCch6” “选择Dialog based/Next,标题:计算器“,其它接受默认设置; ”Finish”完成,一、创建工程,49,“Project Workspace”窗口,选择“Resource View”标签,双击Dialog下的“IDD_MYCALCULATOR_DIALOG” 从“IDD_MYCALCULATOR_DIALOG”对话框删除“OK” 和“ Cancel”及“TODO文本” 。 弹出控件工具箱(右击工具栏,选择Controls); 向对话框添加按钮(Button)控件; 右击Button1,选择属性,二、可视化设计,50,类似方法按右表定义,编辑对

28、话框资源。设计结果如下图:,1.可视化设计,51,“View/ClassWizard/Member Variable” Class name:CMyCalculatorDlg Ctrol IDS:IDC_DISPLAY Category:Value 单击Add variable进行 如下设置,2.为编辑框“IDC_DISPLAY”引入变量,52,添加变量 在“CMyCalculatorDlg.h”中,为CMyCalculatorDlg类加入四个变量(protected):,3.为CMyCalculatorDlg类添加数据成员,double m_first;/存储一次运算的第一个操作数及一次运算

29、的结果 double m_second;/存储一次运算的第二个操作数 CString m_operator;/存储运算符 double m_coff;/存储小数点的系数权值,53,在构造函数中初始化成员变量,CMyCalculatorDlg:CMyCalculatorDlg(CWnd* pParent /*=NULL*/): CDialog(CMyCalculatorDlg:IDD, pParent) /AFX_DATA_INIT(CMyCalculatorDlg) m_display = _T(0.0); m_first = 0.0; m_second= 0.0; m_operator=_T

30、(+); m_coff = 1.0; /AFX_DATA_INIT / Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()-LoadIcon(IDR_MAINFRAME); ,注此函数在“CMyCalculatorDlg.cpp”中,54,用向导添加 “View/ClassWizard/Message Maps” Class name:CMyCaculatorDlg Object IDS:IDC_BUTTON0 Message:BN_CLICKED 单击”Add

31、Function”,4.为Button按钮的BN_CLICKED事件添加响应函数,BEGIN_MESSAGE_MAP(CMyCalculatorDlg, CDialog) /AFX_MSG_MAP(CMyCalculatorDlg) ON_BN_CLICKED(IDC_BUTTON0, OnButton0) /AFX_MSG_MAP END_MESSAGE_MAP(),直接在MyCalculatorDlg.cpp中添加,如下,55,在”MFC ClassWizard”对话框的”Message Maps”标签页,选中消息响应函数,单击“Edit Code”,三、编写程序代码,在工作区的”Clas

32、sView”下,CMyCalculatorDlg类中双击相应的响应函数。,直接在MyCalculatorDlg.cpp文件中填写对应函数的函数体。 程序代码见演示,添加响应函数后,在 MyCalculatorDlg.cpp文件中进行了函数的定义,函数体为空,可用以下几种方法填写代码。,56,数字”N”的消息响应函数(N=0,1,9) void CMyCalculatorDlg:OnButtonN() if( m_coff = 1.0) m_second = m_second*10 + N;/作为整数输入数字时 else m_second = m_second + N*m_coff; /作为小数

33、输入数字 m_coff *= 0.1; UpdateDisplay(m_second);/更新编辑框的数字显示 ,编写程序代码,57,如数字”8”的消息响应函数 void CMyCalculatorDlg:OnButton8() if(m_coff=1.0) m_second=m_second*10+8;else m_second=m_second+m_coff*8; m_coff*=0.1;UpdateDisplay(m_second);,编写程序代码,输入123.123 1*10+2=12 12*10+3=123 . 0.1 1 123+0.1*1=123.1 123.1+0.01*2=1

34、23.12 123.12*0.001*3=123.123,58,运算符按钮的消息响应函数:将前一次数据与当前数据进行运算,作为下次的第一操作数,并在编辑框显示。,算法如下: m_first与m_second 作m_operator运算后 m_first; 0 m_second; m_firstm_display 当前点击的运算符 m_operator; 将小数的权值变量m_coff置1.0. 详见演示,59,如”+”运算符,void CMyCalculatorDlg:OnButtonAdd() Calculate(); m_operator=+; ,void CMyCalculator:Cal

35、culate() switch(m_operator.GetAt(0) case +:m_first+=m_second;break; case -:m_first-=m_second;break; case *:m_first*=m_second;break;,右击”CMyCalculatorDlg”类,选择”Add Member Function”,注:Calculate(); 类的成员函数,60,如”+”运算符,case /: if(fabs(m_second)=0.000001) m_display=除数不能为0; UpdateData(false); return; m_first/

36、=m_second;break; m_second=0.0; m_coff=1.0; UpdateDisplay(m_first);/更新编辑框显示内容 ,需要在MyCalculatorDlg.cpp中添加math.h文件,61,UpdateDisplay()添加方法同上,void CMyCalculatorDlg:UpdateDisplay(double lVal) m_display.Format(_T(%f),lVal); int i=m_display.GetLength(); /格式化输出,将输出结果后的零截去 while(m_display.GetAt(i-1)=0) m_disp

37、lay.Delete(i-1,1);i-; UpdateData(false);/更新编辑框变量m_display ,62,为”=“按钮的消息响应函数添加代码:,算法如下: m_first与m_second 作m_operator运算后 m_first; m_firstm_display (显示) 0 m_second; 0 m_second; 0 m_first; 将小数的权值变量m_coff置1.0. 输入的运算符 m_operator 详见演示,为其它按钮的消息响应函数添加代码:见演示,63,为“。”按钮添加消息处理函数,void CMyCalculatorDlg:OnButtonRec

38、iprocal() /1/x按钮的消息处理函数 if(fabs(m_second)0.000001) m_display = 除数不能为零; UpdateData(false); return; m_second= 1.0/m_second; UpdateDisplay(m_second); ,void CMyCalculatorDlg:OnButtonPoint() m_coff= 0.1 ; ,64,关于UpdateData函数: CDialog的基类CWnd的成员函数,函数原型 BOOL UpdateData(BOOL bSaveAndValidate=TRUE); 一般在对话框的派生类

39、中,利用UpdateData()进行控件和相应变量之间的数据传递 UpdateData(TRUE);/ 将控件中的数据传递给相应的变量 UpdateData(FALSE);/ 将变量中的数据传递给相应的控件,技术要点,65,关于消息响应函数: 用MFC ClassWizard为对话框中某按钮的BN_CLICKED事件添加消息处理函数时, MFC ClassWizard作了三件事: (1)在类的定义MyCalculatorDlg.h中添加了消息响应函数的函数原型; (2)在类的实现文件MyCalculatorDlg.cpp中,添加了函数体; (3)在类的实现文件MyCalculatorDlg.c

40、pp中,添加了消息映射。,技术要点,66,数据交换和校验: 对话框数据交换(DDX)可以实现对话框中控件数值的初始化和获取用户的数据输入。 对话框数据校验(DDV)可以实现对对话框中数值进行校验 。如为IDC_DISPLAY的Edit Box控件创建了m_display变量,数据类型为CString,则ClassWizard自动在文件MyCalculatorDlg.cpp中创建了相应的对话框数据交换代码:,技术要点,67,数据交换和校验:,void CMyCalculatorDlg:DoDataExchange(CDataExchange* pDX) CDialog:DoDataExchang

41、e(pDX); /AFX_DATA_MAP(CMyCalculatorDlg) DDX_Text(pDX, IDC_DISPLAY, m_display); /AFX_DATA_MAP ,技术要点,在代码中,利用CWnd:UpdateData()进行控件和相应变量之间的数据传递 UpdateData(TRUE);/ 将控件中的数据传递给相应的变量 UpdateData(FALSE);/ 将变量中的数据传递给相应的控件,68,字符串CString类: CString类中的字符是TCHAR类型的。,构造函数: CString();/产生一个空的CString对象 CString(const CSt

42、ring /ANSI字符串,技术要点,69,常用成员函数: int GetLength() const;/测试长度 BOOL IsEmpty() const; /测试为空 void Empty(); /置空 TCHAR GetAt(int nIndex) const; 获取指定位置处字符 void SetAt(int nIndex,TCHAR ch); 设定字符 MakeUpper(); 变为大写 MakeLower(); 变为小写 int Compare(LPCTSTR lpsz) const;字符串比较 int CompareNoCase(LPCTSTR lpsz) const;字符串比较

43、,忽略大小写,技术要点,70,例1 CString m_str1=“下午”,m_str2=“好!”; CString m_str3=m_str1+m_str2; 例2 CString m_str1=“a”,m_str2=“b!”; int result=m_str1.Compare(m_str2);字符串比较 if(result=0) AfxMessageBox(“两者相同”); else if (result0) AfxMessageBox(“m_str1m_str2”); else AfxMessageBox(“m_str1m_str2”);,技术要点,71,利用ON_COMMAND_RA

44、NGE宏,可以处理一系列控件对同一消息处理函数的响应,用以下方法修改程序:,优化MyCalculator程序,(1) 在MyCalculatorDlg.h中“AFX_MSG(C MyCalculatorDlg)”与”AFX_MSG”之间添加下面语句: afx_msg void OnOperandInput(UINT nID); (2)在MyCalculatorDlg.cpp中 “AFX_MSG_MAP(C MyCalculatorDlg)”与”AFX_MSG_MAP” 间添加下面语句 ON_COMMAND_RANGE(IDC_BUTTON0,IDCBUTTON9,OnOperandInput)

45、; (3)在Resource.h文件中定义 #define IDC_BUTTON0 1000 #define IDC_BUTTON9 1009,起始值,结束值,消息响应函数,72,优化MyCalculator程序,void CCalculatorDlg:OnOperandInput(UINT nID) int n=nID%10; if(m_coff=1.0) m_second=m_second*10+n; else m_second=m_second+m_coff*n; m_coff*=0.1; UpdateDisplay(m_second); ,73,完成计算器的设计 优化MyCalcula

46、tor程序,操作练习,74,4. 列表类控件CListBox /CListCtrl,CListBox控件 单选/多选列表框P177-180 只能显示一个字段 CListCtrl控件: 类似于资源管理器的显示 可以显示一条记录,75,CListBox 类控件属性,Sort:列表框项目排序 multi-column:有水平滚动条的多列列表框 Horizontal scroll:创建水平滚动条 vertical scroll want key input:向父窗口发送消息 disable no scroll,列表框控件提供一个项目列表,用户可以从中选择一个或多个项目。见P178表6-18,76,CL

47、istBox控件的常用操作,AddString() InsertString() DeleteString() ResetContent() FindString() FindStringExact() SelectString(),添加列表项,删除列表项,查找列表项,77,列表框的单项选择函数(P179),GetCurSel()返回列表框中当前选择字符串的基于0的索引 SetCurSel()设定选中列表项字符串,78,列表框多项选择函数,GetSelCount()返回多选列表框中当前选择的字符串的数目 GetSetItems() : SetSel(),79,CListBox 类控件事件 P1

48、80表6-19,LBN_DBLCLK LBN_ERRSPACE LBN_KILLFOCUS LBN_SELCANCEL LBN_SELCHANGE LBN_SETFOCUS,80,单选列表框获取数据,int nSelection=m_ListBox.GetCurSel() m_ListBox.GetText(nSelection,m_Text); 其中: int 型获得选择项序号 CString型 获得选择项文本项,例6-3(P180)单选列表框的使用,81,多选列表框获取数据,int nSelection=m_ListBox.GetSelCount(); int items20; /索引号数

49、组 String str20; /字符串数组 m_ListBox.GetSelItems(items); for(int i=0;inSelection;i+) m_ListBox.GetText(itemsi,stri);,82,CListCtrl控件的用法,Windows资源管理器中的“查看”标签下的“大图标、小图标、列表、详细资源”就是一个列表控件的典型应用。显示记录 列表控件的风格 列表控件的2个数据结构 列表控件的常用操作 列表控件的消息 列表控件的具体编程,83,CListCtrl示例,CListCtrl详解,84,5. CComBox 控件 P183-185,编辑框列表框用户可以

50、通过在组合框中输入文本来选定项目,也可以直接从列表框中选定项目。如果项目数超过了组合框中可显示的数目控件上自动添加滚动条。见P183 类型: Simple:简单组合框,列表框直接显示出来 Dropdown:下拉式组合框,点击下拉按钮 Drop List:下拉式列表框,无文字编辑功能,85,CComBox 类控件事件,CBN_DBLCLK CBN_ERRSPACE CBN_KILLFOCUS CBN_SELECTCANCEL CBN_SELECTCHANGE CBN_SETFOCUS CBN_CLOSEUP CBN_DROPDOWN CBN_EDITCHANGE CBN_EDITUPDATE 例6-4(P185),86,6. 滚动类控件CScrollBar/CSlider/CSpin,SB_BOTTOM / SB_RIGHT SB_TOP / SB_LEFT SB_LINEDOWN/ SB_LINERIGHT 单击滚动条向下箭头时 SB_LINEUP / SB_LINELEFT SB_PAGEDOWN/SB_PAGER

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论