VC++获取控件中的数据.doc_第1页
VC++获取控件中的数据.doc_第2页
VC++获取控件中的数据.doc_第3页
VC++获取控件中的数据.doc_第4页
VC++获取控件中的数据.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

VC6.0中控件数据的获取与设置1 (单窗体)2010-01-09 16:52VC6.0中控件数据的获取与设置一、单窗体上控件数据的获取与设置1、新建MFC窗体工程DlgDemo2、修改主对话框窗体如下图所示,并设置各控件的ID,如图1所示:图1各控件ID3、双击各按钮,编写事件代码:(1)按钮“使用控件类获得控件数据”的事件代码如下:void CDlgDemoDlg:OnBtn1()/ TODO: Add your control notification handler code hereCString str;/定义一个CString对象,用于保存文本框控件内的文本/使用GetDlgItem (控件ID)可以获得控件的CWnd类型指针/通过强制转换,将CWnd*转换成CEdit*/通过调用GetWindowText方法得到文本框的内容,并保存到str中(CEdit*)this-GetDlgItem(IDC_EDIT_TEXT1)-GetWindowText(str);/显示得到的文本:MessageBox(NULL,str,”您在文本框输入了:”,MB_OK);(2)按钮“使用控件类设置控件数据”的事件代码如下:void CDlgDemoDlg:OnBtn4()/ TODO: Add your control notification handler code here(CEdit*)this-GetDlgItem(IDC_EDIT_TEXT1)-SetWindowText(“这是使用控件类设置控件值”);注意:在进行下面(3)、(4)代码编写之前需添加与文本框关联的变量m_Str,如图2所示:(3)按钮“使用数据交换(DDX)机制获得控件数据”的事件代码如下:void CDlgDemoDlg:OnBtn2()/ TODO: Add your control notification handler code hereUpdateData();/调用UpdateData(true);true是默认值,将控件中输入的文本赋值给其相关联的变量/显示得到的文本:MessageBox(NULL,m_Str,”您在文本框输入了:”,MB_OK);(4)按钮“使用数据交换设置文本框控件的值”的事件代码如下:void CDlgDemoDlg:OnBtn3()/ TODO: Add your control notification handler code herem_Str = “这是设置后的值”;/修改与文本框控件相关联的变量的值UpdateData(false);/调用UpdateData(false)将与控件关联的变量值显示到控件上至此,我们的程序已经能存取控件值了VC6.0中控件数据的获取与设置2(多窗体)2010-01-09 19:17二、窗体之间控件数据的获取与设置上面的例子中,我们演示了如何对单窗体控件数据的获取与设置,但是,我们怎样把取出来的数据传给其他窗体呢。以下内容,将为你演示窗体之间数据的传输。(一)创建子窗体1、添加新的窗体资源在上面例子的基础上,添加一新窗体资源到工程中。添加的窗体如下图所示:2、双击新添加的对话框资源窗体,为对话框添加对话框类CChildDlg类。3、在主对话框资源中添加两按钮,添加后如下图所示:4、在子对话框实现文件(ChildDlg.cpp)和主对话框实现文件(DlgDemo.cpp)中,包含子对话框头文件(ChildDlg.h):#include “ChildDlg.h”。5、为按钮“创建模式对话框”添加事件代码:void CDlgDemoDlg:OnBtnModel()/ TODO: Add your control notification handler code hereCChildDlg dlg;dlg.DoModal();6、为按钮“创建非模态对话框”添加事件代码:void CDlgDemoDlg:OnBtnNomodel()/ TODO: Add your control notification handler code hereCChildDlg dlg;dlg.Create(IDD_DLG_CHILD,this);dlg.ShowWindow(SW_SHOW);运行程序,发现程序有小小的问题,即点击按钮“创建非模态对话框”时,对话框显示后立即消失。这是因为程序中子窗体是定义在按钮“创建非模态对话框”的事件代码内部,而非模态对话框显示后,该事件就执行完成了,在该事件内生成的窗体自然也被释放。为了解决该问题,我们在主窗体对话框类中声明一子窗体对象,相应代码如下:public:CChild m_dlgNoModel;更改按钮“创建非模态对话框”添加事件代码如下:void CDlgDemoDlg:OnBtnNomodel()/ TODO: Add your control notification handler code herem_dlgNoModel.Create(IDD_DLG_CHILD,this);m_dlgNoModel.ShowWindow(SW_SHOW);运行程序,对话框能正常显示。但是,还是有一问题,即当第二次点击“创建非模态对话框”按钮时,程序会出错。分析原因:第一次点击“创建非模态对话框”按钮时,窗体已被创建。为此,需更改“创建非模态对话框”按钮事件处理代码,如下:void CDlgDemoDlg:OnBtnNomodel()/ TODO: Add your control notification handler code here/m_IsCreated是为了标记是否是第一次点击“创建非模态对话框”按钮的标识,需要在主对话框窗体类头文件(DlgDemoDlg.h)中加入如下代码:/private: BOOL m_IsCreated;/并在主对话对话框实现文件(DlgDemoDlg.cpp)中函数CDlgDemoDlg:OnInitDialog()进行初始化:m_IsCreated = false;if(!m_IsCreated)m_dlgNoModel.Create(IDD_DLG_CHILD,this);this-m_IsCreated = TRUE;m_dlgNoModel.ShowWindow(SW_SHOW);(二)将窗体之间数据的传递1、模式窗体之间数据的传递(1)建立与子窗体对话框中的文本框关联的变量m_ChildText,用于数据交换。如下图所示:(2)更改按钮“创建模式对话框”的事件代码,如下:void CDlgDemoDlg:OnBtnModel()/ TODO: Add your control notification handler code here/取出主窗体文本框中的数据CString str;(CEdit*)this-GetDlgItem(IDC_EDIT_TEXT1)-GetWindowText(str);CChildDlg dlg;dlg.m_ChildText = str;/在子对话框显示之前,将从主对话框中取到的数据赋值到与子对话框关联的变量中dlg.DoModal();至此,已能将主窗体中文本框的数据传入到子对话框窗体中。(3)当子对话框点击“确定”按钮退出时,将子对话框中文本框中的数据取出,并传回给主对话框的文本框。更改按钮“创建模式对话框”的事件代码,如下void CDlgDemoDlg:OnBtnModel()/ TODO: Add your control notification handler code here/取出主窗体文本框中的数据CString str;(CEdit*)this-GetDlgItem(IDC_EDIT_TEXT1)-GetWindowText(str);CChildDlg dlg;dlg.m_ChildText = str;/在子对话框显示之前,将从主对话框中取到的数据赋值到与子对话框关联的变量中if(dlg.DoModal()=IDOK)this-m_Str = dlg.m_ChildText;/将子对话框文本框中的数据赋值到主对话框中:m_Str是与主对话框中文本框关联的变量,/m_ChildText是与子对话框中文本框关联的变量;UpdateData(FALSE);/调用主对话框的UpdateData(false)更新显示主对话框文本框中的数据至此,模式窗体之间已能双向传递数据了。2、非模态窗体之间的数据专递(1)将主对话框窗体的数据传到子对话框窗体:完成这一过程,只需要在子对话框窗体显示之前将主对话框窗体文本框中的数据取出,并设置到子对话框窗体文本框中即可。为此,需更改“创建非模态对话框”按钮事件处理代码,如下:void CDlgDemoDlg:OnBtnNomodel()/ TODO: Add your control notification handler code here/m_IsCreated是为了标记是否是第一次点击“创建非模态对话框”按钮的标识,需要在主对话框窗体类头文件(DlgDemoDlg.h)中加入如下代码:/private: BOOL m_IsCreated;/并在主对话对话框实现文件(DlgDemoDlg.cpp)中函数CDlgDemoDlg:OnInitDialog()进行初始化:m_IsCreated = false;if(!m_IsCreated)m_dlgNoModel.Create(IDD_DLG_CHILD,this);this-m_IsCreated = TRUE;CString str;(CEdit*)this-GetDlgItem(IDC_EDIT_TEXT1)-GetWindowText(str);/将主对话框窗体文本框中的数据取出到str中m_dlgNoModel.SetDlgItemText(IDC_CHILD_TEXT,str);/将str中的数据设置到子对话框窗体中m_dlgNoModel.ShowWindow(SW_SHOW);(2)将子窗体数据回传到主对话框窗体由于非模态对话框显示后,主对话框程序还可以继续执行,所以要回传数据到主窗体中,需在子对话框窗体类中编写回传代码,而不能像模态对话框一样,在主窗体中编写代码,即需要在子对话框窗体类中编写子对话框窗体“确定”按钮的事件代码,如下:void CChildDlg:OnOK()/ TODO: Add extra validation hereUpdateData();/调用UpdateData(true)将子窗体文本框中的值同步到与该文本框关联的变量中m_ChildText/调用AfxGetMainWnd()函数获得子窗体的父窗体,并调用父窗体的SetDlgItemText()函数将子窗体文本框中数据同步到父窗体文本框中AfxGetMainWnd()-SetDlgItemText(IDC_EDIT_TEXT1,this-m_ChildText);CDialog:OnOK();至此,多窗体控件中已能相互传递数据了VC中自定义类与窗口之间传递自定义消息的实现2010-01-13 21:201、新建MFC对话框应用程序工程SendMsgDemo2、在工程中添加CMyClass自定义类3、在CMyClass类头文件(MyClass.h)中:1)添加成员变量CWnd* m_targetWnd;/用于保存程序窗口或接收消息的窗口2)添加成员函数void SendMsg();/用于发送自定义消息的函数,该函数中封装了:SendMessage()函数进行消息的发送3)修改CMyClass类构造函数为:CMyClass(CWnd* targetWnd);4)添加自定义消息标识#define UM_MYMESSAGE (WM_USER + 100)/用户自定义消息标识5)添加自定消息结构定义:typedef struct Msg/自定义消息结构CString strName;CString strCode;Msg;4、在CMyClass类实现文件(MyClass.cpp)中:1)修改CMyClass类构造函数为:CMyClass:CMyClass(CWnd* targetWnd)this-m_targetWnd = targetWnd;2)修改CMyClass类成员函数为SendMsgvoid CMyClass:SendMsg()/发送自定义消息Msg msg;msg.strName=这是MyClass类传来的这是自定义消息;/消息打包msg.strCode= 1000;:SendMessage(this-m_targetWnd-m_hWnd,UM_MYMESSAGE,0,(LPARAM)&msg);/调用API函数发送消息给对应窗口,注意怎样传消息参数以上为自定义类的定义,其中包括了自定义消息的标识UM_MYMESSAGE,发送自定义消息的方法SendMsg(),以及自定义消息体MSG。4、添加消息映射定义:在处理消息的类(如Dlg类或者MainFrame等)头文件中(本例中为SendMsgDemoDlg.h)添加消息处理函数声明:afx_msg LRESU

温馨提示

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

最新文档

评论

0/150

提交评论