CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
英特尔®游戏设计大赛100美元现金周周送 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  界面

DLL中的非模式对话框,在什么时候会出现用IsWindow判断返回False的情况.(内详)

楼主harrypotter(哈里*波特)2003-12-03 20:59:38 在 VC/MFC / 界面 提问

在一个dll中,我有一个非模式的对话框,在dll被调用的时候创建,创建完后利用  
  ShowWindow(SW_Hide)隐藏,  
  在该dll中有一个该对话框的指针m_pDlg;  
  在需要的显示对话框的时候,通过利用m_pDlg来发一个自定义的消息,使得该对话框显示出来.  
  但是我现在碰到的问题是,有的时候(没有找到规律),发现利用IsWindow(m_pDlg)来判断,发现返回false,m_pDlg对象的hwnd为0.  
  这样将导致不能发送消息了.  
   
  这个问题不是必然重现的,但是重现的几率还是比较高的.  
  请问,在哪些情况下会出现如上的问题,  
  是否与是在dll中,需要进行资源切换有关.  
   
  怎么解决,给点思路也好.  
   
  万分感谢. 问题点数:200、回复次数:18Top

1 楼harrypotter(哈里*波特)回复于 2003-12-05 21:23:34 得分 0

up  
  Top

2 楼matiao(麻条)回复于 2003-12-05 21:45:54 得分 20

试一下一开始就把HWND   Detach   出来,保存hwnd而不是g_pDlg.Top

3 楼ross33123()回复于 2003-12-06 08:07:28 得分 30

你的m_pDlg到底是什么类型?  
   
  如果是指针,IsWindow(m_pDlg)能通过编译吗?  
   
  如果是对象,那么MFC类的很多对像是不能直接拷贝的,  
  你是不是把它作为全局变量,保存了自动变量的一份拷贝呢?  
   
  由于没有看到你的源代码,所以只能猜测。Top

4 楼ablefirst(able)回复于 2003-12-06 08:24:52 得分 10

void   CMy6Dlg::OnOK()    
  {  
  //   TODO:   Add   extra   validation   here    
   
  //dlg.DoModal();  
  if   (!dlg.GetSafeHwnd())  
  dlg.Create(IDD_DIALOG1,NULL);  
   
   
  dlg.ShowWindow(SW_SHOW);  
   
  // CDialog::OnOK();  
  }  
  这是一个窗口打开另一个窗口,也是非模态的,你用GetSafeHwnd试试Top

5 楼lygfqy(风清扬)回复于 2003-12-06 09:13:47 得分 10

为什么不用IsWindowEnable()  
  IsWindowVisible()来判断呢  
  窗口句柄,生成之后应该也有返回  
  这样处理起来应该是比较容易的Top

6 楼Cline(营营[无意苦争春,贯看群芳谢])回复于 2003-12-06 09:29:30 得分 10

同意   ross33123()   !  
   
  Top

7 楼COOL099(Alan Zjou)回复于 2003-12-06 17:42:30 得分 10

CMy6Dlg::OnOK()    
  CMy6Dlg   是什麼對話框.同dlg是一個東西嗎?Top

8 楼harrypotter(哈里*波特)回复于 2003-12-06 20:28:03 得分 0

对不起,我没有把问题说清楚.是这样的.  
   
  整个程序的结构是用多文档视图,每个视图都是一个DLL.  
  其中一个DLL中的内容包括一个从CFormView派生视图类CAView,一个从CDialog派生类派生的对话框类CMyDlg.  
  当主框架要生成CAView类的时候,在CAView类的OnCreate中创建了CMyDlg的对象m_pDlg(是CAView的一个成员),然后把该对话框隐藏起来,根据用户在CAView上的控件的一些操作,show   CMyDlg和hide   CMyDlg(这个过程是通过给CMyDlg类发送自定义消息来实现的).在给CMYDlg发送自定义消息的时候,在CAView中通过IsWindow(m_pDlg->m_hWnd)来判断CMyDlg是否还有效,因为如果IsWidnwo返回失败的话,sendmessage会弹出异常的.  
   
  我现在的问题是,在某些情况下m_pDlg->m_hWnd   ==   0了,而我又没有Destroy它.  
   
  所以,我想问的是,哪些情况下能出现这种情况.  
   
  谢谢楼上的各位.  
  Top

9 楼harrypotter(哈里*波特)回复于 2003-12-06 20:31:38 得分 0

楼上的说法用其他的办法来判断,效果是一样的啊,  
  我现在的问题不是用什么判断,我是想知道,为什么会出现判断返回失败的情况,而我认为再那些情况下是不能失败的啊.  
   
  上面由于IsWindow判断返回false,在接下去的地方,就没有发送自定义消息了,最终的结果就导致了应该弹出的对话框没有弹出来.Top

10 楼xiaohyy(醉大饿极)回复于 2003-12-06 22:02:05 得分 10

hwnd为0??m_pDlg是不是没有create?Top

11 楼beyondtkl(大龙驹<*好久没来了,兄弟们好吧。*>)回复于 2003-12-06 23:14:04 得分 10

MK   先.Top

12 楼harrypotter(哈里*波特)回复于 2003-12-07 09:21:25 得分 0

xiaohyy(醉大饿极)   :  
  肯定是create了的啊,我的现象是那个代码有的时候运行正确,但有的时候运行一段时间后,就不行了,dialog不能show,我调试进去一看,问题就处在那些时候,hwnd为0了,导致没有给它发消息让它show啊.Top

13 楼ross33123()回复于 2003-12-07 09:54:14 得分 10

你创建dialog   的那段代码能不能贴出来,怀疑是那里的问题。Top

14 楼xiaohyy(醉大饿极)回复于 2003-12-07 15:52:57 得分 10

创建的时候资源切换了吗?Top

15 楼harrypotter(哈里*波特)回复于 2003-12-07 20:35:01 得分 0

:   xiaohyy(醉大饿极)   (   )    
  我也怀疑是资源切换的问题,但是我进行了资源切换,我使用的是afx那个宏.  
   
  对于资源切换,我一直有个疑惑,到底什么时候应该进行资源切换,什么时候不需要,  
  请大侠指点.  
   
  谢谢.Top

16 楼xiaohyy(醉大饿极)回复于 2003-12-07 21:02:12 得分 10

当在dll中使用自己的资源时需要切换Top

17 楼xiaohyy(醉大饿极)回复于 2003-12-07 21:04:00 得分 60

比如调用create(IDD_DIALOG)  
   
  IDD_DIALOG是dll中的资源。这个时候就需要先切换到dll中的资源Top

18 楼harrypotter(哈里*波特)回复于 2003-12-07 22:10:18 得分 0

当在dll中使用自己的资源时需要切换:  
   
  没太理解,意思是说一个dll调用另一个dll的资源时要切换嘛,  
   
  但是如果都是再有个dll内部,还需要吗,再不需要切换的时候,切换了,有什么负作用.  
   
  望指教.谢谢.  
  Top

相关问题

  • dll中显示对话框
  • dll中的对话框
  • MFC 制作的对话框如何获得文件路径(内详)急急急!!!
  • webform中有无可能实现按这种要求弹出对话框?(内详)
  • 如何在DLL里建立对话框?
  • 如何在DLL中使用对话框
  • ****有关对话框和DLL的问题?****
  • DLL中的对话框输出问题
  • dll中的对话框,马上给分
  • 在dll中怎么使用对话框?

关键词

  • dll
  • 视图
  • 消息
  • 对话框
  • pdlg
  • caview
  • 切换
  • iswindow
  • cmydlg
  • dlg

得分解答快速导航

  • 帖主:harrypotter
  • matiao
  • ross33123
  • ablefirst
  • lygfqy
  • Cline
  • COOL099
  • xiaohyy
  • beyondtkl
  • ross33123
  • xiaohyy
  • xiaohyy
  • xiaohyy

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo