非模式对话框的使用

hanphy 2000-09-11 08:26:00

问题1:非模式对话框的信息反馈(45分)

非模式对话框的信息我是这样反馈的:
(在点击了某按钮后)
void C###Dlg::OnXXXButton()
{
……
CWnd* pWnd=GetParent();
if(pWnd){
……
wParam=
pWnd->SendMessage(ID_MYMSG,wParam);
}
}

在父窗口的消息映射中加了 ON_MESSAGE(ID_MYMSG, OnFunc) //#define ID_MYMSG WM_USER+1
同时,父窗口定义了OnFunc()函数:
void C###View::OnFunc(WPARAM w, LPARAM l)
{
……
}

但我跟踪时发现,发送了ID_MYMSG消息后OnFunc()函数并没有执行到,这是为什么?

问题2:只能被用一次吗?(45分)

我使用的步骤:
1. 在父窗口类中添加一个非模式对话框指针;
2. 在父窗口构造函数中用new为对话框指针申请空间;
3. 在父窗口析构函数中delete;
4. 在父窗口某一函数中显示非模式对话框:
if(!m_pNonModDlg->GetSafeHwnd())
{
m_pNonModDlg->Create(IDD_NONMODEDLG);
}
但为什么该非模式对话框只能显示一次, 再一次执行上面程序时,GetSafeHwnd()函数返回0 ?
...全文
266 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Holly 2000-09-14
  • 打赏
  • 举报
回复
你的m_pNonModDlg->Create(IDD_NONMODEDLG);
可以指定Parent Window的:
m_pNonModDlg->Create(IDD_NONMODEDLG, this);
如果你没有在CDialog::Create(...)中指定pParent,会有:
CDialog::Create(...)
{
...
if (pParentWnd == NULL)
pParentWnd = AfxGetMainWnd();
...
}
这样的语句调用!
坎坷的菜贩 2000-09-14
  • 打赏
  • 举报
回复
基于文档/视图的主窗口均是CMainFrame对象,需要在CView内响应的消息应该这样发送:CMainFrame *pwnd = (CMainFrame *)GetParent();
pwnd->GetActiveView()->SendMessage(...)
hanphy 2000-09-14
  • 打赏
  • 举报
回复
尊敬的Holly:
谢谢你对我的问题的关注。根据你的提示,我跟踪运行后发现,非模式对话框的父窗口是程序的竟然是框架类(CMainFrame)。不管在new时带不带this参数,这让我很纳闷。请你解答。这跟RUNTIME_CLASS()有关系吗?
Holly 2000-09-11
  • 打赏
  • 举报
回复
1.需要确认你的Parnet Window是View吗?你发送消息的窗口是View吗?
建议你在跟踪时查看一下pWnd的RuntimeClass类型和指针地址指向的是否是C???View!

注:使用自定义消息时,消息ID的范围应当注意,WM_USER+1是不安全的,我已经遇到多次自定义消息引起的程序崩溃,曾经深度的跟踪一次发现似乎是MFC在自定义消息上有BUG,有时会将函数的调用堆栈破坏!


2.听起来逻辑基本没错,但:
if(!m_pNonModDlg->GetSafeHwnd())
{
...
}
这个判断有问题,应当用:
if (!IsWindow(m_pNonModDlg->GetSafeHwnd()))
{
...
}
当第一次的窗口关闭时,句柄会销毁但并不置空,你的判断会认为句柄存在,而不执行下面的语句!

16,466

社区成员

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

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

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