MFC 子窗口发送消息更新父窗口

ybygn 2014-10-24 12:30:03
父窗口为大窗口,子窗口为非模态对话框
当点击申请控制时,会执行4画面按钮里的函数,创建4个Dialog在父窗口中间作为显示画面用
但是不生效,请问如何解决
...全文
312 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ybygn 2014-10-24
  • 打赏
  • 举报
回复
引用 8 楼 brk1985 的回复:
发送消息没响应,感觉m_pParent有可能是空指针。。。
创建了就没有销毁 子窗口A为非模态窗口,向父窗口发消息,执行函数,函数内动态创建N个子窗口B,执行完毕程序就假死,不知道那里的问题
brk1985 2014-10-24
  • 打赏
  • 举报
回复
发送消息没响应,感觉m_pParent有可能是空指针。。。
ybygn 2014-10-24
  • 打赏
  • 举报
回复
暂时解决了 先将数据保存,等子窗口关闭以后在执行就没问题了
ybygn 2014-10-24
  • 打赏
  • 举报
回复
引用 5 楼 happyparrot 的回复:
那么你直接单击4画面按钮,能正确运行吗? 调试你代码中的这些循环,确认退出条件能满足吗?很可能是循环体无法满足退出条件,导致死循环了。
直接点击4画面能正确运行,调试断点也正常跑完4画面的函数,跑完以后程序假死 无任何反应
快乐鹦鹉 2014-10-24
  • 打赏
  • 举报
回复
那么你直接单击4画面按钮,能正确运行吗? 调试你代码中的这些循环,确认退出条件能满足吗?很可能是循环体无法满足退出条件,导致死循环了。
ybygn 2014-10-24
  • 打赏
  • 举报
回复
4画面的代码执行了,但是执行完后程序假死,操作不了
ybygn 2014-10-24
  • 打赏
  • 举报
回复
引用 1 楼 happyparrot 的回复:
现在怎么回答你啊,都不知道你代码咋写的。你调试过了么?4画面的代码执行了吗?
非模态子窗口代码 在OnInitDialog()中创建 m_pTvWallUserList = new CTvWallControlDlg(this); m_pTvWallUserList->Create(); 调用 if (m_pTvWallUserList) { m_pTvWallUserList->m_stUserState = m_stUserState; m_pTvWallUserList->ShowWindow(SW_SHOW); } 之后会点击申请控制按钮发送消息 m_pParent->SendMessage(WM_TVWALL_APPLYCONTROL, (WPARAM)this, (LPARAM)szUser); 父窗口收到消息后会执行4画面按钮的函数 Composing() { int iTvWallViewNums = 0; int iWidth, iHeight;//一个窗口的尺寸 CTvWallViewDlg* pTvWallView = 0; CWnd * pViewFrame = this->GetDlgItem(IDC_STATIC_VIEW_FRAME); iTvWallViewNums = iRows * iCols; if (m_vectAllTvWallView.size() < iTvWallViewNums)//增加新窗口 { for (int i = 0; m_vectAllTvWallView.size() < iTvWallViewNums; i++)//遍历所有窗口 { pTvWallView = new CTvWallViewDlg(this); pTvWallView->Create(IDD_DIALOG_TVWALL_VIEW, pViewFrame); pTvWallView->ShowWindow(SW_SHOW); pTvWallView->m_iViewNo = i; m_vectAllTvWallView.push_back(pTvWallView); } } else if (m_vectAllTvWallView.size() > iTvWallViewNums)//减少 { while (m_vectAllTvWallView.size() > iTvWallViewNums) { pTvWallView = m_vectAllTvWallView.back();//处理最后一个 if (m_pLastClickView) { if (m_pLastClickView->GetParent() == pTvWallView)//最后点击的那个窗口 { m_pLastClickView = 0; } } //view清理子窗口 pTvWallView->CloseWindow(); pTvWallView->DestroyWindow(); delete pTvWallView; m_vectAllTvWallView.pop_back(); } } else { return 0;//没有变化直接返回 } RECT rectFrame, rectShow; pViewFrame->GetClientRect(&rectFrame); iWidth = rectFrame.right / iCols; iHeight = rectFrame.bottom / iRows; int iIndex = 0; for (int j = 0; j < iRows; j++) { for (int i = 0; i < iCols; i++) { rectShow.left = i*iWidth; rectShow.right = i*iWidth + iWidth; rectShow.top = j*iHeight; rectShow.bottom = j*iHeight + iHeight; int a = m_vectAllTvWallView.size(); CWnd *wnd = m_vectAllTvWallView[iIndex]; m_vectAllTvWallView[iIndex]->MoveWindow(&rectShow); iIndex++; } } }
ybygn 2014-10-24
  • 打赏
  • 举报
回复
引用 1 楼 happyparrot 的回复:
现在怎么回答你啊,都不知道你代码咋写的。你调试过了么?4画面的代码执行了吗?
非模态子窗口代码
快乐鹦鹉 2014-10-24
  • 打赏
  • 举报
回复
现在怎么回答你啊,都不知道你代码咋写的。你调试过了么?4画面的代码执行了吗?

15,979

社区成员

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

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