• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >vc/mfc > 400分高手指点:非模式对话框销毁时,父窗体如何获知?

400分高手指点:非模式对话框销毁时,父窗体如何获知?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-04

佚名通过本文主要向大家介绍了模式对话框,非模式对话框,无模式对话框,mfc 非模式对话框,c#模式对话框等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 400分高手指点: 非模式对话框销毁时,父窗体如何获知?
描述:

相同问题,在基础,线程,Com版
如题:
工程类型SDI:
当然,可以重载 OnOk() OnCancel(), 然后在它们里面向父窗体发个消息.
但,当前项目基本成形,如此大的改动,量大,易误.[因有众多的这种情形]
理想状态,我在CView中,或CMainFrame中进行捕获它们发来的销毁消息,
而不改动派生的Dialog类.
怎么处理呢? 请高手指点.


解决方案1:

一般的子窗口在关闭时会发给父窗口WM_PARENTNOTIFY消息。
其中wParam==WM_DESTROY, lParam=idChildWindow;
对话框好象需要在WM_DESTROY中自已发送该消息:
::SendMessage(hParent, WM_PARENTNOTIFY, WM_DESTROY, m_id);
父窗口接收到该消息后,可做相应处理。
LRESULT CALLBACK WndProc(HWND...)
{
   switch(uMsg)
  {
    case WM_PARENTNOTIFY:
    ....
    break;
  }
}
如果用MFC,方法类似。

解决方案2:

需要用到钩子么?
直接在dialog销毁的时候发送这个消息就可以了!
楼上的解释一下:“注意不要给主窗口发送子定义消息时发送句柄,这没有用的因为等主窗口处理消息时句柄已经没有用了”是什么意思?

解决方案3:

我的邮箱是:
checky_1981@163.com
我刚刚帮你做了一个mfc例子你参考参考:
app.h
#define WM_CHILDDESTROY WM_USER+0x100
{
public:
HHOOK m_hHook;
//钩子过程 
static LRESULT CALLBACK CallWndProc(int nCode,WPARAM wParam,LPARAM lParam);
}
app.cpp:
InitInstance:
m_hHook = SetWindowsHookEx(WH_CALLWNDPROC,CallWndProc,AfxGetInstanceHandle(),GetCurrentThreadId());
ExitInstance:
if(m_hHook != NULL)
UnhookWindowsHookEx(m_hHook);
//////////////////////////////////////////////////////////////////////////
//Hook 回调函数
LRESULT CALLBACK CTestListCtrlApp::CallWndProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(nCode == HC_ACTION)
{
CWPSTRUCT * pCwp = (CWPSTRUCT*)lParam;
if(pCwp != NULL && ::IsWindow(pCwp->hwnd) )
{
if(pCwp->message == WM_DESTROY)
{
TRACE("句柄:%x\n",pCwp->hwnd);
TCHAR szText[256];
TCHAR szClassName[256];
GetWindowText(pCwp->hwnd,szText,256);
TRACE("WindowText:%s\n",szText);
GetClassName(pCwp->hwnd,szClassName,256);
TRACE("ClassName:%s\n",szClassName);
//"#32770"
if(theApp.m_pMainWnd->GetSafeHwnd() != NULL && _tcsicmp(szClassName,_T("#32770")) == 0)
{
//下面是发送消息给主窗口#32770是mfc默认的dialog类名,你可以用不同的方式和不同的条件来判断,注意不要给主窗口发送子定义消息时发送句柄,这没有用的因为等主窗口处理消息时句柄已经没有用了
SendMessage(theApp.m_pMainWnd->GetSafeHwnd(),WM_CHILDDESTROY,0,(LPARAM)szText);
}
}
}
}
return CallNextHookEx(theApp.m_hHook,nCode,wParam,lParam);
}
主窗口中:
LRESULT CTestListCtrlDlg::OnChildDestroy(WPARAM wParam,LPARAM lParam)
{
CString strTemp;
strTemp.Format(_T("窗口名为%s的窗口正在被Destroy掉 "),lParam);
MessageBox(strTemp);
//在这里做你要做的东西
return 0;
}


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 在控件中打开一个无模式对话框,为对话框上的Edit框关联控制型变量出错?!
  • 请问在非MFC程序中怎么调用系统控件?
  • OCX中使用DLL,在DLL弹出无模式对话框后,一按键盘就进死循环。
  • 急急急!WTL获取WM_POWERBROADCAST,如何获取?要求模式对话框下!
  • 非模式对话框无法进PreTranslateMessage,该怎么办?
  • OCX控件中无模式对话框无法响应Tab按键
  • 想做一个基于对话框的多线程程序,请问应该用模式对话框还是非模式对话框?
  • 模式对话框与多线程一起使用,当弹出模式对话框时,会中断另一个线程?
  • 请教:关于在辅线程中创建一个无模式对话框的问题MFC---似乎很难
  • 如何显示在DLL中的非模式对话框?

相关文章

  • 2017-06-04 activex控件怎么不能自动注册啊,按照那个打包流程,还是不行
  • 2017-06-04 在COM+中,在服务器创建了一个对象,可不可以将之传递至客户端,让客户端本地使用?
  • 2017-06-04 COM组件内部如果用_COM_SMARTPTR_TYPEDEF宏???
  • 2017-06-04 求lop5712(雨田)写基于《COM线程模型》的COM样例源码或指条明路
  • 2017-06-05 有没有什么方法,可以在调试时,跟踪到DLL的内部中去?
  • 2017-06-05 DLL传递函数指针问题!
  • 2017-06-04 我怎样才能使一个窗口具有“alwaysontop”特性?
  • 2017-06-05 word中使用ocx显示图片,出问题
  • 2017-06-04 ActiveX和DirectX指的是什么?望不吝赐教!
  • 2017-06-04 关于VB写的COM在VC中调用的问题(如何调用啊)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 关于ATL控件,自定义消息在多线程下的问题
    • 关于Filter的连接问急
    • vc2005开发com如何为一个基类为ccmdTarget的对象类,添加方法和属性
    • vc如何获取word中图片数据
    • 小妹不知,怎么在进程条中的只显示数字百分比
    • 父进程被灭了,子进程怎么灭?
    • 在控件的绘制里怎样输出文字?
    • 跨越internet访问COM+组件
    • 100分来解惑,是我孤陋寡闻了吗?有这样的串口调试助手吗?
    • 关于读取其他进程内存数据的问题

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有