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

关闭窗口的问题

楼主yyqing(CYY)2003-09-03 12:56:23 在 C++ Builder / 基础类 提问

我想实现:正常使用时,用户点击窗口右上角的×时,使窗口最小化,通过菜单里的退出命令才能退出整个程序。如果程序运行时用户关闭Windows,仍然可以正常退出程序并关闭windows.  
  现在我通过设置一个变量,能使他关闭时最小化。但是程序运行时却不能正常关闭Windows!  
  请高手指点. 问题点数:100、回复次数:17Top

1 楼Wingsun(孙春阳)回复于 2003-09-03 13:02:26 得分 10

Windows退出的时候有一个消息,处理这个消息即可。Top

2 楼Libran()回复于 2003-09-03 13:16:38 得分 0

可以在Form的OnCloseQuery事件里,用参数CanClose来控制是否关闭  
  Top

3 楼yyqing(CYY)回复于 2003-09-03 13:51:33 得分 0

关键是我无法判断是用户点了右上角的×,还是Windows强令要求退出Top

4 楼pp616(坏蛋)回复于 2003-09-03 13:56:21 得分 0

嘿。上面的老大现在在用bc做工作吗?怎么来bc的版里玩了^_^Top

5 楼alenwelkin(助人~~~为乐)回复于 2003-09-03 14:02:28 得分 0

哇,这么多老大啊,楼主你可有福了,五星上将我是第一次见啊  
   
  WM_SYSCOMMAND消息中有个CM_CLOSE(好像是CM吧我记不清了)消息,截获就行了  
  或者把CanCLose设为FalseTop

6 楼COKING(天晴)回复于 2003-09-03 14:02:43 得分 0

这种问题!用一个变量就搞定!  
  在OnClick设为true;  
   
  在OnClose里判断就是了  
   
  Top

7 楼alenwelkin(助人~~~为乐)回复于 2003-09-03 14:03:54 得分 0

哦?我还没仔细看问题,如果要这样的话,可能只有通过当前Mouse下是个什么东西来判断了Top

8 楼alenwelkin(助人~~~为乐)回复于 2003-09-03 14:04:38 得分 0

同意COKING,是个好方法Top

9 楼yyqing(CYY)回复于 2003-09-03 14:27:50 得分 0

上面所说办法我都试过了,可以使窗口最小化。但是在需要关闭Windows时,程序不能正常退出。  
  请指教Top

10 楼zihan(子寒)回复于 2003-09-03 16:12:42 得分 70

//WINDOWS关机时会给每个程序发送这个消息(WM_QUERYENDSESSION,WM_ENDSESSION),你在里面写代码响应就可以了  
       
  Top

11 楼yyqing(CYY)回复于 2003-09-04 13:05:09 得分 0

zihan(子寒)   :我响应了WM_QUERYENDSESSION,在里面执行关闭程序的操作。我的程序能够退出,但是windows却不能继续关机,需要再次关机才行。就好像是WM_QUERYENDSESSION这个消息在我这里截止了一样。  
  怎样才能让windows正常关机呢?Top

12 楼soft021(VniceBoy)回复于 2003-09-07 20:58:11 得分 0

Close()Top

13 楼binbin(破坏分子)回复于 2003-09-07 23:49:05 得分 10

WM_QUERYENDSESSION消息处理后注意要返回TRUETop

14 楼Behard(我爱天安门)回复于 2003-09-08 01:31:06 得分 0

查一下   MSDN   嘛Top

15 楼Behard(我爱天安门)回复于 2003-09-08 01:33:27 得分 10

这里不是已经说得很清楚了吗?  
  WM_QUERYENDSESSION  
  The   WM_QUERYENDSESSION   message   is   sent   when   the   user   chooses   to   end   the   session   or   when   an   application   calls   the   ExitWindows   function.   If   any   application   returns   zero,   the   session   is   not   ended.   The   system   stops   sending   WM_QUERYENDSESSION   messages   as   soon   as   one   application   returns   zero.    
   
  After   processing   this   message,   the   system   sends   the   WM_ENDSESSION   message   with   the   wParam   parameter   set   to   the   results   of   the   WM_QUERYENDSESSION   message.    
   
  WM_QUERYENDSESSION    
  nSource   =   (UINT)   wParam;         //   source   of   end-session   request    
  fLogOff   =   lParam                         //   logoff   flag    
     
  Parameters  
  nSource    
  Reserved   for   future   use.    
  fLogOff    
  Value   of   lParam.   Indicates   whether   the   user   is   logging   off   or   shutting   down   the   system.   Supported   values   include:   ENDSESSION_LOGOFF.    
  Return   Values  
  If   an   application   can   terminate   conveniently,   it   should   return   TRUE;   otherwise,   it   should   return   FALSE.    
   
  Remarks  
  By   default,   the   DefWindowProc   function   returns   TRUE   for   this   message.    
   
  Windows   NT:   When   an   application   returns   TRUE   for   this   message,   it   receives   the   WM_ENDSESSION   message   and   it   is   terminated,   regardless   of   how   the   other   applications   respond   to   the   WM_QUERYENDSESSION   message.    
   
  Windows   95:   After   all   applications   return   TRUE   for   this   message,   they   receive   the   WM_ENDSESSION   and   they   are   terminated.    
   
  QuickInfo  
      Windows   NT:   Requires   version   3.1   or   later.  
      Windows:   Requires   Windows   95   or   later.  
      Windows   CE:   Unsupported.  
      Header:   Declared   in   winuser.h.Top

16 楼wumizhichui(☆无米之炊☆)回复于 2003-09-08 03:40:58 得分 0

在FormClose事件里写:  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::FormClose(TObject   *Sender,   TCloseAction   &Action)  
  {  
          Application->Minimize();  
          Action   =   caNone;  
  }  
  //---------------------------------------------------------------------------  
  void   __fastcall   TForm1::BitBtn1Click(TObject   *Sender)  
  {  
          Application->Terminate();  
  }  
   
  Top

17 楼yyqing(CYY)回复于 2003-09-08 08:23:57 得分 0

我发现是我程序中使用的一个OCX的问题,只要使用了这个OCX,就不能正常关机。  
  感谢各位。Top

相关问题

  • 关闭窗口
  • 关闭窗口
  • 关闭窗口
  • 关闭窗口
  • 关闭子窗口
  • 窗口的关闭?
  • javascript关闭窗口
  • 关闭Botton--关闭窗口(浏览器)
  • 怎么样关闭窗口?
  • 如何关闭窗口??

关键词

  • 消息
  • application
  • 用户
  • queryendsession
  • endsession
  • 关闭
  • 程序
  • 退出
  • wm
  • 关机

得分解答快速导航

  • 帖主:yyqing
  • Wingsun
  • zihan
  • binbin
  • Behard

相关链接

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

广告也精彩

反馈

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