计算机软件及应用mfccontrol

上传人:可**** 文档编号:110720879 上传时间:2022-06-19 格式:PPTX 页数:138 大小:809.73KB
返回 下载 相关 举报
计算机软件及应用mfccontrol_第1页
第1页 / 共138页
计算机软件及应用mfccontrol_第2页
第2页 / 共138页
计算机软件及应用mfccontrol_第3页
第3页 / 共138页
点击查看更多>>
资源描述
会计学1计算机软件及应用计算机软件及应用mfccontrol2控件以独立的子窗口或对话框两种形式存在。必须指定控件的窗口类,这种窗口类必须在应用程序中定义并注册,但更多的是使用系统的预定义窗口类。第1页/共138页3第2页/共138页4第3页/共138页5静态控件和滚动条控件没有通知代码第4页/共138页6控件工具栏控件接受的消息主要有单击、双击和字符输入等第5页/共138页7按钮按钮控件控件 普通按钮普通按钮圆按钮圆按钮复选框按钮复选框按钮组框按钮组框按钮自绘按钮自绘按钮 第6页/共138页8 CButton类的成员函数类的成员函数Create负责创建按负责创建按钮控件,该函数的声明为:钮控件,该函数的声明为:BOOL Create ( LPCTSTR lpszCaption, /指定了按钮显示的正指定了按钮显示的正文文 DWORD dwStyle, /按钮的风格按钮的风格 const RECT& rect, /按钮的位置和大按钮的位置和大小小 CWnd* pParentWnd, /指向父窗口,指向父窗口, UINT nID/按钮的按钮的ID )第7页/共138页9两个类似按钮按钮是最是最常见常见的控的控件之件之一一复选框复选框单选按钮单选按钮下压式按钮下压式按钮分组框分组框常用于只有两种完全相反状态的情况下适用于同一组属性相同的数据中选一个数据适用于消息的发送没有太多的操作只是在窗口中划分区域范围第8页/共138页10GetState()SetState()CButton类的类的成员函成员函数数在知道按钮在知道按钮ID的前的前提下,还可使用提下,还可使用与按钮有关的与按钮有关的CWnd成员函数来成员函数来设置或查询按钮设置或查询按钮状态状态 CheckDlgButtonCheckRadioButtonGetCheckedRadioButtonIs DlgButtonCheckedGetWindowTexGetWindowTextLengthSetWindowText第9页/共138页11MFC调用方法调用方法DrawItem()在按钮上在按钮上绘制位图绘制位图,LoadBitmaps()方法为一个方法为一个CBitmapButton对象对象附上位图,最多可以有附上位图,最多可以有4个位图个位图自定义按钮第10页/共138页12第11页/共138页13IDC_BUTTON1IDC_BUTTON2IDC_RADIO1IDC_RADIO2IDC_CHECK1IDC_CHECK2Group属性Auto属性主要步骤:主要步骤:1.创建基于对话框项创建基于对话框项目目2.设置按钮的属性设置按钮的属性 第12页/共138页143. 添加成员变量并添加消息响应函数添加成员变量并添加消息响应函数auto风格控件不必添加成员变量第13页/共138页15void CMy9_1Dlg:OnRadio1() m_rad1.SetCheck(1); 第14页/共138页16滚动条是一个交互式的、高度可视化的控件滚动条是一个交互式的、高度可视化的控件它包括一个滑块、滚动条的两端的按钮等。它包括一个滑块、滚动条的两端的按钮等。滚动条控件滚动条控件与与属于窗口的滚动条属于窗口的滚动条是不一样的是不一样的处于窗口的滚处于窗口的滚动条是由该窗动条是由该窗口创建、管理口创建、管理和释放的和释放的滚动条控件是由滚动条控件是由用户创建、管理用户创建、管理和释放的和释放的第15页/共138页17滚动条控件还可以作为调节音量、颜色的工具第16页/共138页18滚动条是主窗口中的一个样式第17页/共138页19子窗口滚动条控件是独立的一个子窗口,并不是主窗口的组成部分,其中以WS_CHILD为标识第18页/共138页20滚动条可以通过通知代滚动条可以通过通知代码来创建,也可以用对码来创建,也可以用对话框资源模板来创建话框资源模板来创建CScrollBar 类的方法 方方法法 说说明明 EnableScrollBar() 使使滚滚动动条条的的一一个个或或两两个个箭箭头头有有效效或或无无效效 GetScrollInfo() 获获得得滚滚动动条条的的消消息息 GetScrollLimit() 获获得得滚滚动动条条的的范范围围 GetScrollPos() 获获得得滚滚动动条条当当前前的的位位置置 GetScrollRange() 获获得得制制定定滚滚动动条条的的当当前前最最大大和和最最小小滚滚动动位位置置 SetScrollInfo() 设设置置滚滚动动条条的的消消息息 SetScrollPos() 设设置置滚滚动动块块当当前前的的位位置置 SetScrollRange() 设设置置制制定定滚滚动动条条的的最最大大和和最最小小滚滚动动位位置置 ShowScrollBar() 显显示示或或隐隐藏藏滚滚动动条条 第19页/共138页21第20页/共138页22创建创建CScrollBar对象的一般步对象的一般步骤骤(1) 用用C+关键字关键字new和构造函数和构造函数CScrollBar:CScrollBar()为一个为一个ScrollBar对象分配一个实例对象分配一个实例(2) 初始化初始化CScrollBar对象,将对象,将一个一个Windows滚动条赋予它,并滚动条赋予它,并用用CScroll:Create()方法设置参方法设置参数和样式数和样式分配一个滚动条控件对象并返回指向该对象的指针分配一个滚动条控件对象并返回指向该对象的指针CScrollBar:pMyScroll=new CScrollBarCScrollBar:pMyScroll=new CScrollBar调用调用CScrollBar:Create()方法初始化指针方法初始化指针BOOL Create(BOOL Create(DWORD dwStyleDWORD dwStyle, ,const RECT& rectconst RECT& rect, ,CWnd CWnd * *pParentWndpParentWnd, ,UINT nIDUINT nID););滚动条窗滚动条窗口的样式口的样式表示控件的表示控件的大小和位置大小和位置指向控件所属指向控件所属窗口的指针窗口的指针父窗口与滚动父窗口与滚动条通信的标识条通信的标识第21页/共138页23在设置滚动条控件时,要通过如下方法设置其范围在设置滚动条控件时,要通过如下方法设置其范围CScrollBar:SetScrollRange()例如,设置滚动范围为例如,设置滚动范围为-100到到100的垂直滚动条的垂直滚动条pMyScroll-SetScrollRange(SB_VERT,-100,100);pMyScroll-SetScrollRange(SB_VERT,-100,100);通过通过SetScrollPos()设置滚动块当前位置设置滚动块当前位置例如,滚动快的位置在例如,滚动快的位置在-100到到100的中间,即为的中间,即为0的位置的位置pMyScroller-SetScrollPos(0);pMyScroller-SetScrollPos(0);第22页/共138页24标题为标题为Application of ScrollBar滚动条的滚动条的滚动范围滚动范围设为设为0到到20单击滚动块与单击滚动块与箭头之间的区箭头之间的区域。滚动块上域。滚动块上移或下移三格,移或下移三格,编辑框中的数编辑框中的数字加字加3或减或减3单击向上或向下的单击向上或向下的箭头,滚动块向上箭头,滚动块向上或向下移动一格,或向下移动一格,编辑框中的数字加编辑框中的数字加1或减或减1按住滚动块上按住滚动块上下拖动。编辑下拖动。编辑框中的数字随框中的数字随着随之变化着随之变化当前值为当前值为10单击单击Up按钮按钮,滚动块移到,滚动块移到最上边,编辑最上边,编辑框的数字变为框的数字变为0单击单击Down按钮按钮,滚动块移到滚动块移到最下边,编辑最下边,编辑框的数字变为框的数字变为20单击单击Reset按按钮,滑块移到钮,滑块移到中间,编辑框中间,编辑框的数字变为的数字变为10单击单击Exit按按钮,退出应钮,退出应用程序用程序第23页/共138页25 对对话话框框中中各各个个对对象象的的属属性性 对对象象 ID 滚滚动动条条 IDC_SCROLLBAR 编编辑辑框框 IDC_EDIT1 Up 按按钮钮 IDC_UP_BUTTON Down 按按钮钮 IDC_DOWN_BUTTON Reset 按按钮钮 IDC_RESET_BUTTON Exit 按按钮钮 IDC_EXIT_BUTTON (1) 应用程序的可视化编程部应用程序的可视化编程部分分第24页/共138页26(2) 应用程序的代码编程部分应用程序的代码编程部分(a) (a) 给滚动条连接变量给滚动条连接变量ID变量名变量名 类别类别 类型类型IDC_SCROLLBARm_ScrollbarControlCScrollbarIDC_EDITlm_Edit Control CEdit第25页/共138页2710进制数(b) (b) 初始化滚动条初始化滚动条第26页/共138页28itoa(nPos,sPos,10);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(sPos);第27页/共138页29m_Edit.ReplaceSel(sPos);break;第28页/共138页30第29页/共138页31m_Edit.ReplaceSel(sPos);break;第30页/共138页32CDialog:OnVScroll(nSBCode, nPos, pScrollBar); 第31页/共138页33m_Edit.SetSel(0,-1);m_Edit.SetSel(0,-1);m_Edit.ReplaceSel(0);m_Edit.ReplaceSel(0); 第32页/共138页34第33页/共138页35在应用程序中,编辑框只是有于显示滚动块的位置,不需要进行编辑,因此必须将其属性改为只读 第34页/共138页36第35页/共138页37要在创建静态控件时加入SS_NOTIFY样式该样式允许静态控件向其父窗口发送WM_COMMAND消息,该消息的字参数的低字节中包含静态控件的ID,高字节中包含通知码 第36页/共138页38【例例9-3】本例通过演示位图静态控件的使用方本例通过演示位图静态控件的使用方法,说明静态控件消息的强制生成与处理过程,法,说明静态控件消息的强制生成与处理过程,当单击位图时,就报告该位图的尺寸。当单击位图时,就报告该位图的尺寸。 第37页/共138页39 无此风格,静态控件无法响应鼠标消息第38页/共138页40第39页/共138页41第40页/共138页42 列表框经常用在对话框里,如用列表列表框经常用在对话框里,如用列表框选择文件名、目录等。列表框有一个框选择文件名、目录等。列表框有一个预定义的键盘接口,用户可以用键盘上预定义的键盘接口,用户可以用键盘上的箭头和的箭头和PageUp或或PageDown键在列表键在列表框中进行数据的选择,或通过适当的样框中进行数据的选择,或通过适当的样式设置,允许与式设置,允许与Shift或或Ctrl键组合使用。键组合使用。列表框常应用于从众多数据中选某一项列表框常应用于从众多数据中选某一项第41页/共138页43MFC中中CListBox类的层次结构类的层次结构第42页/共138页44 CListBox 消息的消息映像项消息的消息映像项 消息映像项消息映像项 说明说明 ON_LBN_DBLCLK 双击,具有双击,具有LBS_NOTIFY样式的列表框样式的列表框向所有者发送此消息向所有者发送此消息 ON_LBN_ERRSPACE 列表框不能分配足够内存以满足要求列表框不能分配足够内存以满足要求 ON_LBN_KILLFOCUS 当列表框失去输入焦点时出现此消息当列表框失去输入焦点时出现此消息 ON_LBN_SELCANCEL 取消当前选择时,具有取消当前选择时,具有LBS_NOTIFY样样式的列表框向所有者发送此消息式的列表框向所有者发送此消息 ON_LBN_SELCHANGE 当列表框中的选择改变时,具有当列表框中的选择改变时,具有LBS_NOTIFY 样式的样式的列表框向它的父窗列表框向它的父窗口口 发送此通知发送此通知 第43页/共138页45消息映像项使用下面的基本格式:ON_Message(Control ID,ClassMethod)所有者类声明中的方法原型所有者类声明中的方法原型afx_msg void ClassMethod()();发送消息的列表框控件的子窗口标识处理消息的父类方法的名字第44页/共138页46第45页/共138页47 通通用用 CListBox 类类方方法法 方方法法 描描述述 GetCount() 获获得得列列表表框框中中列列表表项项数数目目 GetHorizontalExtent() 获获得得列列表表框框的的水水平平滚滚动动宽宽度度(按按像像素素) GetItemData() 获获得得列列表表框框项项有有关关的的 32 位位值值 GetItemDataPtr() 获获得得指指向向列列表表框框项项的的指指针针 GetItemHeight() 获获得得列列表表框框中中项项的的高高度度 (1) 通用方法通用方法 通用方法用来获得和设置列表框数据的通用方法用来获得和设置列表框数据的值和属性,所有的值和属性,所有的CListBox列表框都有这些列表框都有这些方法,包括单选列表框、多选列表框和自绘方法,包括单选列表框、多选列表框和自绘列表框等列表框等第46页/共138页48(2) 单项选择特定方法单项选择特定方法 列表框的默认模式是单选项模式;列表框的默认模式是单选项模式;所有的通用方法均适用于单选项列表框所有的通用方法均适用于单选项列表框只有只有两个类方两个类方法专门处理单法专门处理单选项列表框选项列表框GetCurSel()GetCurSel()SetCurSel()SetCurSel()获得当前选择列表获得当前选择列表框项的下标框项的下标(基于基于0)选择列表框字符串选择列表框字符串第47页/共138页49 方法方法 说明说明 GetAnchorIndex()获得多项选择列表框中当前定位项的下标获得多项选择列表框中当前定位项的下标GetCaretIndex() 获得多项选择列表框中具有光标矩形的项的下获得多项选择列表框中具有光标矩形的项的下标标GetSelCount()获得多项选择列表框中当前所选的项的数目获得多项选择列表框中当前所选的项的数目GetSelItems()将所有当前被选列表框项下标放入一整型数将所有当前被选列表框项下标放入一整型数组缓冲区组缓冲区SelItemRange() 切换多选择列表框项范围的选择状态切换多选择列表框项范围的选择状态SetAnchorIndex()在多项选择列表框中扩充选择设置开始在多项选择列表框中扩充选择设置开始(定位定位)项项SetCaretIndex() 在多项选择列表框中指定下标项设置光标矩形在多项选择列表框中指定下标项设置光标矩形SetSel() 在多项选择列表框中切换项目的选择状态在多项选择列表框中切换项目的选择状态(3) 多项选择特定方法多项选择特定方法多选项列表框扩展了标准单项选择列表框的能力,可以解决在一个列表框中选择多项带来的复杂性特定多项选择列表框的CListBox类方法第48页/共138页50(4) 字符串指定的方法字符串指定的方法 方法方法 说明说明 AddString() 在列表框中加入一个字符串在列表框中加入一个字符串DeleteString() 从列表框中删除一个字符串从列表框中删除一个字符串Dir() 从当前目录加文件名放入列表框从当前目录加文件名放入列表框FindString() 在列表框中搜索一字符串在列表框中搜索一字符串FindStringExact() 在列表框中搜索第一个与指定搜索字符串匹配的字符串在列表框中搜索第一个与指定搜索字符串匹配的字符串InsertString() 在列表框指定下标处插入一字符串在列表框指定下标处插入一字符串ResetContent() 清除列表框中的所有项清除列表框中的所有项SelectString() 在单选列表框中搜索并选择一字符串在单选列表框中搜索并选择一字符串CListBox指定列表框中字符串的方法第49页/共138页51(5) 虚拟方法虚拟方法CListBox类还声明了几个虚拟方法,你可以类还声明了几个虚拟方法,你可以从从CListBox类中派生一些类替换到你的类中。类中派生一些类替换到你的类中。 方法方法 说明说明 CharToItem()CharToItem()可以替换此方法来为自绘列表框(没有字符串)处理可以替换此方法来为自绘列表框(没有字符串)处理WM-WM-CHARCHARCompareItem()CompareItem()由由MFCMFC调用以得到排序的自绘列表框中的新项的位置调用以得到排序的自绘列表框中的新项的位置DeleteItem()DeleteItem()当用户从自绘列表框中删除一项时当用户从自绘列表框中删除一项时MFCMFC调用此方法调用此方法DrawItem()DrawItem()当确定自绘列表框项必须重绘时当确定自绘列表框项必须重绘时MFCMFC调用此方法调用此方法MeasureItem()MeasureItem()当一自绘列表框被创建时当一自绘列表框被创建时MFCMFC调用此方法来决定列表框的调用此方法来决定列表框的维数维数VKeyToItem()VKeyToItem()用户可替换此方法,来处理具有用户可替换此方法,来处理具有LBS_WANTKEYBOARDINPUTLBS_WANTKEYBOARDINPUT样式样式 的列表框的的列表框的WM_KEYDOWNWM_KEYDOWN能被替换的CListBox类的虚拟方法第50页/共138页52创建和初始化创建和初始化CListBox对象对象(1) 用用C+关键字关键字new和构造函数为和构造函数为CListBox对对象分配一个实例象分配一个实例: CListBox:CListBox()(2) 初始化初始化CListBox对象并赋于它一个对象并赋于它一个Windows列表框,通过方法列表框,通过方法CListBox:Create()设置列表设置列表框的参数和样式框的参数和样式第51页/共138页53例如,下面代码分配一个例如,下面代码分配一个CListBox对象并返回指向该对象并返回指向该对象的指针:对象的指针: CListBox *pMyListBox=new CListBox; 指针指针pMyListBox用用CListBox:Create()方法进行初始化方法进行初始化该方法声明如下:该方法声明如下: BOOL Create ( DWORD dwStyle, / 列表框控件的窗口样式列表框控件的窗口样式 const Recy& rect, / 指明控件的大小和位置指明控件的大小和位置 CWnd* pParentWnd, / 指向控件所有者的指针指向控件所有者的指针 UINT nID / 控件标识控件标识 )第52页/共138页54第53页/共138页55第54页/共138页56第55页/共138页57第56页/共138页58【例例9-4】创建一个单选列表框,并在该列表创建一个单选列表框,并在该列表框中列出当前目录的文件,双击后删除该项框中列出当前目录的文件,双击后删除该项 第57页/共138页59第58页/共138页60获得当前目录 设置列表框显示条目为当前目录下所有文件名 第59页/共138页61第60页/共138页62 CEdit是CWnd类直接派生来的,这就意味着它具有CWnd的所有功能 编辑编辑框控框控件件单行编辑框控件单行编辑框控件多行编辑框控件多行编辑框控件第61页/共138页63CEdit 类的通用方法类的通用方法 方法方法 说明说明 CanUndo() 决定一个编辑操作是否可以撤销决定一个编辑操作是否可以撤销 Clear() 从编辑控件中删除当前的选择从编辑控件中删除当前的选择(如果有的话如果有的话) Copy() 将编辑控件当前的选择以将编辑控件当前的选择以 CF_TEXT 格式复制到剪贴板中格式复制到剪贴板中 Cut() 剪下编辑控件中的当前选择并以剪下编辑控件中的当前选择并以 CF_TEXT 格式复制到剪贴板中格式复制到剪贴板中 EmptyUndoBuffer() 消除一个编辑控件的“撤销”标志消除一个编辑控件的“撤销”标志 GetFirstVisibleLine() 确定编辑控件中的最上面的可视行确定编辑控件中的最上面的可视行 GetModify() 确定一个编辑控件的内容是否可修改确定一个编辑控件的内容是否可修改 GetPasswordChar() 当用户输入文本时,获得编辑控件中显示的密码字符当用户输入文本时,获得编辑控件中显示的密码字符 GetRect() 获得一个编辑控件的格式化矩形获得一个编辑控件的格式化矩形 GetSel() 获得编辑控件中当前选择的开始和结束字符位置获得编辑控件中当前选择的开始和结束字符位置 LimitText() 限定用户可能输入一编辑控件的文本长度限定用户可能输入一编辑控件的文本长度 LineFromChar() 获得包含指定字符下标的行的行号获得包含指定字符下标的行的行号 LineLength() 获得编辑控件中的一行的长度获得编辑控件中的一行的长度 LineScroll() 滚动多行编辑控件的文本滚动多行编辑控件的文本 Paste() 将剪贴板的数据插入到编辑控件作当前的光标位置, 只有当前剪贴板将剪贴板的数据插入到编辑控件作当前的光标位置, 只有当前剪贴板中数中数据格式为据格式为 CF_TEXT 时方可插入时方可插入 ReplaceSel() 用指定文本替代编辑控件中当前选择的部分用指定文本替代编辑控件中当前选择的部分 SetModify() 设置或清除编辑控件的修改标志设置或清除编辑控件的修改标志 SetPasswordChar() 当用户输入文本时设置或删除一个显示于编辑控件中的密码字符当用户输入文本时设置或删除一个显示于编辑控件中的密码字符 SetReadOnly() 将编辑控件设置为只读状态将编辑控件设置为只读状态 SetSel() 在编辑控件中选择字符的范围在编辑控件中选择字符的范围 Undo() 取消最后一个编辑控件操作取消最后一个编辑控件操作 第62页/共138页64多行编辑所支持的多行编辑所支持的 CEdit 法法 方法方法 说明说明 FmtLines() 设置在多行编辑控件中包含软分行符设置在多行编辑控件中包含软分行符 GetHandle() 获得当前分配给一个多行编辑控件的内存的句柄获得当前分配给一个多行编辑控件的内存的句柄 GetLine() 从一编辑控件中获得一行文本从一编辑控件中获得一行文本 GetLineCount() 获得多行编辑控件的行数获得多行编辑控件的行数 LineIndex() 设置多行编辑控件中一行的字符下标设置多行编辑控件中一行的字符下标 SetHandle() 设置多行编辑控件将要用到的句柄内存句柄设置多行编辑控件将要用到的句柄内存句柄 SetRect() 设置多行编辑控件的格式化矩形并更新控件设置多行编辑控件的格式化矩形并更新控件 SetRectNP() 设置多行编辑控件的格式设置多行编辑控件的格式化矩形并且不重绘控件窗口化矩形并且不重绘控件窗口 SetTabStops() 在多行编辑控件中设置制表在多行编辑控件中设置制表(tab)位位 第63页/共138页65第64页/共138页66单击单击Showl,则在,则在Edit1编辑框中显示编辑框中显示“This is the first EditBox.”单击单击Clear1,则,则Edit1编辑框中的内容被清除;编辑框中的内容被清除;单击单击Show2,则在,则在Edit2编辑框中显示编辑框中显示“This is the second EditBox!”单击单击Clear2,则,则Edit2编辑框中的内容被清除;编辑框中的内容被清除;单击单击Transfer,则把,则把Edit1编辑框的内容复制到编辑框的内容复制到Edit2的编辑框中去的编辑框中去单击单击Undo,则取消上一次操作,则取消上一次操作若单击若单击Exit,则退出程序的运行,则退出程序的运行第65页/共138页67具体的编程过程具体的编程过程生成了工程文件和工程工作区文件后在EditBox的工作区中选择ResourceView因为本应用程序是基于对话框的,由因为本应用程序是基于对话框的,由向导生成对话框窗口作为应用程序的向导生成对话框窗口作为应用程序的主窗口,并且给这个对话框取名为主窗口,并且给这个对话框取名为IDD_EDITBOX_DIALOGIDD_EDITBOX_DIALOG,然后然后在这个对在这个对话框窗口中进行话框窗口中进行界面设计界面设计第66页/共138页68(1)创建资源:)创建资源:在在ResourceView选项卡中打开选项卡中打开Dialog资资源组,然后双击源组,然后双击IDD_EDITBOX_DIALOG。 VC在工作台中在工作台中显示可以进行可视化编辑的显示可以进行可视化编辑的IDD_EDITBOX_DIALOG对话框对话框把鼠标停在编辑框控件上,即可显示该控件的类型控件工具窗提供了VC中所有可建立的控件类型第67页/共138页69(2)(2)设置控件设置控件IDID对对 象象I ID DC Ca ap pt ti io on n编编辑辑框框I ID DC C_ _E ED DI IT T1 1无无编编辑辑框框I ID DC C_ _E ED DI IT T2 2无无命命令令按按钮钮I ID DC C_ _S SH HO OW W1 1_ _B BU UT TT TO ON NS Sh ho ow wl l命命令令按按钮钮I ID DC C_ _C CL LE EA AR R1 1_ _B BU UT TT TO ON NC Cl le ea ar rl l命命令令按按钮钮I ID DC C_ _S SH HO OW W2 2_ _B BU UT TT TO ON NS Sh ho ow w2 2命命令令按按钮钮I ID DC C_ _C CL LE EA AR R2 2_ _B BU UT TT TO ON NC Cl le ea ar r2 2命命令令按按钮钮I ID DC C_ _T Tr ra an ns sf fe er r_ _B BU UT TT TO ON NT Tr ra an ns sf fe er r命命令令按按钮钮I ID DC C_ _E EX XI IT T_ _B BU UT TT TO ON N& &E Ex xi it t命命令令按按钮钮I ID DC C_ _U UN ND DO O_ _B BU UT TT TO ON N& &U Un nd do o将鼠标移到将鼠标移到Edit1控键控键上上- 单击鼠标右键,单击鼠标右键,选择选择Properties命令,命令,在窗口中输入控件的在窗口中输入控件的ID标识值,标识值,IDC_EDIT1,用同样的方法设置其用同样的方法设置其它各个对象的属性它各个对象的属性第68页/共138页70(3) 应用程序的代码编程部分应用程序的代码编程部分(a)(a) 给编辑框连接变量给编辑框连接变量选择Member Variables选项卡在Control IDs列表框中单击IDC_EDIT1项,使之高亮化单击Add Variable按钮,此时显示Add Member Variable窗口第69页/共138页71(b) 设置成员变量名为设置成员变量名为m_Edit1,类别为,类别为Control,变量,变量类型为类型为CEdit注意注意,不要将,不要将m_Edit1设为设为CString类型,因为类型,因为只有设为只有设为CEdit 类型,类型,才能够调用才能够调用CEdit 类中类中的一些成员函数,如的一些成员函数,如Copy , Paste等,这样才等,这样才能完成本应用程序中对能完成本应用程序中对Transfer按钮要求复制按钮要求复制内容的操作的响应内容的操作的响应 第70页/共138页72用同样的方法给编辑框用同样的方法给编辑框EDIT2等其它对象连接各自的变等其它对象连接各自的变量,增加变量之后量,增加变量之后MFC ClassWizard窗口将变为下图所示窗口将变为下图所示第71页/共138页73 若此时运行该程序,在若此时运行该程序,在Edit文本框中文本框中不能进行多行输入,只能单行输入文本,不能进行多行输入,只能单行输入文本,而且按回车键终止应用程序,同时,文本而且按回车键终止应用程序,同时,文本框中也没有水平和垂直滚动条。框中也没有水平和垂直滚动条。 下面,我们来完善应用程序中编辑框的下面,我们来完善应用程序中编辑框的特性,使之能够进行多行文本的输入特性,使之能够进行多行文本的输入第72页/共138页74可进行多行输入可进行多行输入增加水平及垂直滚动条增加水平及垂直滚动条若不选择此项,在编辑框若不选择此项,在编辑框中按回车键就会终止应用中按回车键就会终止应用程序,若选此项,按回车程序,若选此项,按回车键就可进行下一行的输入,键就可进行下一行的输入,实现多行文本的输入实现多行文本的输入(c) 修改编辑框的特性修改编辑框的特性第73页/共138页75void CMy9_5Dlg:OnShow1Button() m_Edit1.SetSel(0,-1);/ 选中编辑框选中编辑框IDC_EDIT1中的全中的全部内容部内容 m_Edit1.ReplaceSel(This is the first EditBox.); 程序中程序中SetSel()函数是函数是CEdit类中的成员函数,因为类中的成员函数,因为m_Edit1是属于是属于CEdit类的对象,故可以调用该类所有的类的对象,故可以调用该类所有的成员函数。成员函数。ReplaceSel()()函数也是函数也是CEdit类中成员函数。类中成员函数。(a) (a) 给给ShowlShowl按钮连接代码按钮连接代码第74页/共138页76(2) (2) 给给 Clear1Clear1按钮连接代码按钮连接代码void CMy9_5Dlg:OnClear1Button() m_Edit1.SetSel(0,-1);/选中选中IDC_EDIT1中的内容中的内容m_Edit1.ReplaceSel();/用空串代替所选文本,即把所选的文本删除用空串代替所选文本,即把所选的文本删除第75页/共138页77void CMy9_5Dlg:OnShow2Button() m_Edit2.SetSel(0,-1);m_Edit2.ReplaceSel(This is the second EditBox.);void CMy9_5Dlg:OnClear2Button() m_Edit2.SetSel(0,-1);m_Edit2.ReplaceSel();(3) 给给Show2和和Clear2按钮连接代码按钮连接代码第76页/共138页78(4) 给按钮给按钮IDC_Transfer_BUTTON连接代码连接代码 void CMy9_5Dlg:OnTransferButton() m_Edit1.SetSel(0,-1);m_Edit1.Copy(); m_Edit2.SetSel(0,-1);m_Edit2.ReplaceSel();m_Edit2.Paste();第77页/共138页79(5)给给 Undo按钮连接代码按钮连接代码void CMy9_5Dlg:OnUndoButton() m_Edit1.Undo(); m_Edit2.Undo();(6)给给Exit按钮连接代码按钮连接代码 void CMy9_5Dlg:OnExitButton() OnOK();第78页/共138页80【例例9-6】 “乘法器乘法器”示例程序,使用示例程序,使用者在者在“乘数乘数”或或者者“被乘数被乘数”编编辑框中输入数字辑框中输入数字的时候,程序可的时候,程序可以随时计算乘法以随时计算乘法的结果的结果 IDTypeMemberRead-onlyNumberIDC_EDIT_MUL1intm_AIDC_EDIT_MUL2intm_BIDC_EDIT_RESULT CStringm_Result 第79页/共138页81return TRUE; 第80页/共138页82第81页/共138页83第82页/共138页84第83页/共138页85第84页/共138页86第85页/共138页87第86页/共138页88第87页/共138页89.AfxMessageBox(msg);第88页/共138页90第89页/共138页91对于成组的单选按钮,只在每组的第一个按钮的属性中选中Group设置在Sex Selecting组中只有Boy单选按钮选中Group属性在Age Range组中只有“20”单选按钮选中Group属性第90页/共138页92第91页/共138页93(1) 给复选框给复选框IDC_DATE_CHECK添加代码添加代码 OnDateCheck()方法的实现代码如下:方法的实现代码如下:void CMy9_8Dlg:OnDataCheck() UpdateData(TRUE);if(m_DateCheck=TRUE)CTime tNow ;tNow=CTime:GetCurrentTime();CString sNow=tNow.Format(%y.%m.%d);m_DateEdit.SetSel(0,-1);m_DateEdit.ReplaceSel(sNow);elsem_DateEdit.SetSel(0,-1);m_DateEdit.ReplaceSel();UpdateData(FALSE); 以当前的屏幕显示内容更新控件的变量 第92页/共138页94函数Format的参数%I是时间的小时表示法(0112),%m是分的表示法(0059),%d是秒的表示法(0059) 第93页/共138页95第94页/共138页96第95页/共138页97第96页/共138页98第97页/共138页99第98页/共138页100第99页/共138页101第100页/共138页102第101页/共138页103第102页/共138页104第103页/共138页105命名为IDB_BITMAP_DOT,设置Picture控件【Type】为“Bitmap”,【Image】为“IDB_BITMAP_DOT”第104页/共138页106Spin按钮控件提供了一对箭头,用户通过点击箭头可以微调该控件所表示的数值。表示表示Spin控件的是控件的是CSpinButtonCtrl类类 Spin控件通常和tab order位于它之前的控件成对使用。通过CSpinButtonCtrl的GetBuddy方法可获得与之配对的控件 第105页/共138页107BOOL CEx9_9Dlg:OnInitDialog()/ TODO: Add extra initialization hereCSpinButtonCtrl* pSpin =(CSpinButtonCtrl*) GetDlgItem(IDC_SPIN1);pSpin-SetRange(0, 100);pSpin-SetPos(50);pSpin-GetBuddy()-SetWindowText(5.0);return TRUE; 设置Spin的范围是0100,当前位置是50,同时设置它的配对控件的显示值 第106页/共138页108第107页/共138页109进度条有一个进度条有一个范围范围和和当前位置当前位置。范围表示整个范围表示整个操作的持续时间操作的持续时间,当前位置表示当前进行到的当前位置表示当前进行到的位置位置,进度条根据当前位置来判断进行的百分,进度条根据当前位置来判断进行的百分比,来显示进度比,来显示进度 第108页/共138页110在在OnInitDialog中添加如下代码:中添加如下代码:CProgressCtrl* pProg =(CProgressCtrl*) GetDlgItem(IDC_PROGRESS1);pProg-SetRange(0, 100);pProg-SetPos(50);为为“开始开始”按钮添加点击事件实现代码:按钮添加点击事件实现代码:void CEx9_9Dlg:OnButtonStar() CProgressCtrl* pProg=(CProgressCtrl*)GetDlgItem(IDC_PROGRESS1); pProg-SetPos(0); SetTimer(1000,100,NULL); 第109页/共138页111每隔0.1秒,进度条前进一步 第110页/共138页112 滑块控件在你选择一系列离散值或者一段连续范围内的时候十分有用。 第111页/共138页113在在OnInitDialog函数中添加如下代码:函数中添加如下代码:CString strText1;CSliderCtrl* pSlide1 =(CSliderCtrl*) GetDlgItem(IDC_SLIDER1);pSlide1-SetRange(0, 100);pSlide1-SetPos(50);strText1.Format(%d, pSlide1-GetPos();SetDlgItemText(IDC_STATIC_SLIDER, strText1); 第112页/共138页114第113页/共138页115如果让用户以字符串形式输入,则由于输入的多样性,程序不好解析 第114页/共138页116在在OnInitDialog中添加如下代码:中添加如下代码:CDateTimeCtrl* pDT = (CDateTimeCtrl*) GetDlgItem(IDC_DATETIMEPICKER1);CString formatStr= _T(今天是今天是: yy/MM/dd);pDT-SetFormat(formatStr);第115页/共138页117AfxMessageBox(s);第116页/共138页118列表控件第117页/共138页119 MFC中使用中使用CListCtrl类来封装列表控件类来封装列表控件的功能。的功能。 列表控件通常可以包括一个图标和一列表控件通常可以包括一个图标和一个标签。此外,每一项还可以具有其它附个标签。此外,每一项还可以具有其它附加信息,例如资源管理器中文件的具体信加信息,例如资源管理器中文件的具体信息就是附加信息。息就是附加信息。第118页/共138页120列表控列表控件的视件的视图风格图风格图标视图:图标视图:每项显示每项显示3232图标,图标,在图标下面显示标签。用户可以将在图标下面显示标签。用户可以将图标拖放到视图内任何位置图标拖放到视图内任何位置 小图标视图:小图标视图:每项显示每项显示1616图标,图标,在图标右边显示标签。用户可以将在图标右边显示标签。用户可以将图标拖放到视图内任何位置图标拖放到视图内任何位置 列表视图:列表视图:每项显示每项显示1616图标,图标,在图标右边显示标签。每一项按列在图标右边显示标签。每一项按列排列,不能随意拖动图标排列,不能随意拖动图标 报表视图:报表视图:每项占一行,第一列是每项占一行,第一列是主项,显示主项,显示1616图标,在图标右图标,在图标右侧显示标签。右边的列显示子项,侧显示标签。右边的列显示子项,具体由程序来决定具体由程序来决定 第119页/共138页121在在Cex9_9Dlg类中增加成员如下:类中增加成员如下:CImageList m_imageList;在在OnInitDialog函数中添加初始化图片列表的代码:函数中添加初始化图片列表的代码:HICON hIcon8;int n;m_imageList.Create(16, 16, 0, 8, 8); hIcon0 = AfxGetApp()-LoadIcon(IDI_ICON_WHITE);hIcon1 = AfxGetApp()-LoadIcon(IDI_ICON_BLACK);hIcon2 = AfxGetApp()-LoadIcon(IDI_ICON_RED);hIcon3 = AfxGetApp()-LoadIcon(IDI_ICON_BLUE);hIcon4 = AfxGetApp()-LoadIcon(IDI_ICON_YELLOW);hIcon5 = AfxGetApp()-LoadIcon(IDI_ICON_CYAN);hIcon6 = AfxGetApp()-LoadIcon(IDI_ICON_PURPLE);hIcon7 = AfxGetApp()-LoadIcon(IDI_ICON_GREEN);for (n = 0; n SetImageList(&m_imageList, TVSIL_NORMAL); / 设置图片列表设置图片列表TV_INSERTSTRUCT tvinsert; /创建待插入的创建待插入的TV_INSERTSTRUCT结构结构tvinsert.hParent = NULL;/ 无父结点无父结点tvinsert.hInsertAfter = TVI_LAST;/ 插入到本层最后插入到本层最后tvinsert.item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE| TVIF_TEXT; /掩码掩码:图标图标/选中图选中图标标/文字文字tvinsert.item.hItem = NULL;/ 句柄为空句柄为空tvinsert.item.state = 0;/ 状态状态tvinsert.item.stateMask = 0;/ 状态掩码,不使用这两项状态掩码,不使用这两项tvinsert.item.cchTextMax = 6;/ 最大文字长度,忽略最大文字长度,忽略tvinsert.item.iSelectedImage = 1;/ 选中图标索引选中图标索引tvinsert.item.cChildren = 0;/ 没有子节点没有子节点tvinsert.item.lParam = 0;/ 自定义数据自定义数据第128页/共138页130/ 创建第一层创建第一层tvinsert.item.iImage = 2;/ 一般图标一般图标tvinsert.item.pszText = father;/ 插入第一层第一个节点插入第一层第一个节点HTREEITEM hDad = pTree -InsertItem(&tvinsert);tvinsert.item.pszText = mother;/ 插入第一层第二个节点插入第一层第二个节点HTREEITEM hMom = pTree-InsertItem(&tvinsert);/ 创建第二层创建第二层tvinsert.hParent = hDad;/ 父节点为父节点为fathertvinsert.item.iImage = 3;/ 一般图标一般图标tvinsert.item.pszText = son; / 插入第二层插入第二层father的第一个节点的第一个节点pTree-InsertItem(&tvinsert);tvinsert.item.pszText = daughter;/ 插入第二层的第二个节点插入第二层的第二个节点pTree-InsertItem(&tvinsert);tvinsert.hParent = hMom;/ 父结点为父结点为mothertvinsert.item.iImage = 4;第129页/共138页131tvinsert.item.pszText = son;/ 插入第二层的第一个节点插入第二层的第一个节点pTree-InsertItem(&tvinsert);tvinsert.item.pszText = daughter;/ 插入第二层的第二个节点插入第二层的第二个节点pTree-InsertItem(&tvinsert);tvinsert.item.pszText = cartoon;/ 插入第二层的第三个节点插入第二层的第三个节点HTREEITEM hOther = pTree-InsertItem(&tvinsert);/ 创建第三层创建第三层tvinsert.hParent = hOther;/ 父结点为父结点为cartoontvinsert.item.iImage = 7;tvinsert.item.pszText = Tom; / 插入第三层的第一个节点插入第三层的第一个节点TompTree-InsertItem(&tvinsert);tvinsert.item.pszText = Jerry; / 插入第三层的第二个节点插入第三层的第二个节点JerrypTree-InsertItem(&tvinsert);第130页/共138页132数来描述,数来描述,第131页/共138页133第132页/共138页134在向对话框添加控件时,设置了在向对话框添加控件时,设置了Edit labelsEdit labels属性,使得树状属性,使得树状控件可编辑,双击节点文字便进入编辑状态,响应编辑状态结控件可编辑,双击节点文字便进入编辑状态,响应编辑状态结束消息呢的方法与响应列表控件的编辑结束消息完全一样。对束消息呢的方法与响应列表控件的编辑结束消息完全一样。对TVN_ENDLABELEDITTVN_ENDLABELEDIT消息的响应函数,实现如下:消息的响应函数,实现如下:void CEx9_9Dlg:OnEndlabeleditTree1(void CEx9_9Dlg:OnEndlabeleditTree1() ) TV_DISPINFO TV_DISPINFO* * pTVDispInfo = (TV_DISPINFO pTVDispInfo = (TV_DISPINFO* *)pNMHDR;)pNMHDR;/TODO:Add your control notification handler code here/TODO:Add your control notification handler code hereTVITEMA item = pTVDispInfo-item;TVITEMA item = pTVDispInfo-item;CString str =item.pszText;CString str =item.pszText;str.TrimLeft();str.TrimLeft();str.TrimRight();str.TrimRight();if(str.GetLength() 0)if(str.GetLength() 0) CTreeCtrl CTreeCtrl* * pTree =(CTreeCtrl pTree =(CTreeCtrl* *) GetDlgItem(IDC_TREE1);) GetDlgItem(IDC_TREE1); pTree-SetItemText(item.hItem,item.pszText); pTree-SetItemText(item.hItem,item.pszText); * *pResult = 0;pResult = 0; 第133页/共138页135第134页/共138页136第135页/共138页137向对话框添加扩展对话框控件,向对话框添加扩展对话框控件,IDID为为IDC_COMBOBOXEX1IDC_COMBOBOXEX1,类型,类型(Type)(Type)为为DropdownDropdown。在在OnInitDia
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!