志雄阿三 2015-06-15 19:26 采纳率: 0%
浏览 3359
已采纳

MFC父窗口控制子窗口CListCtrl控件刷新的问题

目标:
父窗口单击按钮,向子窗口发送一个消息;子窗口的消息处理函数中,调用列表显示函数来刷新列表数据。

我的代码:

// 父窗口
void CDlg4::OnButtonClick()
{
CDlg43 *dlg = new CDlg43();
dlg->Create(IDD_DIALOG_43,this);
if (NULL == dlg)
{
AfxMessageBox("failed");
delete dlg;
return;
}

        dlg->SendMessage(WM_SHOWLIST);

        delete dlg;
}

// 消息响应函数
afx_msg LRESULT CDlg43::OnShowlist(WPARAM wParam, LPARAM lParam)
{
ListAll_arc();

return 0;

}

段点调试显示可以正常进入消息处理函数,也正常调用了列表刷新函数,但列表并没有被刷新。

猜测:是不是不能用create创建一个新对话框的指针?而是要获得已经创建的子窗口的指针?我是小白,虚心求大神指点!

我不知道怎么能够获取到已经创建的子窗口的指针,如果我的猜测正确的话,能不能告诉获取已经创建的子对话框的方法?

  • 写回答

6条回答 默认 最新

  • 志雄阿三 2015-06-16 00:52
    关注

    感谢大家的帮助,我的问题自己解决了。
    跟大家分享一下解决方法:

    首先来说一下我之前的方法为什么不可行:
    从代码来看,我先新建了一个子对话框指针,并用create创建了一个窗口,也就是说,即使正确调用了更新控件列表的函数,它也仅仅是更新了新创建的窗口中的列表控件,之后窗口删除。整个过程对先后的状态没有任何的改变。

    修改方法:
    既然要更改现有(在修改前已经被创建)的子窗口中的控件,就需要的到现有子窗口的对象指针。于是我想到,创建一个全局的窗口对象的指针m_pWnd, 在子窗口初始化时,把this指针赋值给m_pWnd。
    当按钮按下时,创建子窗口指针CDlgSun* pDlg = ( CdlgSun*)m_pWnd; 此时即可用pDlg调用子窗口中的更新列表函数了。

    当然这也不是最优的办法,如果有更好的办法请不吝赐教,谢谢大家!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)
编辑
预览

报告相同问题?

悬赏问题

  • ¥15 DevEco studio开发工具 真机联调找不到手机设备
  • ¥15 请教前后端分离的问题
  • ¥100 冷钱包突然失效,急寻解决方案
  • ¥15 下载honeyd时报错 configure: error: you need to instal a more recent version of libdnet
  • ¥15 距离软磁铁一定距离的磁感应强度大小怎么求
  • ¥15 霍尔传感器hmc5883l的xyz轴输出和该点的磁感应强度大小的关系是什么
  • ¥15 vscode开发micropython,import模块出现异常
  • ¥20 Excel数据自动录入表单并提交
  • ¥30 silcavo仿真,30分钟,只需要代码
  • ¥15 FastReport 怎么实现打印后马上关闭打印预览窗口