MFC,在一个对话框类中调用另一个对话框的控件的函数

江湖之笑 2013-04-12 01:39:59
我的代码如下:
我的主对话框:CServerDlg
主对话框有一个用户管理的按钮,点击用户管理,弹出CUserManage对话框
CUserManage对话框有ListCtrl控件,相关变量m_list。


由于主对话框有用户的信息username,userID,
且主窗体的数据时一个一个过来的,所以要在主窗体调用函数refrshdate
refrshdate()
{

CUserManage dlg;
dlg.m_list.GetItemCount()
。。。。。。。

}
但是出错了,,在dlg.m_list.GetItemCount()是没有调用成功为什么,是不m_list没有初始化说明的,谢谢大神回答


...全文
1056 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
http://blog.csdn.net/qscjob/article/details/7538120
_呆头 2014-04-13
  • 打赏
  • 举报
回复 2
CUserManage dlg; dlg.m_list.GetItemCount() 你也试试,我刚刚解决。 O(∩_∩)O刚刚也遇到了这个问题,Ok! //获取listCtr控件所在对话框的指针即可,如下: CUserManage *dlg = (CUserManage*)GetParent();// dlg.m_list.GetItemCount();
victor_woo 2013-04-14
  • 打赏
  • 举报
回复
主对话框有一个用户管理的按钮,点击用户管理,弹出CUserManage对话框
这里是在主对话框的按钮响应函数中弹出CUserManage子对话框,要看你是模态还是非模态对话框,不过两种都可以在你的主对话框类中获取一个CUserManage子对话框实例对象的引用或者指针 这个实例应该只有一个,如果被关闭,应该设为NULL(所以建议用指针),检测为NULL就不操作 在主对话框的refrshdate()函数中不能再另外定义CUserManage对象,这个对象和你已经弹出的CUserManage对话框是两个不同的UI对象
江湖之笑 2013-04-12
  • 打赏
  • 举报
回复
引用 4 楼 wxhxj0268 的回复:
将CUserManage dlg;定义到.h中去试试
不行
江湖之笑 2013-04-12
  • 打赏
  • 举报
回复
引用 5 楼 lsq19871207 的回复:
CUserManage dlg; dlg.m_list.GetItemCount() ------------------------------ 你的窗口都还没有创建出来,m_list肯定是NULL的呀 dlg.DoModal()先
哦哦,但是我的refresdata函数,作用是来一个数据想在ListCtrl中添加数据,不是在dlg.DoModal()后在调用
江湖之笑 2013-04-12
  • 打赏
  • 举报
回复
引用 6 楼 Mackz 的回复:
应该用指针把主对话框的对象传给子对话框。
也传了,但是有问题
菜牛 2013-04-12
  • 打赏
  • 举报
回复
应该用指针把主对话框的对象传给子对话框。
信阳毛尖 2013-04-12
  • 打赏
  • 举报
回复
CUserManage dlg; dlg.m_list.GetItemCount() ------------------------------ 你的窗口都还没有创建出来,m_list肯定是NULL的呀 dlg.DoModal()先
笨笨仔 2013-04-12
  • 打赏
  • 举报
回复
将CUserManage dlg;定义到.h中去试试
曾有一个人 2013-04-12
  • 打赏
  • 举报
回复
refrshdate 只调用一次嘛
江湖之笑 2013-04-12
  • 打赏
  • 举报
回复
dlg.Create()的参数是什么,杂么用
一桶姜山 2013-04-12
  • 打赏
  • 举报
回复
CUserManage dlg; dlg.m_list.GetItemCount() 这个dlg还没有创建成功,你得调用dlg.Create()先
第7章 Windows标准控件 精讲 在前一章,已经学习了在一个对话框中增加控件,用户通过对话框中的控件与应用程序进行交互的方法,在这一章,主要详细讨论不同Windows标准控件的使用特性,你将学会静态控件、按钮控件、编辑框控件、列表框控件、组合框控件、滚动条控件的使用。 7.1 Windows标准控件概述 7.1.1 Winodws 标准控件 Windows系统提供的标准控件主要包括:静态控件、按钮控件、编辑框控件、列表框控件、组合框控件等,如表7-1所示。 表7-1 windows标准控件的类型 类别 MFC控件类型 静态控件 CStatic Static Text、Group Box 按钮控件 CButton Button、Check Box、Radio Button 编辑框控件 CEdit Edit Control 组合框控件 CComboBox Combo Box 列表框控件 CListBox List Box 控件操作的学习要关注以下几个方面: 1. 控件的创建 控件的创建形式分为静态创建和动态创建两种方式。 静态创建是指在对话框模板创建控件,并设置控件的属性,这样,在调用对话框时,窗口系统会自动按预先的设置为对话框创建控件,程序员可以使用ClassWizard为该控件对话框类中创建一个控件类的对象。 动态创建是指在程序的运行中根据需要,定义一个控件类的对象,再通过窗口函数CreateWindow()或CreateWindowEx()创建控件函数ShowWindow()显示控件,正如操作一个子窗口。 2. 控件的属性设置 每个控件都有一个属性集,对于静态创建的控件,可以在对话框模板中,打开控件的属性对话框直接设置控件的初始属性。在程序设计过程中,可以通过控件类对象调用方法设置控件的属性。 3. 控件消息类别 表7-1中所列出的控件中,静态控件不发送消息,其它控件对于用户的操作都能发送消息,不同类的控件发送的消息类别是不相同的,可以使用ClassWizard为控件映射各种消息处理函数。 4. 控件对象的常用方法 MFC控件类提供丰富的方法函数,帮助程序员操作控件对象。
No.4 简单的MFC对话框演示程序 “MultiDialog” 演示如何在工程中拥有多个对话框,及如何在一个对话框调用一个对话框。 重点:1、多个对话框类的建立;2、对话框的模式(Modal)调用方法;3、Spin控件的使用。 新建一个基于对话框MFC工程, 通过菜单"Insert>>Resource"打开添加资源对话框, 在其中选择Dialog后点击New创建一个新的对话框 按Ctrl+W打开ClassWizard,系统会提示刚才创建了一个新的对话框资源,是否建立对应的类, 选择建立,然后在New Class窗口中Class Name栏输入它的名称:CSubClass1, 确定后系统会自动生成SubClass1.h和SubClass1.cpp并加入工程中,其中有已经创建好的CSubClass1的类的基本代码。 把这个对话框的Caption属性改为“难度选择”,在它上面画三个Radio“简单”、“标准”、“困难”, 并建立相关联的变量m_Option1。(要注意的是在ClassWizard中注意Class Name中应该选CSubClass1而不是之前的主对话框类) 按照相同方法建立第二个新对话框,类名“CSubClass2”,Caption为“关卡选择”。 在上面画一个Edit和一个Spin,注意先画Edit后画Spin,将Spin的Auto buddy和Set buddy integer勾上。 按Ctrl+W打开ClassWizard,为Edit建立关联变量,不过注意是int型而不是CString型, 也为Spin建立关联变量m_Spin1,注意这次是Control型变量CSpinButtonCtrl。 下面为这两个对话框添加代码。 双击“难度选择”对话框的OK按钮,建立对话框的OnOK映射。 在其中加入(在CDialog::OnOK();之前): UpdateData(TRUE); if ((m_Option1>2) ||(m_Option1<0)) { MessageBox("错误的选择!","提示",MB_OK); return; } 下面对“关卡选择”对话框添加初始化代码, 由于关卡的有效值只有1到6,因此需要在初始化时设置Spin控件的有效值范围。 按Ctrl+W打开ClassWizard,在左侧列表选择这个对话框类CSubDialog2, 在右侧列表中选择WM_INITDIALOG,点击右边的“Add Function...”按钮, 接着点击右边的“Edit Code”按钮,在其中中加入(在CDialog::OnInitDialog()那句之后,在return TRUE那句之前): m_Spin1.SetRange(1,6); m_Text1=1; m_Spin1.SetPos(1); 其中CSpinButtonCtrl::SetRange()函数的作用是设置和他关联的Spin控件的范围,两个参数分别是下界和上界。 而CSpinButtonCtrl::SetPos()是设定Spin的当前位置。 两个新的对话框都已建立完毕,下来是如何在主对话框中使用的问题。 首先,两个新对话框都有各自的类,分别在SubDialog1.h和SubDialog2.h中有定义。(类的细节则在对应的cpp中定义) 因此,主对话框想要调用这两个新对话框,需要先包含这两个头文件, 在你要使用的地方(本例是MultiDialogDlg.cpp中)文件前面加上 #include "SubDialog1.h" #include "SubDialog2.h" 然后在想要调用的地方就可以使用了。 本例中,首先为主窗口的两个Edit建立CString型关联变量m_Text1和m_Text2, 然后在两个按钮的消息映射函数中分别加入: CSubDialog1 dialog1; //定义CSubDialog1型对话框一个新对象 dialog1.DoModal(); //使用“模式”调用,显示对话框 m_Text1.Format("%d",dialog1.m_Option1); //此句在上面对话框没有关闭前不会执行到 UpdateData(FALSE); 和 CSubDialog2 dialog1; dialog1.DoModal(); m_Text2.Format("%d",dialog1.m_Text1); UpdateData(FALSE); 其中第一句均为定义对话框新实例的语句,定义一个你想要的类型的对话框。 第二句是通过调用CDialog::DoModal()方法,来显示这个对话框,并进入“模式”(Modal)状态 在“模式”状态,当子对话框没有关闭之前,调用它的父对话框不能被响应, 并且其语句执行会停留在刚才的DoModal语句上等待,直到子对话框关闭才接着执行下一个语句。 第三第四句将子对话框得到的数据(即类的成员变量)显示在父对话框的Edit上。 四句执行完后退出该函数,这时刚才定义的CSubDialog1等对话框类变量被销毁,因此创建的话框也被销毁。
相关网站 7 设置窗口最大最小 7 设置窗口标题 7 去掉主菜单 7 修改应用程序图标 7 系统只能允许一个程序运行 7 在状态栏中添加时间 8 研究调用存储过程 8 得到本机的IP地址 9 vc调用chm文件 10 最高窗口的实现 10 防止Edit框中的Password不保密 11 在同一系统中显示GB字符和BIG5字符 12 改变颜色(整个窗体的控件) 13 改变工程表头栏 13 ◆如何找开一个DiaLog的窗口◆ 13 ◆得到系统中设置的窗口颜色◆ 14 ◆如何让点下去的菜单成为V状态◆ 14 ◆如何调用WINDOWS的颜色板◆ 14 ◆如何产生一个MDI的主窗口◆ 15 ◆如何让一个文本控件显示出值◆ 15 ◆如何让一个控件显示出相应的值◆ 16 ◆在调试中怎么样MESSAGEBOX一个数字◆ 16 ◆如何控制控件的焦点◆ 16 ◆如何对析构函数中对象进行释放◆ 16 ◆如何关闭一个模态窗口◆ 17 ◆如何将一个提示的声音发到声卡上◆ 17 ◆如何得到打开exe的带的参数◆ 17 ◆如何在框架上建立一个工具条◆ 17 ◆如何生成一个主窗口下方的状态条◆ 18 ◆如何让Cscrollview类中控制其可以流动区域大小◆ 19 ◆MFC控件的一些基本控制方法◆ 19 ◆如何让一个数字型变量化为字符型变量◆ 19 ◆如何使用“拉动条”,“上下选择”◆ 19 ◆如何使用postmessage来异步触发某事件◆ 21 ◆如何使用Sendmessage来异步触发某事件◆ 22 ◆如何修改父类的相关控件属性◆ 22 ◆如何在程序中得到控件的名◆ 22 ◆如何控制菜单的事件程序◆ 22 ◆如何使用控件中的数据录入的控制属性◆ 23 ◆哪些函数是文档、视图相互处理用的◆ 23 ◆如何建立一个基于对话框一程序◆ 23 ◆如何建立一个线程◆ 24 ◆如何让窗口产生一个图标(从应用程序资源中取出)◆ 24 ◆如何得到一个edit的录入的值◆ 24 ◆如何启动TIMER事件◆ 25 ◆如何使用ctrllist控件实现表格◆ 25 ◆如何从INI文件中得到值◆ 25 ◆如何将图标文件写到窗口中◆ 26 ◆如何得到本机的IP地址◆ 26 ◆如何使用全局变量◆ 26 ◆如何让一个字符加上回车、换行◆ 26 ◆如何定义、使用结构◆ 26 ◆如何在任意程序中显示MessageBox◆ 27 ◆如何在程序判断出debug状态◆ 27 ◆当对话框中有一个滚动条是,当滚动滚动条时的消息控制函数◆ 27 ◆将一个CWnd指针转换成一个控件ID(整数)注意用GetDlgItem()函数是从一个控件ID转换成一个CWnd的指针◆ 28 ◆如果在对话框中自定义一个消息的方法,假设对话框名为CXX◆ 28 ◆消息传递◆ 29 ◆在一个函数引用另外的一个对话框◆ 29 ◆全局函数的申明问题◆ 29 ◆在应用程序中*APP.CPP中的InitInstance()的事件◆ 29 ◆给执行文件加一个图标◆ 30 ◆如何在全局函数中通过传入的窗口句柄操作窗口◆ 30 ◆如何使桌面文字背景透明?◆ 30 ◆怎样才能在VC里产生一个唯一的字符串◆ 31 ◆如何隐藏进程(在系统状态栏和进程列表里不可见)◆ 31 ◆如何得到一个确定大小的视?◆ 31 ◆如何实现点击窗口任意地方拖动窗口?◆ 32 ◆如何在启动时阻止MDI应用程序创建一个新文档?◆ 33 ◆如何在多文档MFC程序中制作独立的File|New菜单?◆ 33 ◆如何检测视是否处于分割状态?◆ 34 ◆如何使程序保持极小状态?◆ 34 ◆如何确定当前进程实例是否为唯一实例?◆ 35 ◆如何向一个文档附加多个视?◆ 35 ◆如何获得文件的图标、属性、大小、类型等参数?◆ 36 ◆如何得到鼠标下面的窗口?◆ 37 ◆设置鼠标的形状◆ 38 ◆在对话框中设置编辑EDIT的值◆ 38 1. 如何获取应用程序的实例句柄? 38 2. 如何通过代码获得应用程序主窗口的指针? 38 3. 如何在程序中获得其他程序的图标? 38 4. 如何编程结束应用程序?如何编程控制windows的重新引导? 39 5.怎样加载其他的应用程序? 39 6. 确定应用程序的路径 39 7. 获得各种目录信息 40 8. 如何自定义消息 40 9. 如何改变窗口的图标? 40 10. 如何改变窗口的 缺省风格? 40 11. 如何将窗口居中显示? 41 12. 如何让窗口和 MDI窗口一启动就最大化和最小化? 41 13. 如何使程序保持极小状态? 41 14. 如何限制窗口的 大小? 41 15. 如何使窗口不可见? 41 16. 如何使窗口始终在最前方? 41 17、如何创建一个字回绕的CEditView 42 18、通用控件的显示窗口 42 19、移动窗口 42 20、重置窗口的大小 42 21、如何单击除了窗口标题栏以外的区域使窗口移动 43 22、如何改变视窗的背景颜色 43 23、如何改变窗口标题 44 24、如何防止主框窗口在其说明中显示活动的文档名 44 25、如何获取有关窗口正在处理的当前消息的信息 45 26、如何创建一个不规则形状的窗口 45 27、如何在代码中获取工具条和状态条的指针 47 28、如何使能和禁止工具条的工具提示 47 29、如何设置工具条标题 48 30、如何创建和使用无模式对话框 48 31、如何在对话框中显示一个位图 49 32、如何改变对话或窗体视窗的背景颜色 49 33、如何获取一个对话控件的指针 50 34、如何禁止和使能控件 50 35、如何改变控件的字体 50 36、如何在OLE控件中使用OLE_COLOR数据类型 51 37、在不使用通用文件打开对话的情况下如何显示一个文件列表 51 38、为什么旋转按钮控件看起来倒转 51 39为什么旋转按钮控件不能自动地更新它下面的编辑控件 52 40、如何用位图显示下压按钮 52 41、如何一个创建三态下压按钮 52 42、如何动态创建控件 52 43、如何限制编辑框中的准许字符 53 44、如何改变控件的颜色 54 45、当向列表框中添加多个项时如何防止闪烁 55 46、如何向编辑控件中添加文本 55 47、如何访问预定义的GDI对象 55 48、如何获取GDI对象的属性信息 56 49、如何实现一个橡皮区矩形 56 50、如何更新翻转背景颜色的文本 58 51、如何创建一个具有特定点大小的字体 58 52、如何计算一个串的大小 59 53、如何显示旋转文本 59 54、如何正确显示包含标签字符的串 60 55、串太长时如何在其末尾显示一个省略号 60 56、如何快速地格式化一个CString对象 61 57、为什么即使调用EnableMenuItem菜单项后,菜单项还处于禁止状态 61 58、如何给系统菜单添加一个菜单项 61 59、如何确定顶层菜单所占据的菜单行数 62 60、在用户环境中如何确定系统显示元素的颜色 62 问:如何控制窗口框架的最大最小尺寸? 63 问:如何改变窗口框架的颜色? 63 问:如何将应用程序窗口置于屏幕正中? 64 问:VC6.0对VC5.0的兼容性? 64 问:打印和打印机的问题? 64 问:CRichEditCtrl滚动条的问题? 65 问:从数据库中读大于32k的内容? 65 问:如何获得CRichEditCtrl中字符的位置? 66 问:如何限制mdi子框架最大化时的大小? 66 问:如何切换视口而不破坏它们? 66 问:改变列表控制时发生闪烁现象? 68 问:处理列表控件可见项的问题? 68 问:产生线程的问题? 68 问:CFile使用了缓冲区吗? 69 问:DAO的密码? 69 问:如何知道CListBox什么时候滚动了? 70 问:视口的不活动性如何处理? 70 问:如何使用COleClientItem的IDispatch接口? 70 问:关于用户自定义的消息使用? 71 问:在打开一个文档时退出? 71 问:在CListCtrl控件中多选择项的删除? 71 问:工作线程的登录状态? 72 问:如何控制菜单的大小? 72 问:改变LVIS_SELECTED的状态颜色? 73 问:如何只存储文档的某一部分? 73 问:保存工具条菜单有bug吗? 73 问:Tip of the day的bug 73 问:如何让我的mfc应用程序可以在最上面? 74 问:如何增加视图中ActiveX控件的事件处理函数? 75 问:如何创建一个动态的Tree控件? 75 问:SDI程序开始时不打开文档? 75 问:List控件中整栏选择? 75 问:如何重载MRU文件? 76 问:CImageList控件中图象橙色被显示为黄色? 76 问:无法正确改变应用程序的图标? 78 问:工具条状态的问题? 78 问:在SDI应用程序中使用Active控件? 79 问:有RichEdit控件对话框无法正常显示? 79 问:DLL中的模板成员函数? 79 问:CFormView中的上下文帮助? 80 问:CArchive类的WriteObject函数问题? 80 问:RegisterWindowMessage中的BroadcastSystemMessage如何处理? 80 问:CListCtrl中选择变化时如何获得通知? 81 问:如何向ATL-COM对象传送一个数组? 81 问:如何选择CTreeCtrl中的节点文本进行编辑? 82 问:如何改变默认的光标形状? 82 问:如何用键盘滚动分割的视口? 83 问:如何在线程中处理状态条? 83 问:如何阻止WINDOWS关闭? 83 问:如何使一个按钮Disable? 83 问:怎样从MFC扩展动态链结库(DLL)中显示一个对话框? 84 问:想隐藏用户界面怎么办? 85 问:如何实现SDI与MDI的转换? 85 问:CDC中的竖排文本? 86 问:如何激活变灰的弹出菜单? 86 问:线程消息? 87 问:TreeCtrl控制的显示速度太慢? 87 怎样使窗口总是浮现在最上面? 88 改变拖放时的光标外形? 89 如何定位到最新的记录上? 90 MVC和Doc-View? 90 被禁止(Disable)的控件如何改变其文本或背景色? 90 有ODBC的查找函数吗? 91 多个MRU菜单的问题 91 校验框类问题 93 CFormView类的Fold按钮 94 视的背景色 94 隐藏控件台程序 94 修改SDI窗口标题 95 焦点问题 95 从一个OCX调用一个OCX的方法。 95 得到视 96 字符转化时间 96 二进制还是文本方式? 99 发送消息 99 怎样知道菜单运行时的状态 99 DLL编译出错 100 通用控件的显示窗口 100 如何禁止和使能控件 100 如何在OLE控件中使用OLE_COLOR数据类型 100 在不使用通用文件打开对话的情况下如何显示一个文件列表 100 为什么旋转按钮控件看起来倒转 101 为什么旋转按钮控件不能自动地更新它下面的编辑控件 101 如何动态创建控件 101 如何显示旋转文本 101 在TreeList中使用Edit功能 102 TreeList control中使用check box 103 有关属性对话框(property sheet )的几个提示 108 在MFC加入"这是什么?"的帮助提示 111 精通工具条 112 如何改变视窗的背景颜色 112 为MFC应用程序添加全屏幕显示功能 112 VC常用数据类型使用转换详解 114 用Visual C++操作INI文件 117 单文档加入背景图 119 更新窗体方法 120 更改窗口控件的能动和不能动(以按钮控件为例) 120 窗口响应键盘事件 120 密码框输入受保护 121 最高窗口的实现 122 实现窗口动态写入汉字和改变汉字颜色形状 123

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧