5792|18

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

在一个程序里面,不能在主窗体里面给弹出的各个子窗体依次发关闭消息,叫他们自己关闭自己? [复制链接]

在一个程序里面,不能在主窗体里面给弹出的各个子窗体依次发关闭消息,叫他们自己关闭自己?

最新回复

试了一下,只弹出一个对话框也许好关闭,当弹出多级对话框时(对话框再弹出了对话框)就难办了-----每次到定时时间只能关闭一个对话框,定时时间到不能循环把所有弹出的对话框关闭。真想不明白!!!  详情 回复 发表于 2009-5-7 12:08
点赞 关注

回复
举报

67

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
我的代码是这样的



  1. HWND   hMainWnd,hOtherDlgWnd;

  2. hMainWnd = ::FindWindow(NULL, "AP_Main");  //主窗体


  3. do
  4. {

  5.   hOtherDlgWnd = ::GetForegroundWindow();

  6.   if(hOtherDlgWnd!=hMainWnd)
  7.   {
  8.           ::SendMessage(hOtherDlgWnd,WM_CLOSE,NULL,NULL);

  9.   }


  10.    Sleep(50);   //延时一段时间!!!

  11.   

  12. }while(hOtherDlgWnd!=hMainWnd);


复制代码
 
 

回复

77

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
各个子窗体接到WM-CLOSE消息就调用关闭自己的函数,但子窗体没有反应啊!想不明白!!!
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

4
 
确认找到的句柄没问题么?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

5
 
引用 3 楼 ultrapro 的回复:
确认找到的句柄没问题么?


DEBUG过,句柄没问题。顶层窗体也可以收到发过来的消息,就是没反应,觉得就不理会收到的消息,然后AP也死掉了。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

6
 


  1. CSetDlg*  dlg=new   CSetDlg( );
  2.      dlg->DoModal( );

  3.      delete dlg;
  4.       dlg=NULL;


复制代码


我这样创建的对话框应该是模态的对话框,应该用ENDDIALOG( )函数来关闭而不是DESTROY( )函数。所以是不是不应该处理WM--DESTROY消息?
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
如果你的这段代码是和顶层窗体的代码处于同一线程,就是会没响应的,因为被这段代码阻塞了.
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 zjh824 的回复:
如果你的这段代码是和顶层窗体的代码处于同一线程,就是会没响应的,因为被这段代码阻塞了.


是同一线程,就一个线程,主线程。但用POSTMESSAGE( )发消息,顶层窗体连消息都收不到。
 
 
 

回复

65

帖子

0

TA的资源

一粒金砂(初级)

9
 
顶起来一下
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

10
 
就是获取其他窗口句柄,然后发送wm_close消息就成
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

11
 
引用 9 楼 chxy85 的回复:
就是获取其他窗口句柄,然后发送wm_close消息就成


这样试了就是不行,所以在这里问大家。
 
 
 

回复

96

帖子

0

TA的资源

一粒金砂(初级)

12
 
我是在定时器里面这样做的。时间到,查有没其它对话框弹出,有就发消息给他们,叫他们自己关闭自己。
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

13
 

  1.         HWND   hMainWnd,hOtherDlgWnd;
  2.        
  3.         hMainWnd = ::FindWindow(NULL, "srthg");  //主窗体
  4.        
  5.                 while(1)
  6.                 {
  7.                 Sleep(1000);   //延时一段时间!!!
  8.                         hOtherDlgWnd = ::GetForegroundWindow();
  9.                        
  10.                        
  11.                         if(hOtherDlgWnd!=hMainWnd)
  12.                         {
  13.                                 ::PostMessage(hOtherDlgWnd,WM_CLOSE,NULL,NULL);
  14.                                
  15.                         }
  16.                 }
复制代码


这样就OK了,不知为什么
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

14
 
引用 12 楼 chxy85 的回复:
C/C++ code
    HWND   hMainWnd,hOtherDlgWnd;
   
    hMainWnd = ::FindWindow(NULL, "srthg");  //主窗体
   
        while(1)
        {
        Sleep(1000);   //延时一段时间!!!
            hOtherDlgWnd = ::GetForegroundWindow();
            
            
            if(hOtherDlgWnd!=hMainWnd)
            {
                ::PostMessage(hOtherDlgWnd,WM_CLOSE,NULL,NULL);
         …


我试一下
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

15
 
试了不行啊,你弹出的对话框是什么模式的?用POSTMESSAGE( )函数,对话框压根连关闭的消息都收不到的。
 
 
 

回复

60

帖子

0

TA的资源

一粒金砂(初级)

16
 
我放到定时器里能用,模式对话框能关掉
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

17
 
引用 15 楼 chxy85 的回复:
我放到定时器里能用,模式对话框能关掉


我试了怎么不行啊!怪怪!你的模式对话框是怎么响应WM—CLOSE消息的?你是在什么平台下试的?我在CE6。0下试了不行。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

18
 
引用 15 楼 chxy85 的回复:
我放到定时器里能用,模式对话框能关掉


我试了怎么不行啊!怪怪!你的模式对话框是怎么响应WM—CLOSE消息的?你是在什么平台下试的?我在CE6。0下试了不行。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

19
 
试了一下,只弹出一个对话框也许好关闭,当弹出多级对话框时(对话框再弹出了对话框)就难办了-----每次到定时时间只能关闭一个对话框,定时时间到不能循环把所有弹出的对话框关闭。真想不明白!!!
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表