MFC 两个对话框 数据传递问题

灯火下的行人 2014-06-05 06:58:13
大家好,我又来提问题了。

最近在做一个基于对话框的项目,要求:
1、在主对话框中选择条件,点击查询,然后弹出一个对话框。
2、弹出对话框中显示查询的内容。

其中本地有数据库。
主对话框如下
弹出对话框:

效果是:在选择年龄(一个或多个)后,在弹出对话框中显示本地数据库中所选年龄人员的所有信息。。
(项目要保密,所以修改了一下各列名称,希望大家给予帮助)

C++新手求助!
...全文
365 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohuh421 2014-06-09
  • 打赏
  • 举报
回复
写个成员函数传进去即可. 子对话框类增加成员和接口 void CMyChildDlg::SetCondition( BOOL *condition, int nCount ) { for(int i=0; i<nCount; ++i) { m_condtion[i] = codition[i]; //m_condtion 是CMyChildDlg成员变量 如果条件个数不定, 那可以new出来. } } 主对话框类: void CMyMainDlg::OpenQuery() { CMyChildDlg dlg; dlg.SetConditon(xxxx);//设置参数到子对话框. (注意: 这里只能设置数据, 不能涉及到界面操作,因为界面还没有创建出来) dlg.DoModal(); }
灯火下的行人 2014-06-09
  • 打赏
  • 举报
回复
引用 15 楼 MFC_USER 的回复:
[quote=引用 9 楼 lsq19871207 的回复:] [quote=引用 8 楼 u013743168 的回复:] 回复MFC_USER。你说的对我起了很大的帮助,非常感谢!! 这里我还想问一下,就是在主界面选择了两个年龄,如24,28. 怎么样在本地数据库中得出年龄为24、28的所有成员信息,然后逐个将每人的Id,姓名等插入到弹出对话框的各列中呢? 哎,问的太多了,真是不好意思,没有这方面的经历,(我知道这里需要用到游标) 希望给与帮助!小弟这里先谢了
艾玛呀! 1、首先你得会数据库操作,ODBC 或者ADO等你会哪一个?不清楚的话去找资料看看先 2、MFC的CListCtrol控件类你也得熟悉熟悉先[/quote] sql 语句啊,例如ado模型中数据的命令对象(command) 执行sql语句 select * from [数据表] where [年龄字段] = 24 or [年龄字段] = 28 然后数据集对象中就收集了上述sql语句的所有数据条目。 然后使用数据集对象 ,Cdataset ds; ds.movefirst(); while(ds.IsEnd()!=true) { // 定义好要取数据的临时变量。 CString name,ID; ds.getfiledvalue([名字的字段名],name); ds.getfiledvalue(ID的字段名],ID); //在弹出对话框上跟新对应控件。 ........... } 完成你的要求的代码是多种多样的,多多试验,暂时不会的,没有思路的可以先百度。谁都是从没经验到有经验的,不着急,慢慢来。 [/quote] 好,我之前是百度了2天,一点没思路然后发帖求助的,老是找不到自己想要的那些。 我继续做这个项目,具体的肯定可以找到答案,整体框架上想不出来我就没招了。后面有啥疑问你在多关注下。谢谢你了。 小弟在这里就不一一感谢了。谢谢大家
灯火下的行人 2014-06-09
  • 打赏
  • 举报
回复
引用 18 楼 xiaohuh421 的回复:
写个成员函数传进去即可. 子对话框类增加成员和接口 void CMyChildDlg::SetCondition( BOOL *condition, int nCount ) { for(int i=0; i<nCount; ++i) { m_condtion[i] = codition[i]; //m_condtion 是CMyChildDlg成员变量 如果条件个数不定, 那可以new出来. } } 主对话框类: void CMyMainDlg::OpenQuery() { CMyChildDlg dlg; dlg.SetConditon(xxxx);//设置参数到子对话框. (注意: 这里只能设置数据, 不能涉及到界面操作,因为界面还没有创建出来) dlg.DoModal(); }
谢谢你。最初的那个问题,我根据前面说的解决了,只是后来又碰到麻烦了,所以暂时没有结贴。问题在我的回复中都说了,您要是有空,也希望您能提供你的思路。
用户 昵称 2014-06-07
  • 打赏
  • 举报
回复
同一个程序,如果对话框只有一个,完全可以弄个全局的hwnd记住,不用动态find了,数据传递,一般用copydata void CopyData( HWND hwnd, unsigned char *dat, int length, int type ) { COPYDATASTRUCT copy0; copy0.lpData = ( unsigned char * )dat; copy0.cbData = length; copy0.dwData = type; ::SendMessage( hwnd, WM_COPYDATA, NULL, ( LPARAM )&copy0 ); }
灯火下的行人 2014-06-06
  • 打赏
  • 举报
回复
回复lsq19871207,我已经用ODBC建立好了Sql Server的连接,还有CList Control也有了解的。
信阳毛尖 2014-06-06
  • 打赏
  • 举报
回复
引用 8 楼 u013743168 的回复:
回复MFC_USER。你说的对我起了很大的帮助,非常感谢!! 这里我还想问一下,就是在主界面选择了两个年龄,如24,28. 怎么样在本地数据库中得出年龄为24、28的所有成员信息,然后逐个将每人的Id,姓名等插入到弹出对话框的各列中呢? 哎,问的太多了,真是不好意思,没有这方面的经历,(我知道这里需要用到游标) 希望给与帮助!小弟这里先谢了
艾玛呀! 1、首先你得会数据库操作,ODBC 或者ADO等你会哪一个?不清楚的话去找资料看看先 2、MFC的CListCtrol控件类你也得熟悉熟悉先
灯火下的行人 2014-06-06
  • 打赏
  • 举报
回复
回复MFC_USER。你说的对我起了很大的帮助,非常感谢!! 这里我还想问一下,就是在主界面选择了两个年龄,如24,28. 怎么样在本地数据库中得出年龄为24、28的所有成员信息,然后逐个将每人的Id,姓名等插入到弹出对话框的各列中呢? 哎,问的太多了,真是不好意思,没有这方面的经历,(我知道这里需要用到游标) 希望给与帮助!小弟这里先谢了
MFC_USER 2014-06-06
  • 打赏
  • 举报
回复
引用 9 楼 lsq19871207 的回复:
[quote=引用 8 楼 u013743168 的回复:] 回复MFC_USER。你说的对我起了很大的帮助,非常感谢!! 这里我还想问一下,就是在主界面选择了两个年龄,如24,28. 怎么样在本地数据库中得出年龄为24、28的所有成员信息,然后逐个将每人的Id,姓名等插入到弹出对话框的各列中呢? 哎,问的太多了,真是不好意思,没有这方面的经历,(我知道这里需要用到游标) 希望给与帮助!小弟这里先谢了
艾玛呀! 1、首先你得会数据库操作,ODBC 或者ADO等你会哪一个?不清楚的话去找资料看看先 2、MFC的CListCtrol控件类你也得熟悉熟悉先[/quote] sql 语句啊,例如ado模型中数据的命令对象(command) 执行sql语句 select * from [数据表] where [年龄字段] = 24 or [年龄字段] = 28 然后数据集对象中就收集了上述sql语句的所有数据条目。 然后使用数据集对象 ,Cdataset ds; ds.movefirst(); while(ds.IsEnd()!=true) { // 定义好要取数据的临时变量。 CString name,ID; ds.getfiledvalue([名字的字段名],name); ds.getfiledvalue(ID的字段名],ID); //在弹出对话框上跟新对应控件。 ........... } 完成你的要求的代码是多种多样的,多多试验,暂时不会的,没有思路的可以先百度。谁都是从没经验到有经验的,不着急,慢慢来。
sichuanwww 2014-06-06
  • 打赏
  • 举报
回复
全局变量或静态成员,
lx624909677 2014-06-06
  • 打赏
  • 举报
回复
可以用FindWindow来获得你要传输数据的窗口句柄,然后来给数据
灯火下的行人 2014-06-06
  • 打赏
  • 举报
回复
引用 13 楼 lxa520 的回复:
主对话框 获得选中的年龄, CSubDlg dlg; dlg.选中个数 = ; dlg.选中数据 = ; 子对话框 查询数据 显示数据 for (i = 0; i < 选中个数; i++) 查询数据 where age = strArr[i] and
你说的是对的,我想问下用where age == ..查到数据后,怎么将他们的姓名、ID等添加到各个列中。有些犯懵了
lxa520 2014-06-06
  • 打赏
  • 举报
回复
主对话框 获得选中的年龄, CSubDlg dlg; dlg.选中个数 = ; dlg.选中数据 = ; 子对话框 查询数据 显示数据 for (i = 0; i < 选中个数; i++) 查询数据 where age = strArr[i] and
灯火下的行人 2014-06-06
  • 打赏
  • 举报
回复
引用 11 楼 u013050589 的回复:
定义一个对话框,然后定义一个参数传递函数与查询函数,调用对话框后,再调用其参数传递函数与查询函数,这样就OK了,
搞不出来。。。。
zytu 2014-06-06
  • 打赏
  • 举报
回复
定义一个对话框,然后定义一个参数传递函数与查询函数,调用对话框后,再调用其参数传递函数与查询函数,这样就OK了,
灯火下的行人 2014-06-05
  • 打赏
  • 举报
回复
引用 4 楼 GANSUYZHY 的回复:
我做过一个类似项目,加我QQ
———————————————————— 谢谢你,没找到你的Q,和你说我的吧,32547280,加我吧 同样欢迎大家加我前来指导
HUSTYZHY 2014-06-05
  • 打赏
  • 举报
回复
我做过一个类似项目,加我QQ
灯火下的行人 2014-06-05
  • 打赏
  • 举报
回复
非常感谢你,MFC_USER 说的很详细,我现在试试,有疑问还要在来问你。 同样感谢rxguoblp。
MFC_USER 2014-06-05
  • 打赏
  • 举报
回复
1、准备工作:在主对话框(就是带复选框那个)的类中public中申明一个变量数组int a[30]用来保存选择的数据,再申明一个弹出对话框对象,例如: public: int a[30]; COutDlg od; 2、在COutDlg中申明一个public: int* p的指针。 3、在od的initial函数中写一个for循环。 if(p!=NULL) { for(int i;i<30;i++ ) { if((int)(*(p+i))!=0) { //将第i条索引对应的数据从你的表里取出来,填到弹出对话框COutDlg 的表格中。 } } UpdateData(false); } 3、在主对话框的查询按钮上建立类向导->消息映射,形成click消息处理函数。 4、在函数中做如下处理: { UpdateData(true); //........ //将住对话框所选内容按序号放到a[30]中,例如选到的放1,没选的放0. //具体实现很简单,自己想法吧。 //........ od.p=a; od.doModal(); }
rxguoblp 2014-06-05
  • 打赏
  • 举报
回复
声明一个全局变量(似乎应该是struct)用于保存查询结果——>“查询按钮响应函数”中检索数据库并把检索结果赋值给struct——>“查询按钮响应函数”弹出非模态或模态对话框——>在弹出非模态或模态对话框对应类的OnPait()函数中导出struct里面的数据并显示。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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