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

如果响应Win2000在系统栏上弹出的右键菜单点击"最小化所有窗口"?

楼主reonlyrun(永远向前)2003-06-03 21:40:22 在 Delphi / Windows SDK/API 提问

如题,声明Application的OnMinimize不行,自己响应WMSysCommand消息也不行 问题点数:100、回复次数:13Top

1 楼qinmaofan(采菊南山下【抵制日货】)回复于 2003-06-03 21:42:41 得分 0

WinSight32捕抓看一看Top

2 楼reonlyrun(永远向前)回复于 2003-06-03 21:53:58 得分 0

qinmaofan兄我用Spy++看了一下,基本上就是WM_SIZE、WM_SIZEING、WM_NOTIFY等等没一个合用的,有些消息我也不太常用,不知能否直接指点一下Top

3 楼reonlyrun(永远向前)回复于 2003-06-04 14:28:15 得分 0

有人能解决吗Top

4 楼lion_lh(xmanx)回复于 2003-06-04 16:38:06 得分 5

public  
          {   Public   declarations   }  
          ...  
          procedure   AppMsg(var   Msg:   TMsg;   var   Handled:   Boolean);  
          ...  
      end;  
     
  procedure   TForm1.AppMsg(var   Msg:   TMsg;   var   Handled:   Boolean);  
  begin  
      if   Msg.wParam     =   SC_MINIMIZE   then  
      begin  
          showmessage('fdfdf');  
      end;  
  end;  
   
  procedure   TForm1.FormCreate(Sender:   TObject);  
  begin  
      Application.OnMessage   :=   AppMsg;  
  end;  
   
     
  Top

5 楼reonlyrun(永远向前)回复于 2003-06-04 16:58:51 得分 0

lion_lh(xmanx)兄,这种写法在最小化窗口时都不触发呀,别说最小化所有窗口了Top

6 楼AWolfBoy(龍行江湖)回复于 2003-06-04 19:13:17 得分 5

自已做个WindowProc就可以了Top

7 楼reonlyrun(永远向前)回复于 2003-06-04 19:29:18 得分 0

AWolfBoy兄:窗口过程我也试了,在里截获WM_SYSCOMMAND想在短参为SC_SC_MINIMIZE时响应可是还是不行。  
    有没有高手写个能响应的例子给我,我可以另开贴给分!!Top

8 楼Intelement(零℃)回复于 2003-06-04 20:50:02 得分 0

procedure   TForm1.WndProc(var   Message:   TMessage);  
  var  
      WndPosFlag:   Integer;  
  begin  
      if   Message.Msg   =   WM_WINDOWPOSCHANGED   then  
      begin  
          WndPosFlag   :=   PWindowPos(Message.LParam)^.flags;  
          case   WndPosFlag   of  
              6295:   Windows.Beep(333,   500);  
          end;  
      end;  
      inherited;  
  end;  
  Top

9 楼Intelement(零℃)回复于 2003-06-04 21:12:07 得分 0

我找遍   WM_WINDOWPOSCHANGED   事件所有情况   SWP_XXX  
  都没有与上面的消息值   6295   对应的消息名称  
  更为吃惊的是在头文件中居然没有找到值为   6295($1897)的消息名称……  
  不过搂主所要的效果还是可以达到地  
   
  下面一个例子是我从网上搜来的资料  
  我试了试  
  对于主窗口真的不起作用  
  对于非主窗口只有最小化按钮时才起作用  
  单击“显示桌面”或选择“最小化所有窗口”都不会引起下面的事件  
   
  我发现有很多对应的消息都没有文档  
  比如说   WM_SIZE   吧,MSDN   中只有下面几个对应的情况。  
  SIZE_MAXHIDE  
  SIZE_MAXIMIZED  
  SIZE_MAXSHOW  
  SIZE_MINIMIZED    
  SIZE_RESTORED    
  我发现只有用鼠标或键盘选择相应的动作时才会出现这些情况。  
  但是当我们用鼠标拖动边框时,却没有与之对应的情况。  
  uMsg         WM_SIZE  
  拖动左边框改变大小       wParam   对应的值是   WM_SIZE   +   1  
  拖动右边框改变大小       wParam   对应的值是   WM_SIZE   +   2  
  拖动上边框改变大小       wParam   对应的值是   WM_SIZE   +   3  
  拖动左上边框改变大小   wParam   对应的值是   WM_SIZE   +   4  
  拖动右上边框改变大小   wParam   对应的值是   WM_SIZE   +   5  
  拖动下边框改变大小       wParam   对应的值是   WM_SIZE   +   6  
  拖动左下边框改变大小   wParam   对应的值是   WM_SIZE   +   7  
  拖动右下边框改变大小   wParam   对应的值是   WM_SIZE   +   8  
   
  不知道是没有对应的消息名称还是我没找到  
  (很可能我是孤陋寡闻了,由谁知道请告诉我,谢谢啦。)  
   
  说远了,就此打住。  
   
   
  '====================================================================  
   
  To   check   when   a   form   is   minimized   you   can   catch   the   WM_SIZE   message...  
   
    TForm1   =   class(TForm)  
    private  
        procedure   WMSize(var   Message:   TWMSize);   message   WM_SIZE;  
    end;  
   
  procedure   TForm1.WMSize(var   Message:   TWMSize);  
  begin  
    if   (Message.SizeType   =   SIZE_MINIMIZED)   then  
        ShowMessage('MINIMIZED');  
  end;  
   
  BUT...   There   is   a   bit   of   a   trick   here   in   that   if   the   form   you   minimize   is   the   project's   main   form   then   you   will   not   get   a   WM_SIZE   message,   because   you   are   really   minimizing   the   application.     This   will   result   in   ALL   of   your   forms   being   minimized.     That   means   it's   tricky   because   what   you   may   need   is   a   way   to   switch   which   is   the   main   form.  
   
  If   this   is   what   you're   after   let   me   know   and   I'll   elaborate.  
  Top

10 楼reonlyrun(永远向前)回复于 2003-06-04 23:17:28 得分 0

桂子兄真是高手,也辛苦了.可是我还想知道如何[撤消全部最小化]的消息ID,不知桂子兄是怎找到的,答复后立即给分!Top

11 楼hansion3406(阿木㊣拖鞋男)回复于 2003-06-04 23:20:59 得分 0

大富翁以前的离线有一个消息列表..  
  上面基本的消息都有的..你下一个吧..Top

12 楼Intelement(零℃)回复于 2003-06-05 08:54:35 得分 90

procedure   TForm1.WndProc(var   Message:   TMessage);  
  var  
      WndPosFlag:   Integer;  
  begin  
      if   Message.Msg   =   WM_WINDOWPOSCHANGED   then  
      begin  
          WndPosFlag   :=   PWindowPos(Message.LParam)^.flags;  
          ListBox1.Items.Add(IntToStr(WndPosFlag));  
          case   WndPosFlag   of  
              6295:   Windows.Beep(131,   500);  
              6147:   Windows.Beep(147,   500);  
          end;  
      end;  
      inherited;  
  end;  
  Top

13 楼reonlyrun(永远向前)回复于 2003-06-05 18:40:30 得分 0

桂兄高人,佩服佩服!Top

相关问题

  • 可以在标题栏右键添加最小化到托盘的功能吗?
  • 《《《《《《《《《《 点击一个窗口最小化按钮时,它的图标出现在任务栏的右下角中,右键点击会弹出菜单,如此功能,请指教???
  • 最小化任务栏的托盘程序,当我把窗口隐藏,在右下角显示图标时,再右键点击图标,弹出的菜单位置跑到左上角了????
  • 求弹出窗口最小化代码
  • 为啥有的窗体我只能在最小化时才能在状态栏显示出右键菜单,
  • 如何才能弹出最小化的窗口,或者是使弹出的窗口最小化?
  • 对话框最小化之后,在系统状态栏上单击不能激活,而点击右键菜单的还原就可以,为什么?
  • 如何最小化到系统栏,RTB
  • 最小化到任务栏托盘
  • 请问如何弹出一个闪烁的最小化窗口?

关键词

  • 消息
  • wndposflag
  • 最小化
  • 拖动
  • 响应
  • minimized
  • wm
  • appmsg
  • 边框改变大小
  • windowposchanged

得分解答快速导航

  • 帖主:reonlyrun
  • lion_lh
  • AWolfBoy
  • Intelement

相关链接

  • Delphi类图书
  • Delphi类源码下载
  • Delphi控件下载

广告也精彩

反馈

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