CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C++ Builder >  基础类

如保做成象MSN Messenger 那样的关闭的叉叉?

楼主qdh2002(qdh2002)2004-08-04 14:56:46 在 C++ Builder / 基础类 提问

msn   messenger的关闭叉,一按,就最小化了。是如何做成的?  
   
  估计很多大哥会建议,在Form的OnCloseQuery里面或者OnClose里面做。。我以前就是把CanClose=false;   然后把程序最小化了。。。结果发现一个问题,就是windows不能关机和重新启动。   感觉象windows要重启,给大家一个信号,结果这程序死活不响应,在2000/xp/98下有同样的问题。  
   
  请问如何实现那样的功能,而又不影响别的地方? 问题点数:50、回复次数:5Top

1 楼jishiping(JSP 季世平)回复于 2004-08-04 15:27:16 得分 0

当关闭   Windows   时,系统会发送消息   WM_QUERYENDSESSION   以及   WM_ENDSESSION,你只要拦截这两个消息中的任意一个就可以了。在你的Form中,设置一个变量,就是是否允许退出。  
   
  class   TForm1   :   public   TForm  
  {  
  __published: //   IDE-managed   Components  
          void   __fastcall   FormCloseQuery(TObject   *Sender,   bool   &CanClose);  
  private: //   User   declarations  
          bool   AllowClose;  
          void   __fastcall   OnEndSession(TMessage&);  
  public: //   User   declarations  
          __fastcall   TForm1(TComponent*   Owner);  
  BEGIN_MESSAGE_MAP  
      MESSAGE_HANDLER(WM_ENDSESSION,TMessage,OnEndSession)  
  END_MESSAGE_MAP(TForm)  
  };  
   
  __fastcall   TForm1::TForm1(TComponent*   Owner)  
          :   TForm(Owner)  
  {  
          AllowClose   =   false;  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::OnEndSession(TMessage&   Msg)  
  {  
          AllowClose   =   true;  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::FormCloseQuery(TObject   *Sender,   bool   &CanClose)  
  {  
          CanClose   =   AllowClose;  
          if   (!CanClose)   Application->Minimize();  
  }Top

2 楼ahui2k(小刘飞叉)回复于 2004-08-04 18:24:23 得分 0

牛!估计肯定成了!!!!!Top

3 楼qdh2002(qdh2002)回复于 2004-08-05 10:49:08 得分 0

还是有问题啊。问题照旧,程序在运行中的情况下,系统无法关机。环境是windows2000  
   
   
  而且,我通过在FormCloseQuery中以及OnEndSession中向外输出,发觉是先调用的FormCloseQuery,再调用的OnEndSession,这样一来,肯定是无法关机的。  
   
  请问有什么解决办法???Top

4 楼jishiping(JSP 季世平)回复于 2004-08-05 11:37:18 得分 50

改为拦截   WM_QUERYENDSESSION   就可以了。  
  class   TForm1   :   public   TForm  
  {  
  __published: //   IDE-managed   Components  
          void   __fastcall   FormCloseQuery(TObject   *Sender,   bool   &CanClose);  
  private: //   User   declarations  
          bool   AllowClose;  
          void   __fastcall   OnQueryEndSession(TMessage&);  
  public: //   User   declarations  
          __fastcall   TForm1(TComponent*   Owner);  
  BEGIN_MESSAGE_MAP  
      MESSAGE_HANDLER(WM_QUERYENDSESSION,TMessage,OnQueryEndSession)  
  END_MESSAGE_MAP(TForm)  
  };  
   
  __fastcall   TForm1::TForm1(TComponent*   Owner)  
          :   TForm(Owner)  
  {  
          AllowClose   =   false;  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::OnQueryEndSession(TMessage&   Msg)  
  {  
          AllowClose   =   true;     Msg.Result   =   TRUE;  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::FormCloseQuery(TObject   *Sender,   bool   &CanClose)  
  {  
          CanClose   =   AllowClose;  
          if   (!CanClose)   Application->Minimize();  
  }Top

5 楼qdh2002(qdh2002)回复于 2004-08-05 13:29:36 得分 0

回复人:jishiping(JSP   季世平)   ()   信誉:178     2004-8-5   11:37:18   得分:   50   删除      
   
   
  //////////    
   
      结贴的时候,页面报错“参数错误”,不过我这里能看到已经给了分了。如有问题。再和我联系吧。Top

相关问题

  • MSN Messenger和Windwos Messenger
  • MSN Messenger Problem
  • MSN Messenger Friend
  • 关于 msn messenger
  • MSN Messenger的问题????????
  • MSN Messenger登录不了。
  • 无法登录到MSN Messenger
  • MSN messenger是什么东西?谢谢。。
  • 谁在用MSN Messenger,聊聊啊!
  • 关于exchange 和msn messenger Service的问题

关键词

  • allowclose
  • canclose
  • tform1
  • fastcall
  • onendsession
  • formclosequery
  • tmessage
  • onqueryendsession
  • tcomponent
  • tform

得分解答快速导航

  • 帖主:qdh2002
  • jishiping

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

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