Samuel Learning

  • 联系
  •  
  • 管理

文章分类(203)

  • 01 ASP/HTML(6)
  • 02 Script/CSS(16)
  • 03 C/C++
  • 04 XML(4)
  • 05 微软编程(26)
  • 06 J2EE(60)
  • 09 Linux(14)
  • 10 Database(27)
  • 11 报表打印
  • 12 打包安装(1)
  • 13 模式重构(2)
  • 14 系统架构
  • 15 敏捷开发(11)
  • 16 案例分析(30)
  • 17 Workflow(1)
  • 18 配置管理(1)
  • 19 项目管理
  • 20 英语(4)

新闻分类(52)

  • CXF学习
  • Hibernate学习(1)
  • iBatis学习(16)
  • Struts1学习(1)
  • Struts2学习(34)

.NET资源

  • adxmenu
  • C# Open Source
  • DNN Directory
  • M2Land
  • Windows Form FAQ
  • 中国DNN
  • 中国DNN联盟

Ajax

  • DoJo
  • GWT
  • JQuery
  • jquery autocomplete
  • jquery flexgrid
  • JQuery Form
  • jquery masked input
  • JQuery UI
  • jquery validation
  • Jquery 图表
  • jquery报表
  • jquery插件集合
  • Qooxdoo
  • Tibco GI
  • YUI
  • YUI-EXT
  • ZeroKode

Java开源

  • ABLE
  • Agile Tao
  • Ajax4JSF
  • Alfresco
  • AppFuse
  • Compiere
  • Equinox
  • Findbugs
  • Geronimo
  • Grails
  • Harmony
  • Hibernate论坛
  • JAG
  • Java开源大全
  • Java视线论坛
  • jBPM工作流
  • JSFTutorials
  • Nereide ERP
  • Ofbiz ERP
  • Opentaps ERP
  • operamasks
  • Petstore
  • Prototype.js
  • RIFE
  • Runa
  • SpringSide
  • Struts Menu
  • Sun Glassfish
  • Trails
  • YUI4JSF
  • 满江红

Mobile

  • Sencha

WEB资源

  • DHTML中心
  • DHTML参考手册
  • DHTML文档
  • EclipsePlugin
  • Firebug
  • GRO Clinux
  • jMaki
  • JSTL文档
  • LoadIcon
  • Openlaszlo
  • Struts Menu 展示
  • Web Test Tools
  • WebCtrs
  • Webdeveloper
  • 中国RIA开发者论坛

Workflow

  • E-Workflow
  • JBPM
  • OpenWFE
  • OSWorkflow
  • WFMC
  • Workflow Research

其他连接

  • confach
  • CPP
  • ejay
  • Giovanni
  • 丹佛
  • 交大e-learning
  • 交大研究生院
  • 可恶的猫
  • 天天@blog
  • 我的相册
  • 阿飞

大牛人

  • 32篇JBPM
  • David.Turing
  • HongSoft@业务集成
  • Joel
  • Koen Aers
  • Martinfowler
  • Raible Matt
  • Raible Wiki
  • Scott W.Ambler
  • Tom Baeyens
  • Uncle Bob
  • 一个世界在等待
  • 子在川上曰
  • 小布老师
  • 小明
  • 差沙
  • 徐昊
  • 江南白衣
  • 汪博士
  • 汪小金
  • 银狐999

开源软件

  • 2Bizbox ERP
  • CompiereCRM&ERP
  • EGW
  • Vtiger CRM
  • webERP

敏捷

  • Canoo
  • Cruisecontrol
  • DBUnit
  • EL4Ant
  • Extreme Programming
  • Fit
  • Fitnesse
  • JFrog
  • Liquibase
  • Maven
  • MockObjects
  • Selenium
  • Squish
  • xpairtise
  • XPlanner
  • XProgramming
  • 敏捷联盟

数据库

  • Oracle 中国
  • Oracle-ERP
  • Oracle在线社区

未归类

  • Aquarius Orm Studio
  • mambo建站系统
  • Oracle产品下载
  • 远程同步管理工具Capivara

经典框架

  • Apache Shale
  • formdef-struts
  • FreeMarker 主页
  • JBoss Seam
  • JSF 中心
  • JSF 入门应用
  • JSF中国
  • MyFaces官方
  • Spring 社区
  • Spring专业网站
  • Spring中文论坛
  • Spring参考手册
  • Spring官方网站
  • strecks-struts
  • Struts1
  • Struts2
  • Struts-layout
  • StrutsWiKi
  • Tapestry WIKI
  • Tapestry 官方
  • Tapestry4开发指南
  • Tapestry中文文档
  • Webwork2文档
  • Wicket

网络教程

  • Laliluna
  • RoseIndia
  • Sang Shin
  • Visualbuilder

著名站点

  • Buildix
  • Dev2Dev
  • IBM dev中国
  • InfoQ
  • ITPub
  • Java Eye
  • Java Research
  • JavaRead
  • JavaWorldTW
  • Matrix
  • PHP100
  • PHPX
  • SpringSideWiKi
  • TheServerSide
  • TWPHP
  • 中国工作流论坛

项目管理

  • 管理人网

最新评论

View Post

我的VB托盘程序代码

Form1 的VB代码

Private bIsQuit As Boolean

Private Sub Form_Load()
  bIsQuit 
= False
End Sub

Private Sub Form_Unload(Cancel As Integer)
  
If Not bIsQuit Then
    
Dim rc As Long
    
Dim OwnerhWnd As Long

    
' 让窗体不可见
    Me.Visible = False
    
' 从任务管理器列表中移除
    OwnerhWnd = GetWindow(Me.HWnd, GW_OWNER)
    rc 
= ShowWindow(OwnerhWnd, SW_HIDE)

    
Call Icon_Add(Form1, Me.topmenu, Me.Timer1, Me.HWnd, "ICON Test", Me.Icon, 0)
    Cancel 
= 1
  
Else
    Cancel 
= 0
  
End If
End Sub

Private Sub mnuQuit_Click()
  bIsQuit 
= True
  
Call Icon_Del(Me.HWnd, 0) '删除通知栏图标
  Unload Me
End Sub

Private Sub mnuShow_Click()
  
Call Icon_Del(Me.HWnd, 0) '删除通知栏图标
  Me.Show '调出窗口
  Me.WindowState = 0
End Sub

Private Sub Timer1_Timer()
  
Call Common.procesSD
End Sub


Common模块代码

'Window消息处理函数,目的是: 窗口最小化到托盘时,程序自己处理消息
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
Declare 
Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

'点击X时,最小化到托盘
Public Const SW_HIDE = 0
Public Const GW_OWNER = 4
Declare 
Function GetWindow Lib "user32" (ByVal HWnd As Long, ByVal wCmd As Long) As Long
Declare 
Function ShowWindow Lib "user32" (ByVal HWnd As Long, ByVal nCmdShow As Long) As Long

'添加、删除、更改托盘图标 Windows API
Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

Public Const DefaultIconIndex = 1 '图标缺省索引
Public Const WM_LBUTTONDOWN = &H201 '按鼠标左键
Public Const WM_RBUTTONDOWN = &H204 '按鼠标右键
Public Const WM_LBUTTONDBLCLK = &H203 '双击左键

Public Const WM_USER = &H400
Public Const TRAY_CALLBACK = (WM_USER + 1001&)
Public Const GWL_WNDPROC = (-4)

Public Const NIM_ADD = 0 '添加图标
Public Const NIM_MODIFY = 1 '修改图标
Public Const NIM_DELETE = 2 '删除图标

Public Const NIF_MESSAGE = 1 'message 有效
Public Const NIF_ICON = 2 '图标操作(添加、修改、删除)有效
Public Const NIF_TIP = 4 'ToolTip(提示)有效

Type NOTIFYICONDATA
    cbSize 
As Long               '需填入NOTIFYICONDATA数据结构的长度
    HWnd As Long                 '设置成窗口的句柄
    Uid As Long                  '为图标所设置的ID值
    UFlags As Long               '设置uCallbackMessage,hIcon,szTip是否有效
    UCallbackMessage As Long     '消息编号
    hIcon As Long                '显示在状态栏上的图标
    SzTip As String * 64         '提示信息
End Type

'声明上述类型的对象
Private IconVa As NOTIFYICONDATA

'声明获取处理Windows 消息前的window句柄
Public OldWindowProc As Long

'判断单击,双击的两个标志
Private bIsSingle As Boolean
Private bIsDouble As Boolean

'声明主窗体,右键菜单和时钟,这里的时钟是为了区分单双击左键,显得比较笨拙
Private frmMain As Form
Private topmenu As Menu
Private timMain As Timer

'函数定义
'
添加图标至通知栏
Public Function Icon_Add(frmParent As Form, mnuParent As Menu, timParent As Timer, iHwnd As Long, sTips As String, hIcon As Long, IconID As Long) As Long
  
'参数说明:iHwnd:窗口句柄,sTips:当鼠标移到通知栏图标上时显示的提示内容
  'hIcon:图标句柄,IconID:图标Id号
  
  
'初始化控件成员
  Set frmMain = frmParent
  
Set topmenu = mnuParent
  
Set timMain = timParent
  
  
With IconVa
    .HWnd 
= iHwnd
    .SzTip 
= sTips + Chr$(0)
    .hIcon 
= hIcon
    .Uid 
= IconID
    .UCallbackMessage 
= TRAY_CALLBACK
    .cbSize 
= Len(IconVa)
    .UFlags 
= NIF_MESSAGE Or NIF_ICON Or NIF_TIP
  
End With
  
  
  
'获得让程序处理事件的权利
  OldWindowProc = SetWindowLong(iHwnd, GWL_WNDPROC, AddressOf NewWindowProc)
  
  
'初始化单双击的判别标志
  bIsSingle = False
  bIsDouble 
= False
  
  
'初始化时钟
  timMain.Enabled = True
  timMain.Interval 
= 500
  
  Icon_Add 
= Shell_NotifyIcon(NIM_ADD, IconVa)
End Function


'删除通知栏图标(参数说明同Icon_Add)
Function Icon_Del(iHwnd As Long, lIndex As Long) As Long
  
Dim IconVa As NOTIFYICONDATA
  
Dim L As Long
  
With IconVa
    .HWnd 
= iHwnd
    .Uid 
= lIndex
    .cbSize 
= Len(IconVa)
  
End With
  
  
'当图标从托盘删除后,关闭时钟,不在监视单双击事件
  timMain.Enabled = True
  
  
'让操作系统处理消息
  SetWindowLong iHwnd, GWL_WNDPROC, OldWindowProc
  
  Icon_Del 
= Shell_NotifyIcon(NIM_DELETE, IconVa)
End Function

'修改通知栏图标(参数说明同Icon_Add)
Public Function Icon_Modify(iHwnd As Long, sTips As String, hIcon As Long, IconID As Long) As Long
  
Dim IconVa As NOTIFYICONDATA
  
With IconVa
    .HWnd 
= iHwnd
    .SzTip 
= sTips + Chr$(0)
    .hIcon 
= hIcon
    .Uid 
= IconID
    .UCallbackMessage 
= TRAY_CALLBACK
    .cbSize 
= Len(IconVa)
    .UFlags 
= NIF_MESSAGE Or NIF_ICON Or NIF_TIP
    
  
End With
  
  Icon_Modify 
= Shell_NotifyIcon(NIM_MODIFY, IconVa)
End Function

'程序处理Windows传递的消息
Public Static Function NewWindowProc(ByVal HWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
  
  
'如果用户点击了托盘中的图标,则进行判断是点击了左键单双击,还是右键
  If Msg = TRAY_CALLBACK Then
    
'如果点击了右键
    If lParam = WM_RBUTTONDOWN Then
      
'则弹出右键菜单
      frmMain.PopupMenu topmenu
      
Exit Function
    
End If
    
    
'如果双击左键
    If lParam = WM_LBUTTONDBLCLK Then
      bIsDouble 
= True
      bIsSingle 
= False
      
Exit Function
    
End If
  
    
'如果点击了左键
    If lParam = WM_LBUTTONDOWN Then
      bIsSingle 
= True
      bIsDouble 
= False
      
Exit Function
    
End If
  
End If

  
'如果是其他类型的消息则传递给原有默认的窗口函数
  NewWindowProc = CallWindowProc(OldWindowProc, HWnd, Msg, wParam, lParam)
End Function

'被时钟调用,来区分单击,还是双击,以及事件处理内容
Public Sub procesSD()
  
'如果是双击,就恢复窗口,并把图标从托盘删除
  If bIsDouble Then
    
Call Icon_Del(frmMain.HWnd, 0) '删除通知栏图标
    frmMain.Show '调出窗口
    frmMain.WindowState = 0
    frmMain.SetFocus
  
ElseIf bIsSingle Then
    
'如果是单击,就弹出左键菜单
    frmMain.PopupMenu topmenu
  
End If
  
  
'恢复单双击判断的标志
  bIsSingle = False
  bIsDouble 
= False
End Sub

posted on 2005-11-07 16:33 MingIsMe 阅读(2366) 评论(0)  编辑  收藏 所属分类: 05 微软编程

 
Powered by:
BlogJava
Copyright © MingIsMe