版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第第9章章 基本控件使用基本控件使用(一一)第第9章章 基本控件使用基本控件使用(一一) 第第9章章 基本控件使用基本控件使用(一一)第第9章章 基本控件使用基本控件使用(一一) 9.1 编辑框类编辑框类9.2 菜单类菜单类9.3 滚动条类滚动条类第第9章章 基本控件使用基本控件使用(一一)基本控件基本控件静态图片静态图片编辑框编辑框按钮按钮单选框单选框列表框列表框垂直滚动条垂直滚动条进展条进展条热键热键树形视图树形视图动画动画日期选择日期选择IPIP地址地址扩展组合框扩展组合框控件的选择控件的选择 静态文本静态文本 组框组框 复选框复选框 组合框组合框 水平滚动条水平滚动条 旋转按钮旋转按钮
2、 滑动条滑动条 列表视图列表视图 标签标签 复合编辑复合编辑 月历月历 用户定制控件用户定制控件 控件控件工具栏工具栏第第9章章 基本控件使用基本控件使用(一一)9.1 编辑框类编辑框类第第9章章 基本控件使用基本控件使用(一一)9.1.1 编辑框类的结构及其方法编辑框类的结构及其方法 MFC在类在类CEdit中提供标准的中提供标准的Windows编辑框控件服务。编辑框控件服务。 CEdit是是CWnd类直接派生来的,具有类直接派生来的,具有CWnd的所有功能。的所有功能。 编辑框控件的默认模式是在一行显示所有编辑文本。编辑框控件的默认模式是在一行显示所有编辑文本。 CCmdTarget CO
3、bject CWnd CEdit第第9章章 基本控件使用基本控件使用(一一)CEdit类:类:class CEdit : public CWndDECLARE_DYNAMIC(CEdit)/ Constructorspublic:CEdit();BOOL Create(DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID);/ AttributesBOOL CanUndo() const;int GetLineCount() const;BOOL GetModify() const;void SetModify(BOOL
4、 bModified = TRUE);void GetRect(LPRECT lpRect) const;DWORD GetSel() const;void GetSel(int& nStartChar, int& nEndChar) const;HLOCAL GetHandle() const;void SetHandle(HLOCAL hBuffer);第第9章章 基本控件使用基本控件使用(一一)#if (WINVER = 0 x400)void SetMargins(UINT nLeft, UINT nRight);DWORD GetMargins() const;voi
5、d SetLimitText(UINT nMax);UINT GetLimitText() const;CPoint PosFromChar(UINT nChar) const;int CharFromPos(CPoint pt) const;#endif/ NOTE: first word in lpszBuffer must contain the size of the buffer!int GetLine(int nIndex, LPTSTR lpszBuffer) const;int GetLine(int nIndex, LPTSTR lpszBuffer, int nMaxLen
6、gth) const;/ Operationsvoid EmptyUndoBuffer();BOOL FmtLines(BOOL bAddEOL);void LimitText(int nChars = 0);int LineFromChar(int nIndex = -1) const;int LineIndex(int nLine = -1) const;int LineLength(int nLine = -1) const;void LineScroll(int nLines, int nChars = 0);第第9章章 基本控件使用基本控件使用(一一)void ReplaceSel(
7、LPCTSTR lpszNewText, BOOL bCanUndo = FALSE);void SetPasswordChar(TCHAR ch);void SetRect(LPCRECT lpRect);void SetRectNP(LPCRECT lpRect);void SetSel(DWORD dwSelection, BOOL bNoScroll = FALSE);void SetSel(int nStartChar, int nEndChar, BOOL bNoScroll = FALSE);BOOL SetTabStops(int nTabStops, LPINT rgTabS
8、tops);void SetTabStops();BOOL SetTabStops(const int& cxEachStop); / takes an int/ Clipboard operationsBOOL Undo();void Clear(); void Copy(); void Cut(); void Paste();BOOL SetReadOnly(BOOL bReadOnly = TRUE);int GetFirstVisibleLine() const;TCHAR GetPasswordChar() const;/ Implementationpublic:virtu
9、al CEdit();CEdit 类的通用方法类的通用方法 方法方法 说明说明 CanUndo() 决定一个编辑操作是否可以撤销决定一个编辑操作是否可以撤销 Clear() 从编辑控件中删除当前的选择从编辑控件中删除当前的选择(如果有的话如果有的话) Copy() 将编辑控件当前的选择以将编辑控件当前的选择以 CF_TEXT 格式复制到剪贴板中格式复制到剪贴板中 Cut() 剪下编辑控件中的当前选择并以剪下编辑控件中的当前选择并以 CF_TEXT 格式复制到剪贴板中格式复制到剪贴板中 EmptyUndoBuffer() 消除一个编辑控件的“撤销”标志消除一个编辑控件的“撤销”标志 GetFir
10、stVisibleLine() 确定编辑控件中的最上面的可视行确定编辑控件中的最上面的可视行 GetModify() 确定一个编辑控件的内容是否可修改确定一个编辑控件的内容是否可修改 GetPasswordChar() 当用户输入文本时,获得编辑控件中显示的密码字符当用户输入文本时,获得编辑控件中显示的密码字符 GetRect() 获得一个编辑控件的格式化矩形获得一个编辑控件的格式化矩形 GetSel() 获得编辑控件中当前选择的开始和结束字符位置获得编辑控件中当前选择的开始和结束字符位置 LimitText() 限定用户可能输入一编辑控件的文本长度限定用户可能输入一编辑控件的文本长度 Lin
11、eFromChar() 获得包含指定字符下标的行的行号获得包含指定字符下标的行的行号 LineLength() 获得编辑控件中的一行的长度获得编辑控件中的一行的长度 LineScroll() 滚动多行编辑控件的文本滚动多行编辑控件的文本 Paste() 将剪贴板的数据插入到编辑控件作当前的光标位置, 只有当前剪贴板将剪贴板的数据插入到编辑控件作当前的光标位置, 只有当前剪贴板中数中数据格式为据格式为 CF_TEXT 时方可插入时方可插入 ReplaceSel() 用指定文本替代编辑控件中当前选择的部分用指定文本替代编辑控件中当前选择的部分 SetModify() 设置或清除编辑控件的修改标志设
12、置或清除编辑控件的修改标志 SetPasswordChar() 当用户输入文本时设置或删除一个显示于编辑控件中的密码字符当用户输入文本时设置或删除一个显示于编辑控件中的密码字符 SetReadOnly() 将编辑控件设置为只读状态将编辑控件设置为只读状态 SetSel() 在编辑控件中选择字符的范围在编辑控件中选择字符的范围 Undo() 取消最后一个编辑控件操作取消最后一个编辑控件操作 第第9章章 基本控件使用基本控件使用(一一)CEdit控件的样式控件的样式 样式宏样式宏 说说 明明 ES_AUTOHSCROLL 当用户在行尾输入一个字符时,文本自动向右滚动当用户在行尾输入一个字符时,文本
13、自动向右滚动 10 个字符,当用个字符,当用户接受户接受 Enter 键时,控件文本滚动回到零位置键时,控件文本滚动回到零位置 ES_AUTOVSCROLL 当用户在最后一行按当用户在最后一行按 Enter 键时,自动将文本向上滚动一页键时,自动将文本向上滚动一页 ES_CENTER 在多行编辑器中将文本置中在多行编辑器中将文本置中 ES_LEFT 将文本左对齐将文本左对齐 在编辑框控件中输入时,自动将所有字符转换成小写在编辑框控件中输入时,自动将所有字符转换成小写 ES_MULTILINE 指定编辑框控件是一个多行编辑框控件指定编辑框控件是一个多行编辑框控件(默认时为单行默认时为单行) ES
14、_NOHIDESEL 不不做编辑框控件的默认动作,该动作是:当控件失去输入光标时,隐做编辑框控件的默认动作,该动作是:当控件失去输入光标时,隐藏所选文本,当控件接受输入光标时,显示所有文本藏所选文本,当控件接受输入光标时,显示所有文本 ES_NUMBER 只允许在编辑框控件中输入数字只允许在编辑框控件中输入数字 ES_OEMCONVERT 当应用程序调用当应用程序调用 Windows API 函数函数 AnsiToOem()将一个编辑框控件将一个编辑框控件中的中的 ANSI 字符转换成字符转换成 OEM 字符串时,通过将控件中输入的字符串时,通过将控件中输入的 ANSI字符集转换成字符集转换成
15、 OEM 字符集再转回到字符集再转回到 ANSI,确保适当的字符转换,确保适当的字符转换,这种样式在包含文件名的编辑框控件中非常有用这种样式在包含文件名的编辑框控件中非常有用 ES_PASSWORD 将 编 辑 框 控 件 中 的 所 有 输 入 的 字 符 以 “将 编 辑 框 控 件 中 的 所 有 输 入 的 字 符 以 “* ” 显 示 , 可 以 用” 显 示 , 可 以 用SetPasswordChar()方法来设置显示不同字符方法来设置显示不同字符 ES_READONLY 防止用户在编辑框控件中输入或编辑文本防止用户在编辑框控件中输入或编辑文本 ES_RIGTH 在单行编辑框控件
16、中文本右对齐在单行编辑框控件中文本右对齐 ES_UPPERCASE 在编辑框控件中输入时,自动将所有字符转换成大写字符在编辑框控件中输入时,自动将所有字符转换成大写字符 ES_WAITRETURN 在一个对话框的单行编辑框控件中, 当用户按在一个对话框的单行编辑框控件中, 当用户按Enter键时插入回车符;键时插入回车符;如果不指定此样式,则按如果不指定此样式,则按Enter 键时,相当于按对话框的默认按钮。键时,相当于按对话框的默认按钮。此样式对单行编辑框控件无效此样式对单行编辑框控件无效 第第9章章 基本控件使用基本控件使用(一一)多行编辑所支持的多行编辑所支持的 CEdit 法法 方法方
17、法 说明说明 FmtLines() 设置在多行编辑控件中包含软分行符设置在多行编辑控件中包含软分行符 GetHandle() 获得当前分配给一个多行编辑控件的内存的句柄获得当前分配给一个多行编辑控件的内存的句柄 GetLine() 从一编辑控件中获得一行文本从一编辑控件中获得一行文本 GetLineCount() 获得多行编辑控件的行数获得多行编辑控件的行数 LineIndex() 设置多行编辑控件中一行的字符下标设置多行编辑控件中一行的字符下标 SetHandle() 设置多行编辑控件将要用到的句柄内存句柄设置多行编辑控件将要用到的句柄内存句柄 SetRect() 设置多行编辑控件的格式化矩
18、形并更新控件设置多行编辑控件的格式化矩形并更新控件 SetRectNP() 设置多行编辑控件的格式设置多行编辑控件的格式化矩形并且不重绘控件窗口化矩形并且不重绘控件窗口 SetTabStops() 在多行编辑控件中设置制表在多行编辑控件中设置制表(tab)位位 当编辑框控件具有当编辑框控件具有ES_MULTILINE样式样式时,多行编辑框控时,多行编辑框控件支持在编辑窗口进行多行文本编辑。件支持在编辑窗口进行多行文本编辑。第第9章章 基本控件使用基本控件使用(一一)9.1.2 编辑框类的应用实例编辑框类的应用实例例例9-1 使用使用MFC AppWizard创建如图所示的基于对话框的创建如图所
19、示的基于对话框的应用程序,实现算术加、减、乘和除的运算。应用程序,实现算术加、减、乘和除的运算。第第9章章 基本控件使用基本控件使用(一一)1使用AppWizard建立应用程序框架( 1 ) 在 进 入在 进 入 V C + + 的 第 一 个 界 面 下 , 选 择的 第 一 个 界 面 下 , 选 择 M F C AppWizardexe,并设置工程名及其所在位置。,并设置工程名及其所在位置。第第9章章 基本控件使用基本控件使用(一一) 弹出弹出MFC AppWizard-Step 1对话框,如图所示。选中对话框,如图所示。选中Dialog based选项,其余的都采用默认选项。选项,其余
20、的都采用默认选项。 第第9章章 基本控件使用基本控件使用(一一)(2) MFC AppWizard建立了一个基于对话窗口的程序框架。建立了一个基于对话窗口的程序框架。对话框模板对话框模板控件工具栏控件工具栏布局工具栏布局工具栏默认标识符默认标识符对话框编辑器对话框编辑器第第9章章 基本控件使用基本控件使用(一一)基于对话框程序的执行流程基于对话框程序的执行流程 DoModal()函数的功能:当前函数的功能:当前只能运行此只能运行此模态对话框模态对话框,且停,且停止主窗口的运行,直到模态对止主窗口的运行,直到模态对话框退出,才允许主窗口运行。话框退出,才允许主窗口运行。 当在对话框上加载消息,即
21、我当在对话框上加载消息,即我们按一下按钮,对话框就要做们按一下按钮,对话框就要做出一定的回应。而这一功能就出一定的回应。而这一功能就交由交由Run()函数处理。函数处理。 第第9章章 基本控件使用基本控件使用(一一)模态对话框模态对话框定义定义CMyDlg dlg;时,对话框并没有显示,只是构造了一个时,对话框并没有显示,只是构造了一个CMyDlg类型的对象,直到用户调用类型的对象,直到用户调用DoModal(),对话框才会显,对话框才会显示出来。示出来。dlg.DoModal()后,显示一个模态对话框,此时后,显示一个模态对话框,此时DoModal()函数并函数并不返回,直到用户关闭此对话框
22、时,不返回,直到用户关闭此对话框时,DoModal才返回。才返回。CDialog:DoModal()的返回值为的返回值为IDOK,IDCANCEL。表明操作。表明操作者在对话框上选择者在对话框上选择“确认确认”或是或是“取消取消”按钮。按钮。IDOK ,IDCANCEL是宏。是宏。CMyDlg dlg;m_pMainWnd = &dlg;int nResponse = dlg.DoModal();if (nResponse = IDOK) /else if (nResponse = IDCANCEL)/第第9章章 基本控件使用基本控件使用(一一)补充:非模态对话框补充:非模态对话框 在
23、程序运行的过程中,若出现了非模态对话框,主窗口还在程序运行的过程中,若出现了非模态对话框,主窗口还可以发送消息。可以发送消息。 点击非模态对话框中的点击非模态对话框中的OK按钮,非模态对话框没有销毁,按钮,非模态对话框没有销毁,只是隐藏了。若想点击只是隐藏了。若想点击OK按钮时,非模态对话框也销毁,按钮时,非模态对话框也销毁,那么那么CTestDialog类必须类必须重载重载其基类其基类CDialog的虚的虚函数函数OnOK(),在此函数里调用,在此函数里调用DestroyWindow()来销毁此对话来销毁此对话框。框。 /采用局部变量创建一个非模态对话框采用局部变量创建一个非模态对话框 CT
24、estDialog *pdlg = new CTestDialog(); pdlg -Create(IDD_DIALOG1); /创建一个非模态对话框创建一个非模态对话框 /IDD_DIALOG1为已经定义的对话框资源的为已经定义的对话框资源的ID号号 pdlg -ShowWindow(SW_SHOWNORMAL); /显示非模态对话框显示非模态对话框 第第9章章 基本控件使用基本控件使用(一一)2使用资源编辑器建立对话框(1) 生成生成“编辑框编辑框”控件控件1)Controls的的“编辑框编辑框”按钮上单击鼠标左键,在对按钮上单击鼠标左键,在对话框编辑窗口上的话框编辑窗口上的“数据数据1”
25、编辑框的位置上,按编辑框的位置上,按下鼠标左键并拖动鼠标画出一个大小合适的编辑下鼠标左键并拖动鼠标画出一个大小合适的编辑框。框。2)在编辑框上单击鼠标右键,选择在编辑框上单击鼠标右键,选择Properties,设置,设置对话框,输入对话框,输入ID。 第第9章章 基本控件使用基本控件使用(一一)(2)生成生成“Button”按钮控件。按钮控件。1) Controls的的“Button”按钮上单击鼠标左键,画出一个按钮上单击鼠标左键,画出一个大小合适的下压式按钮。大小合适的下压式按钮。2) 在按钮上单击右键,选择在按钮上单击右键,选择Properties项,输入控件的项,输入控件的ID值和值和C
26、aption属性。属性。3) 控件的布局,对话框编辑器中提供了控件布局工具栏,控件的布局,对话框编辑器中提供了控件布局工具栏,可以自动地排列对话框内的控件,并改变控件的大小。可以自动地排列对话框内的控件,并改变控件的大小。第第9章章 基本控件使用基本控件使用(一一)按照上面的操作过程编辑其他按钮和编辑框等对象的属性按照上面的操作过程编辑其他按钮和编辑框等对象的属性对象对象IDCaption或说明或说明编辑框编辑框IDC_ITEM1_EDIT计算数据计算数据1编辑框编辑框IDC_ITEM2_EDIT计算数据计算数据2编辑框编辑框IDC_RESULT_EDIT计算结果计算结果按钮按钮IDC_ADD
27、_BUTTON+按钮按钮IDC_DIFFERENCE_BUTTON-按钮按钮IDC_MULTIPLY_BUTTON*按钮按钮IDC_DEVIDE_BUTTON/按钮按钮IDC_CLEAR_BUTTONClear(清除清除)按钮按钮IDC_EXIT_BUTTONExit(退出退出)静态文本静态文本IDC_STATIC数据数据1静态文本静态文本IDC_STATIC数据数据2静态文本静态文本IDC_STATIC结果结果第第9章章 基本控件使用基本控件使用(一一)3添加代码(1) 给编辑框连接变量。在给编辑框连接变量。在“数据数据l”编辑框上单击鼠标右键,编辑框上单击鼠标右键,快捷菜单中选择快捷菜单中
28、选择ClassWizard菜单项菜单项,弹出,弹出MFC ClassWizard对话框,选择对话框,选择Member Variables选项卡。选项卡。 以下给出多种方法的实现:以下给出多种方法的实现:ID变量变量变量类型变量类型IDC_ITEM1_EDITm_Item1_EditintIDC_ITEM2_EDITm_Item2_EditintIDC_RESULT_EDITm_Result_Editint方法一方法一第第9章章 基本控件使用基本控件使用(一一)(2) 给给“+”按钮连接代码。在按钮连接代码。在“+”按钮上单击鼠标右键,选择按钮上单击鼠标右键,选择ClassWizard菜单项菜单
29、项,选择,选择Messages Maps选项卡选项卡,然后在,然后在Object IDs列表框中选择列表框中选择IDC_ADD_BUTTON,在,在Messages列表框中选择列表框中选择BN_CLICKED项,即选择单击按钮事件。项,即选择单击按钮事件。 第第9章章 基本控件使用基本控件使用(一一)void CMyDlg:OnAddButton() UpdateData(TRUE); /将控件的状态传给其关联的变量将控件的状态传给其关联的变量 m_Result_Edit =m_Item1_Edit+m_Item2_Edit; UpdateData(FALSE); /将控件关联变量的值传给控件
30、并改变控件状态将控件关联变量的值传给控件并改变控件状态void CMyDlg:OnClearButton() m_Item1_Edit0;/清除内容清除内容m_Item2_Edit0; /清除内容清除内容m_Result_Edit= 0; /清除内容清除内容UpdateData(FALSE); void CMyDlg:OnExitButton() OnOK(); / 退出应用程序退出应用程序UpdateData刷新当前对话框刷新当前对话框 ,是控件和数,是控件和数据(据(value类型的变量)的双向通道类型的变量)的双向通道第第9章章 基本控件使用基本控件使用(一一)ID变量变量变量类型变量类
31、型IDC_ITEM1_EDITm_Item1_EditintIDC_ITEM2_EDITm_Item2_EditintIDC_RESULT_EDITm_Result_EditCString方法二方法二void CMyDlg:OnAddButton() UpdateData(TRUE); /将控件的状态传给其关联的变量将控件的状态传给其关联的变量int Result=m_Item1_Edit+m_Item2_Edit;m_Result_Edit.Format(%d, Result); /或或 _gcvt(Result,10,cBuffer); m_Result_Edit=(LPCTSTR)cBu
32、ffer; UpdateData(FALSE); /将控件关联变量的值传给控件并改变控件状态将控件关联变量的值传给控件并改变控件状态void CMyDlg:OnClearButton() m_Item1_Edit0;/清除内容清除内容m_Item2_Edit0; /清除内容清除内容m_Result_Edit= ; / 清空内容(清空内容(string类型)类型)UpdateData(FALSE); 第第9章章 基本控件使用基本控件使用(一一)void CMyDlg:OnAddButton() UpdateData(TRUE); /将控件的状态传给其关联的变量将控件的状态传给其关联的变量floa
33、t Result=atof(m_Item1_Edit)+atof(m_Item2_Edit); /将字符串转换成浮点型将字符串转换成浮点型m_Result_Edit.Format(%g, Result); UpdateData(FALSE); /用控件关联变量用控件关联变量将窗口中的内容更新将窗口中的内容更新ID变量变量变量类型变量类型IDC_ITEM1_EDITm_Item1_EditCStringIDC_ITEM2_EDITm_Item2_EditCStringIDC_RESULT_EDITm_Result_EditCString方法三方法三void CMyDlg:OnClearButto
34、n() m_Item1_Edit_T( );/清除内容清除内容m_Item2_Edit_T( ); /清除内容清除内容m_Result_Edit= _T( ); / 清空内容(清空内容(string类型)类型)UpdateData(FALSE); 第第9章章 基本控件使用基本控件使用(一一)Format函数函数Format函数:返回按指定方式格式化一个数组常量的字符形式。函数:返回按指定方式格式化一个数组常量的字符形式。% 索引索引 : - 宽度宽度 . 摘要摘要 类型类型Format(x=%d, 12); /x=12 /最普通最普通Format(x=%3d, 12); /x= 12 /指定宽
35、度指定宽度Format(x=%f, 12.0); /x=12.00 /浮点数浮点数Format(x=%g,02.200); /x=2.2 g /对应浮点型,且将值中多余的数去掉对应浮点型,且将值中多余的数去掉Format(x=%.3f, 12.0); /x=12.000 /指定小数指定小数Format(x=%8.2f12.0) / x= 12.00 ;Format(x=%.*f, 5, 12.0); /x=12.00000 /动态配置动态配置Format(x=%.5d, 12); /x=00012 /前面补充前面补充0Format(x=%.5x, 12); /x=0000C /十六进制十六进制
36、Format(x=%1:d%0:d, 12, 13); /x=1312 /使用索引使用索引Format(x=%p, nil); /x=00000000 /指针指针Format(x=%1.1e, 12.0); /x=1.2E+001 /科学记数法科学记数法Format(x=%, ); /x=% /得到得到%S := Format(%s%d, S, I); /S := S + StrToInt(I); /连接字符串连接字符串第第9章章 基本控件使用基本控件使用(一一)ID变量变量变量类型变量类型IDC_ITEM1_EDITm_Item1_EditCEditIDC_ITEM2_EDITm_Item2
37、_EditCEditIDC_RESULT_EDITm_Result_EditCString方法四方法四第第9章章 基本控件使用基本控件使用(一一) 单击单击Add Function按钮,在弹出的对话框中接受默认的名按钮,在弹出的对话框中接受默认的名字。单击字。单击Edit Code按钮,显示源代码文件,在函数按钮,显示源代码文件,在函数OnAddButton()中输入下列代码:中输入下列代码:void CMyDlg:OnAddButton() char cstrItem110,cstrItem210; /定义字符串,存储数据框中的值定义字符串,存储数据框中的值double dfItem1,df
38、Item2,dfResult;char cBuffer50; /定义字符串,存储结果框中的值定义字符串,存储结果框中的值m_Item1_Edit.GetWindowText(cstrItem1,10); /将编辑框的内容存到变量中将编辑框的内容存到变量中m_Item2_Edit.GetWindowText(cstrItem2,10);dfItem1=atof(LPCTSTR)cstrItem1);/将字符串转换成浮点型将字符串转换成浮点型dfItem2=atof(LPCTSTR)cstrItem2);dfResult=dfItem1+dfItem2; /加法加法_gcvt(dfResult,1
39、0,cBuffer); /将结果转成字符串存在将结果转成字符串存在cBufferm_Result_Edit=(LPCTSTR)cBuffer; /cBuffer值显示在结果编辑框中值显示在结果编辑框中UpdateData(FALSE); /用控件关联变量用控件关联变量将窗口中的内容更新将窗口中的内容更新字符数目字符数目方法四方法四CWnd:GetWindowTextint GetWindowText( LPTSTR lpszStringBuf, int nMaxCount ) const;void GetWindowText( CString& rString ) const;m_Re
40、sult_Edit.Format(%g, dfResult);第第9章章 基本控件使用基本控件使用(一一)说明说明char *_gcvt(double valuse, int digits, char *buffer); /把一个浮点值转换成一个字符串把一个浮点值转换成一个字符串,它存储在缓冲区中。它存储在缓冲区中。参数参数: Value:被转换的值被转换的值 Digits:存储的有效数字位数存储的有效数字位数 Buffer:结果的存储位置结果的存储位置gcvt函数把一个浮点值转换成一个字符串函数把一个浮点值转换成一个字符串(包括一个包括一个小数点小数点和可能的和可能的符号字节符号字节)并存储
41、该字符串在并存储该字符串在buffer中。该中。该buffer应足够大以便容纳转应足够大以便容纳转换的值加上结尾的空格字符换的值加上结尾的空格字符,它是自动添加的。如果一个缓冲区的尺寸它是自动添加的。如果一个缓冲区的尺寸为为digits的尺寸的尺寸+1,该函数覆盖该缓冲区的末尾。这是因为该函数覆盖该缓冲区的末尾。这是因为转换的字符转换的字符串包括一个小数点以及可能包含符号和指数信息串包括一个小数点以及可能包含符号和指数信息。gcvt试图以十进制格式产生试图以十进制格式产生digits数字数字,如果不可能如果不可能,它以指数格式产生它以指数格式产生digits数字数字,在转换时可能截除尾部的在转
42、换时可能截除尾部的0。第第9章章 基本控件使用基本控件使用(一一)(3) 同样可以给同样可以给“-”、“*”和和“/”按钮连接代码,不同的是按钮连接代码,不同的是消息映像函数中执行减、乘和除的操作。消息映像函数中执行减、乘和除的操作。“-”的操作代码如下:的操作代码如下:void CMyDlg:OnDifferenceButton() char cstrItem110,cstrItem210;double dfItem1,dfItem2,dfResult;char cBuffer50;m_Item1_Edit.GetWindowText(cstrItem1,10);m_Item2_Edit.G
43、etWindowText(cstrItem2,10);dfItem1=atof(LPCTSTR)cstrItem1);dfItem2=atof(LPCTSTR)cstrItem2);dfResult=dfItem1-dfItem2; /减法减法_gcvt(dfResult,10,cBuffer);m_Result_Edit=(LPCTSTR)cBuffer;UpdateData(FALSE);第第9章章 基本控件使用基本控件使用(一一)“*”的操作代码如下:的操作代码如下:void CMyDlg:OnMultiplyButton() char cstrItem110,cstrItem210;d
44、ouble dfItem1,dfItem2,dfResult;char cBuffer50;m_Item1_Edit.GetWindowText(cstrItem1,10);m_Item2_Edit.GetWindowText(cstrItem2,10);dfItem1=atof(LPCTSTR)cstrItem1);dfItem2=atof(LPCTSTR)cstrItem2);dfResult=dfItem1*dfItem2; /乘法乘法_gcvt(dfResult,10,cBuffer);m_Result_Edit=(LPCTSTR)cBuffer;UpdateData(FALSE);第
45、第9章章 基本控件使用基本控件使用(一一)“/”的操作代码如下:的操作代码如下:void CMyDlg:OnDevideButton() char cstrItem110,cstrItem210;double dfItem1,dfItem2,dfResult;char cBuffer50;m_Item1_Edit.GetWindowText(cstrItem1,10);m_Item2_Edit.GetWindowText(cstrItem2,10);dfItem1=atof(LPCTSTR)cstrItem1);dfItem2=atof(LPCTSTR)cstrItem2);dfResult=
46、dfItem1/dfItem2; /除法除法_gcvt(dfResult,10,cBuffer);m_Result_Edit=(LPCTSTR)cBuffer;UpdateData(FALSE);第第9章章 基本控件使用基本控件使用(一一)(4) 给给“Clear”按钮连接代码:利用按钮连接代码:利用ClassWizard将按钮消息将按钮消息BN_CLICKED加到函数加到函数OnClearButton中,加入代码中,加入代码:void CMyDlg:OnClearButton() / TODO: Add your control notification handler code herem
47、_Item1_Edit.SetSel(0,-1);/选中编辑框选中编辑框IDC_EDIT1中的全部内容中的全部内容m_Item1_Edit.ReplaceSel( ); / 用空字符用空字符替换替换m_Item2_Edit.SetSel(0,-1);/选中编辑框中的全部内容选中编辑框中的全部内容m_Item2_Edit.ReplaceSel( ); / 用空字符用空字符替换替换m_Result_Edit= ; / 清空(清空(string类型)类型)UpdateData(FALSE); SetSel(start, end)/选择字符的起始结束选择字符的起始结束 m_ShowInfor.SetS
48、el(0, -1);/选择全部选择全部 m_ShowInfor.SetSel(-1, -1);/选择最末尾选择最末尾 第第9章章 基本控件使用基本控件使用(一一)ID变量变量变量类型变量类型IDC_ITEM1_EDITm_Item1_EditCEditIDC_ITEM2_EDITm_Item2_EditCEditIDC_RESULT_EDITm_Result_EditCEdit思考思考?void CMyDlg:OnAddButton() char cstrItem110,cstrItem210; /定义字符串定义字符串double dfItem1,dfItem2,dfResult;char c
49、Buffer50;m_Item1_Edit.GetWindowText(cstrItem1,10); /将编辑框的内容存到变量中将编辑框的内容存到变量中m_Item2_Edit.GetWindowText(cstrItem2,10);dfItem1=atof(LPCTSTR)cstrItem1);/将字符串转换成浮点型将字符串转换成浮点型dfItem2=atof(LPCTSTR)cstrItem2);dfResult=dfItem1+dfItem2; /加法加法_gcvt(dfResult,10,cBuffer); /将结果转换成字符串存储在将结果转换成字符串存储在cBuffer? /cBuf
50、fer值显示在结果编辑框中值显示在结果编辑框中m_Result_Edit.SetSel(0,-1); m_Result_Edit.ReplaceSel(cBuffer); /或:或:m_Result_Edit.SetWindowText(cBuffer);方法五方法五第第9章章 基本控件使用基本控件使用(一一)为按钮增加快捷键为按钮增加快捷键 在按钮的标题相应字母前加在按钮的标题相应字母前加&,操作时其快捷键为,操作时其快捷键为“shift+快捷字母快捷字母”第第9章章 基本控件使用基本控件使用(一一)9.2 菜单类菜单类 第第9章章 基本控件使用基本控件使用(一一)9.2.1 莱单莱
51、单 菜单允许用户用一种标准的方法与菜单允许用户用一种标准的方法与Windows应用程序进行应用程序进行交互:样式一致的用户界面对象交互:样式一致的用户界面对象菜单栏。菜单栏。 菜单一般存放在资源脚本中,在程序运行时才调用。一个菜单一般存放在资源脚本中,在程序运行时才调用。一个菜单项一般有两个必要的部分,它们分别是菜单项一般有两个必要的部分,它们分别是字符串名字符串名(如如file)和和整数标识符整数标识符。 一般来说,菜单的标识符一般来说,菜单的标识符ID在资源的头文件在资源的头文件(Resource.h)中定义,如:中定义,如:#define IDM_MENU1 129第第9章章 基本控件使
52、用基本控件使用(一一)9.2.2 菜单类的结构及其方法菜单类的结构及其方法 菜单类菜单类(CMenu)是从是从CObject类派生的。类派生的。 CMenu CObject第第9章章 基本控件使用基本控件使用(一一)CMenu的构造方法的构造方法第第9章章 基本控件使用基本控件使用(一一)菜单项菜单项操作方法是用来处理实际菜单项的,是对菜单操作操作方法是用来处理实际菜单项的,是对菜单操作方法的补充。方法的补充。第第9章章 基本控件使用基本控件使用(一一)9.2.3 菜单类的应用实例菜单类的应用实例例例9-2 给计算器应用程序添加如图所示的菜单。给计算器应用程序添加如图所示的菜单。第第9章章 基
53、本控件使用基本控件使用(一一)1菜单的设计(1) 选择选择 Insert/Resource命令,将显示命令,将显示Insert Resource(增加增加资源资源)对话框对话框.第第9章章 基本控件使用基本控件使用(一一)在资源文件在资源文件Menu中增加了一个菜单资源项中增加了一个菜单资源项 第第9章章 基本控件使用基本控件使用(一一)(2) 双击双击ID号,则显示一个可编辑的菜单栏,该菜单栏的最号,则显示一个可编辑的菜单栏,该菜单栏的最左边是一个带虚框的矩形框,这个矩形框表示最左边的左边是一个带虚框的矩形框,这个矩形框表示最左边的一个菜单项。一个菜单项。在资源文件在资源文件Menu中增加了
54、一个菜单资源项中增加了一个菜单资源项 第第9章章 基本控件使用基本控件使用(一一)(3) 双击矩形框,双击矩形框,VC+显示一个显示一个 Menu Item Properties(菜单属菜单属 性性)对话框。对话框。分割线分割线是否是否选中选中显示显示提示提示信息信息弹出弹出菜单菜单是否被是否被禁止禁止是否被是否被激活激活表示表示Alt和字母的和字母的组合快捷键组合快捷键第第9章章 基本控件使用基本控件使用(一一)菜单项对应的菜单项对应的ID分别为:分别为:CaptionID+ID_ADD_MENU-ID_DIFFERENCE _MENU*ID_MULTIPLY_MENU/ID_DEVIDE_
55、MENUClearID_CLEAR_MENUAboutID_ABOUT_MENUExitID_EXIT_MENU第第9章章 基本控件使用基本控件使用(一一)2给菜单连接一个类(1) 在编辑状态的菜单上,单击鼠标右键在编辑状态的菜单上,单击鼠标右键/选中选中ClassWizard。显示显示ClassWizard对话框的同时,将显示对话框的同时,将显示Adding a Class对话框。对话框。该对话框询问是增加一个新的类,还是选择一个已经存在的该对话框询问是增加一个新的类,还是选择一个已经存在的类进行连接。这里要连接的类是与类进行连接。这里要连接的类是与Menu应用程序相关联的对应用程序相关联的
56、对话框类话框类CMyDlg,这个类已经存在,所以选择图中的,这个类已经存在,所以选择图中的Select an existing class对话框。对话框。第第9章章 基本控件使用基本控件使用(一一)(2)在在Select Class对话框中选择对话框中选择CMyDlg后单击后单击Select按钮。按钮。 第第9章章 基本控件使用基本控件使用(一一)3连接莱单和应用程序的主窗口(1)在在Menu的工作区的的工作区的Resource View选项卡中,双击选项卡中,双击Dialog文件夹中的文件夹中的IDD_MY_DIALOG,此时弹出,此时弹出IDD_MY_DIALOG对话框。对话框。(2) 在
57、对话框的任何一个空白域单击鼠标右键,然后在弹出在对话框的任何一个空白域单击鼠标右键,然后在弹出的快捷菜单中选择的快捷菜单中选择Properties命令。在对话框中的菜单命令。在对话框中的菜单组合框中选择组合框中选择IDR_MENU1。第第9章章 基本控件使用基本控件使用(一一)4给菜单项编写代码 在菜单在菜单IDR_MENU1上单击鼠标右键,选择上单击鼠标右键,选择ClassWizard。12345第第9章章 基本控件使用基本控件使用(一一)在在OnAddMenu()函数中输入下列代码:函数中输入下列代码:void CMyDlg:OnAddMenu() char cstrItem110,cst
58、rItem210; /定义字符串定义字符串double dfItem1,dfItem2,dfResult;char cBuffer50;m_Item1_Edit.GetWindowText(cstrItem1,10); /将编辑框的内容存到变量中将编辑框的内容存到变量中m_Item2_Edit.GetWindowText(cstrItem2,10);dfItem1=atof(LPCTSTR)cstrItem1);/将字符串转换成浮点型将字符串转换成浮点型dfItem2=atof(LPCTSTR)cstrItem2);dfResult=dfItem1+dfItem2; /加法加法_gcvt(df
59、Result,10,cBuffer); /将结果转换成字符串存储在将结果转换成字符串存储在cBufferm_Result_Edit=(LPCTSTR)cBuffer; /cBuffer值显示在结果编辑框中值显示在结果编辑框中UpdateData(FALSE); /将窗口中的内容更新将窗口中的内容更新方法一方法一第第9章章 基本控件使用基本控件使用(一一) 本例中,因为本例中,因为“+”菜单项的程序代码和菜单项的程序代码和“+”按钮的程按钮的程序代码完全相同,所以可以简化序代码完全相同,所以可以简化OnAddMenu()函数的函数的定义,此时函数的内容为:定义,此时函数的内容为:void CMy
60、Dlg:OnAddMenu() / TODO: Add your control notification handler code hereOnAddButton(); /直接调用定义好的函数,执行加法运算直接调用定义好的函数,执行加法运算方法二方法二思考思考:还有更简单的方法吗?还有更简单的方法吗?第第9章章 基本控件使用基本控件使用(一一) 用与上述类似的方法为用与上述类似的方法为Help菜单的菜单的About菜单项连接菜单项连接以下代码:以下代码:void CMyDlg:OnAboutMenu() / TODO: Add your control notification handler code hereMessageBox(“This i
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 【同步辅导】2021高中数学北师大版必修四导学案:《任意角的正弦函数、余弦函数的定义与周期性》
- 征收土地补偿标准2022年
- 甘肃省平凉市庄浪县2024-2025学年高一上学期第二学段考数学试题(含答案)
- 【备课参考】2020年新人教版高中地理必修1:课堂实录2.2《气压带和风带》
- 安徽省滁州市来安县部分学校2024-2025学年第一学期八年级语文期末试卷(含答案)
- 2024-2025学年湖南省岳阳市高中教学质量监测试卷高一数学试题(含解析)
- 《浅谈当下护士意识》课件
- 《金版教程》2022届高考生物一轮总复习阶段示范性金考卷1-
- 【名师一号】2020-2021学年高中地理中图版必修三-双基限时练(九)
- 2022届高考语文第一轮复习-第3部分论述类文本阅读常见题型(复习课)
- 2023-2024学年安徽省安庆市高一上学期期末联考生物试题(解析版)
- 学术不端行为治理研究
- 广东省广州市海珠区2023-2024学年九年级上学期期末物理试题(含答案)
- 企业文化、战略与电力能源知识参考题库练习卷含答案(一)
- 福建南平武夷高新技术产业控股集团有限公司招聘笔试冲刺题2024
- 2024年设备维修部管理制度(6篇)
- 胃镜超声内镜护理配合
- 精神科护理工作计划例文
- 2024山地买卖合同模板
- 河北省承德市2023-2024学年高一上学期期末物理试卷(含答案)
- 【初中化学】二氧化碳的实验室制取教学课件-2024-2025学年九年级化学人教版上册
评论
0/150
提交评论