关于获取对话框句柄的问题

super_chris 2010-02-17 09:20:29
void CVVTalkDlg::OnBtnChat()
{
// TODO: Add your control notification handler code here
CChatDlg chatDlg;
m_hChatDlg = chatDlg.m_hWnd;
chatDlg.DoModal();
}

我想在上个函数中将动态创建的CChatDlg对话框chatDlg的句柄保存在CVVTalkDlg::m_hChatDlg中,以便以后给那个窗口发消息。
::PostMessage(m_hChatDlg,WM_RECVDATA_1,0,lParam);

可是利用这个句柄却发不到那个对话框,调试发现该句柄一直是0,请问为什么?
...全文
858 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
super_chris 2010-02-17
  • 打赏
  • 举报
回复
引用 18 楼 yhp1888 的回复:
不过,我做这样的,是用非模式对话框来实现

哦,好像确实非模比较好
yhp1888 2010-02-17
  • 打赏
  • 举报
回复
不过,我做这样的,是用非模式对话框来实现
super_chris 2010-02-17
  • 打赏
  • 举报
回复
引用 16 楼 yhp1888 的回复:
在CChatDlg的内部,如
void CChatDlg::oninit...
{
m_hChatDlg = this;
当然,m_hChatDlg又要成为全局
}

哦,那我把它弄成theApp的成员算了,谢啦,结贴~
yhp1888 2010-02-17
  • 打赏
  • 举报
回复
在CChatDlg的内部,如
void CChatDlg::oninit...
{
m_hChatDlg = this;
当然,m_hChatDlg又要成为全局
}
super_chris 2010-02-17
  • 打赏
  • 举报
回复
恩,意思明白~~~~~~~~~~~~~``
yhp1888 2010-02-17
  • 打赏
  • 举报
回复
老错,是这样
void CVVTalkDlg::OnBtnChat()
{
// TODO: Add your control notification handler code here
CChatDlg chatDlg; // chatDlg.m_hWnd = 0
m_hChatDlg = chatDlg.m_hWnd;// 所以m_hChatDlg 也=0
chatDlg.DoModal(); // 这句以后才有句柄
// 但这以后chatDlg已退出
}

理解就行
super_chris 2010-02-17
  • 打赏
  • 举报
回复
谢谢,你刚才说的内部取得句柄是什么意思啊?
yhp1888 2010-02-17
  • 打赏
  • 举报
回复
我上面的写错了,是这样
void CVVTalkDlg::OnBtnChat()
{
// TODO: Add your control notification handler code here
CChatDlg chatDlg; // chatDlg = 0
m_hChatDlg = chatDlg.m_hWnd;// 所以m_hChatDlg 也=0
chatDlg.DoModal(); // 这句以后才有句柄
// 但这以后chatDlg已退出
}
yhp1888 2010-02-17
  • 打赏
  • 举报
回复
引用 8 楼 super_chris 的回复:
是说DoModal()之前不产生对话框实体,也就没有句柄值?
如果在DoModal()之后就已经没有对话框实体了。
是这样?
谢谢


是的
super_chris 2010-02-17
  • 打赏
  • 举报
回复
引用 7 楼 yhp1888 的回复:
你可以在chatDlg内部得到句柄,再m_hChatDlg = 句柄

不太明白,这个m_hChatDlg是另一个对话框类的成员
内部是什么意思?
yhp1888 2010-02-17
  • 打赏
  • 举报
回复
void CVVTalkDlg::OnBtnChat()
{
// TODO: Add your control notification handler code here
CChatDlg chatDlg; // chatDlg = 0
m_hChatDlg = chatDlg.m_hWnd;// 所以chatDlg.m_hWnd 也=0
chatDlg.DoModal(); // 这句以后才有句柄
// 但这以后chatDlg已退出
}
super_chris 2010-02-17
  • 打赏
  • 举报
回复
引用 6 楼 yhp1888 的回复:
在chatDlg.DoModal();
没有运行时,m_hChatDlg = chatDlg.m_hWnd;得到的是0

是说DoModal()之前不产生对话框实体,也就没有句柄值?
如果在DoModal()之后就已经没有对话框实体了。
是这样?
谢谢
yhp1888 2010-02-17
  • 打赏
  • 举报
回复
你可以在chatDlg内部得到句柄,再m_hChatDlg = 句柄
yhp1888 2010-02-17
  • 打赏
  • 举报
回复
在chatDlg.DoModal();
没有运行时,m_hChatDlg = chatDlg.m_hWnd;得到的是0
super_chris 2010-02-17
  • 打赏
  • 举报
回复
引用 4 楼 yhp1888 的回复:
用下面方法创建的对话框是模式对话框
CChatDlg chatDlg;
chatDlg.DoModal();

chatDlg退出后就没有了 ,该句柄肯定是0,而且又必需退出,因为是模式对话框

要实现楼主的意思,要创建非模式对话框

模态对话框不能接受消息?
yhp1888 2010-02-17
  • 打赏
  • 举报
回复
用下面方法创建的对话框是模式对话框
CChatDlg chatDlg;
chatDlg.DoModal();

chatDlg退出后就没有了 ,该句柄肯定是0,而且又必需退出,因为是模式对话框

要实现楼主的意思,要创建非模式对话框
super_chris 2010-02-17
  • 打赏
  • 举报
回复
引用 1 楼 yhp1888 的回复:
用下面方法创建的对话框是模式对话框
CChatDlg chatDlg;
chatDlg.DoModal();

退出后就没有了

要实现楼主的意思,要创建非模式对话框

恩,我知道,我就是想要这个模态对话框的句柄,我有一个线程函数负责接收消息,这个线程函数需要想这个对话框发消息,发的时候那个对话框还在,没有关闭,可以实现吗?
swlilike 2010-02-17
  • 打赏
  • 举报
回复
过年了 人好少啊 过年了 人好少啊
yhp1888 2010-02-17
  • 打赏
  • 举报
回复
用下面方法创建的对话框是模式对话框
CChatDlg chatDlg;
chatDlg.DoModal();

退出后就没有了

要实现楼主的意思,要创建非模式对话框

16,471

社区成员

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

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

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