MFC对话框--怎么获取子对话框中各个控件的默认值,求解答

qq_34282118 2019-09-24 03:30:18
由于这个问题困扰了我很长时间,所以我写详细一点,求大牛解答
厂家提供的demo, 是在主对话框中获取主窗体的各个控件上的默认值,比如一些初始化时写进去的地址什么的,设备型号等;
现在我想修改在子窗体中。就是我现在有个主窗体,在主窗体上面设置了一个按钮,点击此按钮时,可以弹出子窗体,然后在子窗体上添加厂家提供的代码。添加代码的时候就遇到一个问题;
原代码中用到一个语句:CAtPipDlg *dlg = (CAtPipDlg*) AfxGetApp()->GetMainWnd(); CAtPipDlg就是主窗体类, 通过这句话,在指针dlg中写入了很多值,其中就有我最需要的list control控件的东西,同时我也要往这里写东西;
但是我现在要在子窗体中使用,在使用上面这句话,完全获取不到子窗体各控件的默认值,而且CListCtrl 类对应的w_hWnd句柄对应的地址也是0x00000000,如果我要在子窗体中完成类似这句 CAtPipDlg *dlg = (CAtPipDlg*) AfxGetApp()->GetMainWnd(); 的功能的话,我该怎么修改,求大牛指点。
...全文
315 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Eleven 2019-09-25
  • 打赏
  • 举报
回复
你可以在子窗口某一个函数中给主窗口发送消息,将相关的数据传递给主窗口~
qq_34282118 2019-09-24
  • 打赏
  • 举报
回复
又试了一下,算是突然想到的一点想法吧,把问题解决了;
解决过程如下:
先说明 CAtPipDlg为主窗体类,CTestDlg为子窗体类;
如果你想在子窗体的线程函数中,仍然获取子窗体上各个控件的默认值,或者使用List control控件接收并显示刷新数据;
首先,在你的主窗体的头文件中,比如 CAtPipDlg.h中的CAtPipDlg中添加 CTestDlg m_testdlg;(可以为Public),
然后,我这边是通过点击一个按钮弹出子对话框的,使用的是这两句:CTestDlg dlg; dlg.DoModal();
现在不要再使用上面两句了,要使用这两句:m_testdlg.Create(IDD_TEST_DIALOG, this); m_testdlg.ShowWindow(SW_SHOW); 其中IDD_TEST_DIALOG 是你子窗体的ID(看窗体属性就知道)。
然后,在你的线程函数中,仍然使用CAtPipDlg *dlg = (CAtPipDlg*) AfxGetApp()->GetMainWnd(); 这句话,你会发现,dlg中的成员m_testdlg已经包含了子窗体上面所有的默认值,美滋滋;可能表达的不清楚;下面简单贴一点代码:

先在CAtPipDlg.h中添加:
class CAtPipDlg::public CDialog
{
/...../
public:
CTestDlg m_testdlg;
/..../

}


你点按钮弹出子窗体的函数:


在CAtPipDlg.cpp中


void CAtPipDlg::button1()
{
m_testdlg.Create(IDD_TEST_DIALOG, this);
m_testdlg.ShowWindow(SW_SHOW);//如果第二次按按钮程序崩溃的话,自己解决吧。0.0
}

在子窗体CTestDlg.cpp中,添加
void CTestDlg::ReciveThread()//或者是你需要的函数
{
CAtPipDlg *dlg = (CAtPipDlg*) AfxGetApp()->GetMainWnd();
dlg->m_testdlg;//这里就是我想要的东西了,接下来可以进行一系列的操作了,啦啦啦;
}


以上献给像我一样水平比较差的同学。
schlafenhamster 2019-09-24
  • 打赏
  • 举报
回复
弹出子窗体 后 子窗体 就是 控件的 容器 , 要 通过 子窗体 来得到 控件
qq_34282118 2019-09-24
  • 打赏
  • 举报
回复
引用 2 楼 zgl7903 的回复:
用 Create 创建(非模态) 或 DoModal (模态)
类似
CAtPipDlg *dlg = new CAtPipDlg;
dlg->DoModal();
delete dlg;

这几句代码在哪里添加?是子窗体里面 还是 主窗体里面?
zgl7903 2019-09-24
  • 打赏
  • 举报
回复
用 Create 创建(非模态) 或 DoModal (模态) 类似 CAtPipDlg *dlg = new CAtPipDlg; dlg->DoModal(); delete dlg;
qq_34282118 2019-09-24
  • 打赏
  • 举报
回复
我已经试过 GetForegroundWindow(); GetActiveWindow();都获取不到想要的结果;

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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