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

如何让vb程序最小化时,只出现在系统栏。或者最好可以设置想在任务栏出现就出现。

楼主lang11zi(微软菜虫)2003-12-03 16:50:25 在 VB / 基础类 提问

如何让vb程序最小化时,只出现在系统栏。或者最好可以设置想在任务栏出现就出现。想只在任务栏出现,或者两者都出现。象winnamp一样 问题点数:20、回复次数:11Top

1 楼SoHo_Andy(冰)回复于 2003-12-03 17:02:36 得分 2

Me.WindowState   =   1   '参数         0   --正常   1   --最小化   2   --最大化  
  Private   Sub   Form_Resize()  
          If   Me.WindowState   =   1   Then    
                  '调用系统托盘程序  
          end   if  
  End   Sub  
  点关闭按钮时  
  Private   Sub   Form_QueryUnload(Cancel   As   Integer,   UnloadMode   As   Integer)  
          If   UnloadMode   =   0   Then  
                Cancel   =   True  
                '调用系统托盘程序  
          End   If  
  End   Sub  
   
  系统托盘程序基于API   shell_notifyicon  
   
  Top

2 楼eports(飘零风)回复于 2003-12-03 17:13:33 得分 2

如果你有VB安装盘,最简单的方法是在安装盘下寻找一个叫做systray的目录,其中的源程序可以直接编译成systray.ocx,你在你的程序中使用这个控件就可以方便的完成系统托盘程序。真的非常方便!而且,只要你愿意,你还可以扩充这个控件的功能,因为代码都在里边了。Top

3 楼lang11zi(微软菜虫)回复于 2003-12-03 17:14:15 得分 0

系统托盘程序基于API   shell_notifyicon  
   
  怎么做。代码。搞定结贴Top

4 楼lang11zi(微软菜虫)回复于 2003-12-03 17:16:15 得分 0

systray在哪个目录下?Top

5 楼SoHo_Andy(冰)回复于 2003-12-03 17:21:31 得分 2

模块中  
  Option   Explicit  
  Type   NOTIFYICONDATA  
            cbSize   As   Long  
            hwnd   As   Long  
            uID   As   Long  
            uFlags   As   Long  
            uCallbackMessage   As   Long  
            hIcon   As   Long  
            szTip   As   String   *   64  
  End   Type  
          Public   a   As   Long  
          '以下为   Shell_NotifyIcon将用到的常量  
          Public   Const   NIF_ICON   =   &H2  
          Public   Const   NIF_MESSAGE   =   &H1  
          Public   Const   NIF_TIP   =   &H4  
          Public   Const   NIM_ADD   =   &H0  
          Public   Const   NIM_DELETE   =   &H2  
          Public   Const   NIM_MODIFY   =   &H1  
          'Shell_NotifyIcon的函数声明  
  Declare   Function   Shell_NotifyIcon   Lib   "shell32.dll"   Alias   "Shell_NotifyIconA"   _  
          (ByVal   dwMessage   As   Long,   lpData   As   NOTIFYICONDATA)   As   Long  
          '处理消息将用到的结构、常量、API声明  
  Type   POINTAPI  
            x   As   Long  
            y   As   Long  
  End   Type  
  Type   Msg  
            hwnd   As   Long  
            message   As   Long  
            wParam   As   Long  
            lParam   As   Long  
            time   As   Long  
            pt   As   POINTAPI  
  End   Type  
          Public   Const   WM_USER   =   &H400  
          Public   Const   WM_RBUTTONDOWN   =   &H204  
          Public   Const   WM_LBUTTONDOWN   =   &H201  
          Public   Const   GWL_WNDPROC   =   -4  
          Public   trayflag   As   Boolean  
          Global   lpPrevWndProc   As   Long  
          Global   gHW   As   Long  
  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  
  Declare   Function   SetWindowLong   Lib   "user32"   Alias   "SetWindowLongA"   (ByVal   hwnd   As   Long,   ByVal   nIndex   As   Long,   ByVal   dwNewLong   As   Long)   As   Long  
   
          '以下过程为消息循环处理  
   
  Function   WindowProc(ByVal   hw   As   Long,   ByVal   uMsg   As   Long,   ByVal   wParam   As   Long,   ByVal   lParam   As   Long)   As   Long  
          If   hw   =   Form1.hwnd   And   uMsg   =   WM_USER   +   100   Then   '检测到鼠标点动托盘图标  
                  Select   Case   lParam  
                        Case   WM_RBUTTONDOWN   '鼠标右键按下  
                                Form1.PopupMenu   Form1.traymnu   '弹出菜单  
                        Case   WM_LBUTTONDOWN   '鼠标左键按下  
                                Form1.PopupMenu   Form1.mnutray2   '弹出菜单  
                        Case   Else  
                  End   Select  
          Else   '调用缺省窗口指针  
  '                         WindowProc   =   CallWindowProc(lpPrevWndProc,   hw,   uMsg,   wParam,   lParam)  
          End   If  
          WindowProc   =   CallWindowProc(lpPrevWndProc,   hw,   uMsg,   wParam,   lParam)  
  End   Function  
   
   
  窗体中  
  Option   Explicit  
  Dim   MyNot   As   NOTIFYICONDATA   '定义一个托盘结构  
  Private   Sub   Command1_Click()   '鼠标按下删除按钮  
  Dim   hh  
          With   MyNot  
                  .hIcon   =   Form1.Icon   '托盘图标指针  
                  .hwnd   =   Form1.hwnd   '窗体指针  
                  .szTip   =   ""   '弹出提示字符串  
                  .uCallbackMessage   =   WM_USER   +   100   '对应程序定义的消息  
                  .uFlags   =   NIF_ICON   Or   NIF_TIP   Or   NIF_MESSAGE   '标志  
                  .uID   =   1   '图标识别符  
                  .cbSize   =   Len(MyNot)   '计算该结构所占字节数  
          End   With  
          hh   =   Shell_NotifyIcon(NIM_DELETE,   MyNot)   '删除该图标  
          trayflag   =   False   '图标删除后trayflag为假  
  End   Sub  
  Private   Sub   Command2_Click()   '按下创建按钮  
          Dim   hh   As   Long  
          With   MyNot  
                  .hIcon   =   Form1.Icon  
                  .hwnd   =   Form1.hwnd  
                  .szTip   =   "托盘图标"   &   Chr(&H0)  
                  .uCallbackMessage   =   WM_USER   +   100  
                  .uFlags   =   NIF_ICON   Or   NIF_TIP   Or   NIF_MESSAGE  
                  .uID   =   1  
                  .cbSize   =   Len(MyNot)  
          End   With  
          hh   =   Shell_NotifyIcon(NIM_ADD,   MyNot)   '添加一个托盘图标  
          trayflag   =   True   '图标添加后trayflag为真  
  End   Sub  
  Private   Sub   Command3_Click()   '修改托盘图标  
          Dim   hh   As   Long  
          Dim   P  
          Set   P   =   LoadPicture("c:\bike.ico")   '导入一个新图标  
          With   MyNot  
                  .hIcon   =   P   '将托盘图标改为新图标  
                  .hwnd   =   Form1.hwnd  
                  .szTip   =   "桥梁图标"   &   Chr(&H0)   '更改提示信息  
                  .uCallbackMessage   =   WM_USER   +   100  
                  .uFlags   =   NIF_ICON   Or   NIF_TIP   Or   NIF_MESSAGE  
                  .uID   =   1  
                  .cbSize   =   Len(MyNot)  
          End   With  
          hh   =   Shell_NotifyIcon(NIM_MODIFY,   MyNot)   '修改托盘的某些特征  
  End   Sub  
  Private   Sub   Command4_Click()   'END按钮被按下  
            quit   '调用退出函数Quit  
  End   Sub  
   
  Private   Sub   Command5_Click()  
  On   Error   GoTo   err  
            gHW   =   Me.hwnd   '取得本窗体指针  
          '下一句调用钩子函数,将自制消息处理函数钩入Windows的消息循环  
            hook  
            Exit   Sub  
  err:  
  MsgBox   err.Description,   vbOKOnly,   App.Title  
  End   Sub  
   
  Public   Sub   hook()  
          '利用AddressOf取得消息处理函数WindowProc的指针,并将其传给SetWindowLong  
          'lpPrevWndProc用来存储原窗口的指针  
            lpPrevWndProc   =   SetWindowLong(gHW,   GWL_WNDPROC,   AddressOf   WindowProc)  
  End   Sub  
  Public   Sub   Unhook()  
          '本子程序用原窗口的指针替换WindowProc函数的指针,即关闭子类、退出消息循环  
            Dim   temp   As   Long  
            temp   =   SetWindowLong(gHW,   GWL_WNDPROC,   lpPrevWndProc)  
  End   Sub  
  Private   Sub   mnuhideForm_Click()   '点中弹出菜单的‘隐藏’功能  
            Form1.Hide   '将窗体隐藏  
  End   Sub  
  Private   Sub   mnumaxForm_Click()   '点中弹出菜单的‘最大化’功能  
            formstatus   (2)   '窗体最大化  
  End   Sub  
  Private   Sub   mnuminForm_Click()   '点中弹出菜单的‘最小化’功能  
            formstatus   (1)   '窗体最小化  
  End   Sub  
  Private   Sub   mnunorForm_Click()   '点中弹出菜单的‘正常’功能  
            formstatus   (0)   '窗体还原到正常  
  End   Sub  
  Public   Sub   formstatus(ByVal   wstates)   '根据传递的参数变化窗体的状态  
            Form1.WindowState   =   wstates   '设置窗体的状态  
            Form1.Show   '显示窗体  
  End   Sub  
  Top

6 楼eports(飘零风)回复于 2003-12-03 17:21:52 得分 2

在VB安装盘的tools目录下吧,如果我没记错的话。  
  我这儿也有编译好的systray.ocx,如果你要的话可以给你一个。用法也非常简单。Top

7 楼NetPigLH(网猪)回复于 2003-12-03 17:23:15 得分 2

'**************************************************************  
  '                                       以下设置用于处理系统托盘中的图标  
  '**************************************************************  
  Public   Declare   Function   Shell_NotifyIcon   Lib   "shell32"   Alias   "Shell_NotifyIconA"   (   _  
          ByVal   dwMessage   As   Long,   pnid   As   NOTIFYICONDATA)   As   Boolean  
           
  '声明一些用到的API常量  
  Public   Const   HWND_TOPMOST   =   -1  
  Public   Const   NIM_ADD   =   &H0  
  Public   Const   NIM_MODIFY   =   &H1  
  Public   Const   NIM_DELETE   =   &H2  
  Public   Const   WM_MOUSEMOVE   =   &H200  
  Public   Const   NIF_MESSAGE   =   &H1  
  Public   Const   NIF_ICON   =   &H2  
  Public   Const   NIF_TIP   =   &H4  
   
   
  '自定义类型用于处理系统托盘中的图标  
  Public   Type   NOTIFYICONDATA  
          cbSize   As   Long  
          hwnd   As   Long  
          uId   As   Long  
          uFlags   As   Long  
          ucallbackMessage   As   Long  
          hIcon   As   Long  
          szTip   As   String   *   64  
  End   Type  
   
  Public   MyIco   As   NOTIFYICONDATA                             '系统托盘中的图标的信息  
   
   
  '注:以上代码写在通用声明区或模块中。  
  '在窗体上放置一个图片框,名称为PicSet。  
  '在Form_Load中调用以下过程,就能在系统托盘中显示图片框中的图片。  
   
  '在系统托盘上的显示图标  
  Private   Sub   SubAddSysIco()  
   
          With   MyIco  
                  .cbSize   =   Len(MyIco)  
                  .hwnd   =   PicSet.hwnd  
                  .uId   =   1&  
                  .uFlags   =   NIF_ICON   Or   NIF_TIP   Or   NIF_MESSAGE  
                  .ucallbackMessage   =   WM_MOUSEMOVE  
                  .hIcon   =   PicSet.Picture  
                  .szTip   =   MODULENAME   &   Chr$(0)  
          End   With  
          Shell_NotifyIcon   NIM_ADD,   MyIco           '加载系统图标  
           
  End   Sub  
   
  Top

8 楼lang11zi(微软菜虫)回复于 2003-12-03 17:23:44 得分 0

lang11zi@sina.com  
   
  楼上帅哥发一份给我谢谢!Top

9 楼lang11zi(微软菜虫)回复于 2003-12-03 17:26:07 得分 0

NetPigLH(网猪)果然知道我要什么   ,正准备问呢Top

10 楼eports(飘零风)回复于 2003-12-03 17:36:06 得分 10

发过去了,包括控件的源代码。Top

11 楼lang11zi(微软菜虫)回复于 2003-12-03 17:36:53 得分 0

谢谢!Top

相关问题

  • 最小化到任务栏托盘
  • 怎样在vb中让程序最小化时显示在任务栏中呢?
  • 如何把程序最小化到右下角的任务栏?
  • 如何让窗体最小化到任务栏上
  • 用wsMinimized为何得不到任务栏上的最小化??
  • 程序最小化为什么不回任务栏!
  • 把窗口最小化到任务栏的代码怎么写?
  • 任务栏无法显示最小化窗口
  • 如何让第2个窗体最小化到任务栏中?
  • windows任务管理器如何最小化至任务栏?

关键词

  • 系统
  • shell
  • 代码
  • vb
  • nif
  • 最小化
  • 任务栏
  • myico
  • nim
  • 程序

得分解答快速导航

  • 帖主:lang11zi
  • SoHo_Andy
  • eports
  • SoHo_Andy
  • eports
  • NetPigLH
  • eports

相关链接

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

广告也精彩

反馈

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