CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

打架有用过讯雷么?它的窗口是怎样实现的?

楼主ffs(薄暮之魂)2005-04-27 20:49:46 在 VB / 基础类 提问

讯雷的窗口,resize到一定大小,就不能再小了,这样的功能如何实现?resize事件没有参数啊,请高手指点! 问题点数:30、回复次数:7Top

1 楼MmMVP(杜霖:(现在是DooDu的马甲。。))回复于 2005-04-27 21:36:13 得分 5

在resize里判断  
  假如a是最小数值  
  if   me.heighr<a,then   me.height=a  
  width同理Top

2 楼ffs(薄暮之魂)回复于 2005-04-27 22:15:19 得分 0

好像是哦,我怎么没有想到,谢谢!Top

3 楼Mister(菜青虫)回复于 2005-04-28 01:43:23 得分 10

在   VB   中用子类化消息处理即可实现这种效果,粘份子类化处理的代码给你:  
   
  Public   Function   SubClass_WndMessage(ByVal   hWnd   As   Long,   ByVal   Msg   As   Long,   ByVal   wp   As   Long,   ByVal   lp   As   Long)   As   Long  
           
          If   Msg   =   WM_GETMINMAXINFO   Then  
   
                  Dim   MinMax   As   MINMAXINFO  
                   
                  CopyMemory   MinMax,   ByVal   lp,   Len(MinMax)  
                   
                  MinMax.ptMinTrackSize.X   =100   '窗口的最小宽度  
                  MinMax.ptMinTrackSize.Y   =100   '窗口的最小高度  
                  MinMax.ptMaxTrackSize.X   =200   '窗口的最大宽度  
                  MinMax.ptMaxTrackSize.Y   =200   '窗口的最大高度  
                   
                  CopyMemory   ByVal   lp,   MinMax,   Len(MinMax)  
                   
                  SubClass_WndMessage   =   1  
                  Exit   Function  
                                   
          End   If  
                   
          SubClass_WndMessage   =   CallWindowProc(Old_WndProc,   hWnd,   Msg,   wp,   lp)     '呼叫默认消息函数地址。  
                   
  End   Function  
   
  '上面是子类化的消息处理的回调函数。  
  '用   SetWindowLong   函数更改窗口为   SubClass_WndMessage   函数地址(自定义函数的地址用   AddressOf   运算符取得),该函数的返回值就是原有的消息地址,请务必保存以便在卸载窗口时恢复原有地址。    
  '需要用到的   API   和用户自定义类型、常量,用   API   浏览器生成一下。  
  '如果不明白子类化请在   Google     搜索,相关内容很多。Top

4 楼jjkk168(老加班的人--好好学习,天天吃饭)回复于 2005-04-28 01:55:58 得分 5

呵呵,打架我只用过木棍,没用过迅雷。  
   
   
  但楼主可以在Resize里面进行处理  
   
  if   me.width<什么值   then  
          me.width   =   什么值  
  end   ifTop

5 楼SupermanKing(人类)回复于 2005-04-28 03:06:30 得分 5

建议搂主研究一下Mister(菜青虫)的东西,对你有好处的。  
  你可以这样看,最大化窗口后的效果。光在Resize里处理  
  是不行的。Top

6 楼wzzwwz(皮皮鲁)回复于 2005-04-28 09:35:48 得分 5

根据   Mister(菜青虫)   的代码写的  
   
   
  '窗体代码  
  Option   Explicit  
   
  Private   Declare   Function   SetWindowLong   Lib   "user32"   Alias   "SetWindowLongA"   (ByVal   hWnd   As   Long,   ByVal   nIndex   As   Long,   ByVal   dwNewLong   As   Long)   As   Long  
  Private   Const   GWL_WNDPROC   =   (-4)  
   
  Private   Sub   Form_Load()  
          preWndProc   =   SetWindowLong(Me.hWnd,   GWL_WNDPROC,   AddressOf   NewFunc)  
  End   Sub  
   
  Private   Sub   Form_Unload(Cancel   As   Integer)  
          SetWindowLong   Me.hWnd,   GWL_WNDPROC,   preWndProc  
  End   Sub  
   
   
  '一个标准模块  
  Option   Explicit  
   
  Private   Declare   Function   CallWindowProc   Lib   "user32"   Alias   "CallWindowProcA"   (ByVal   lpPrevWndFunc   As   Long,   ByVal   hWnd   As   Long,   ByVal   msg   As   Long,   ByVal   wParam   As   Long,   ByVal   lParam   As   Long)   As   Long  
  Private   Declare   Sub   CopyMemory   Lib   "kernel32"   Alias   "RtlMoveMemory"   (Destination   As   Any,   Source   As   Any,   ByVal   Length   As   Long)  
  Private   Const   WM_GETMINMAXINFO   =   &H24  
  Private   Type   POINTAPI  
                  x   As   Long  
                  y   As   Long  
  End   Type  
  Private   Type   MINMAXINFO  
                  ptReserved   As   POINTAPI  
                  ptMaxSize   As   POINTAPI  
                  ptMaxPosition   As   POINTAPI  
                  ptMinTrackSize   As   POINTAPI  
                  ptMaxTrackSize   As   POINTAPI  
  End   Type  
   
  Public   preWndProc   As   Long  
   
  Function   NewFunc(ByVal   hWnd   As   Long,   ByVal   msg   As   Long,   ByVal   wParam   As   Long,   ByVal   lParam   As   Long)   As   Long  
          Dim   MinMax   As   MINMAXINFO  
           
          If   msg   =   WM_GETMINMAXINFO   Then  
                  MinMax.ptMaxTrackSize.x   =   500   '最大宽度,这里是象素单位,不是VB默认的Twip单位,同下  
                  MinMax.ptMaxTrackSize.y   =   500   '最小高度  
                  MinMax.ptMinTrackSize.x   =   300   '最小宽度  
                  MinMax.ptMinTrackSize.y   =   300   '最小高度  
                  CopyMemory   ByVal   lParam,   MinMax,   Len(MinMax)  
                  NewFunc   =   1  
                  Exit   Function  
          End   If  
          NewFunc   =   CallWindowProc(preWndProc,   hWnd,   msg,   wParam,   lParam)  
  End   Function  
   
   
   
  如果嫌麻烦,用   MmMVP(杜霖:main(){MmMVP!=MsMVP;while(1)   {kiss   MM;}})   的方法  
   
   
  Private   Sub   Form_Resize()  
          If   Me.Height   <   2000   Then   Me.Height   =   2000  
          If   Me.Width   <   2000   Then   Me.Width   =   2000  
  End   Sub  
   
  Top

7 楼ffs(薄暮之魂)回复于 2005-04-28 10:43:52 得分 0

谢谢大家,完全学习!Top

相关问题

  • 怎样实现关闭IE窗口实现自动logout?
  • 如何实现拖放窗口?
  • vb中如何实现窗口融合
  • 怎样实现凭证录入窗口
  • 如何用VB实现监视窗口
  • 如何实现没有Title的窗口
  • 这样的窗口怎样实现?
  • 可停泊窗口如何实现
  • -=-=-=-=-=-=-=怎样实现 , 下拉弹出窗口 ? -=-=-=-=-=-=-=
  • 如何实现窗口中拖放.

关键词

  • 讯雷
  • 实现
  • resize

得分解答快速导航

  • 帖主:ffs
  • MmMVP
  • Mister
  • jjkk168
  • SupermanKing
  • wzzwwz

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

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