搜档网
当前位置:搜档网 › VB托盘程序详解

VB托盘程序详解

VB托盘程序详解
VB托盘程序详解

【转载】VB托盘程序详解

2007/11/25 20:53

1、新建立一个VB6工程,将Form1的ShowInTaskBar属性设置为False

2、菜单:工程--添加模块按“打开”这样就添加了一个新模块,名为Module1,保存为Module1.bas

3、在Module1中写下如下代码:

Option Explicit

Public Const MAX_TOOLTIP As Integer = 64

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 WM_MOUSEMOVE = &H200

Public Const WM_LBUTTONDOWN = &H201

Public Const WM_LBUTTONUP = &H202

Public Const WM_LBUTTONDBLCLK = &H203

Public Const WM_RBUTTONDOWN = &H204

Public Const WM_RBUTTONUP = &H205

Public Const WM_RBUTTONDBLCLK = &H206

Public Const SW_RESTORE = 9

Public Const SW_HIDE = 0

Public nfIconData As NOTIFYICONDATA

Public Type NOTIFYICONDATA

cbSize As Long

hWnd As Long

uID As Long

uFlags As Long

uCallbackMessage As Long

hIcon As Long

szTip As String * MAX_TOOLTIP

End Type

Public Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long

Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

4、在Form1的Load事件中写下如下代码:

Private Sub Form_Load()

'以下把程序放入System Tray====================================System Tray Begin

With nfIconData

.hWnd = Me.hWnd

.uID = Me.Icon

.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP

.uCallbackMessage = WM_MOUSEMOVE

.hIcon = Me.Icon.Handle

'定义鼠标移动到托盘上时显示的Tip

.szTip = App.Title + "(版本 " & App.Major & "." & App.Minor & "." & App.Revision & ")" & vbNullChar

.cbSize = Len(nfIconData)

End With

Call Shell_NotifyIcon(NIM_ADD, nfIconData)

'=============================================================System Tray End

Me.Hide

End Sub

5、在Form1的QueryUnload事件中写入如下代码:

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Call Shell_NotifyIcon(NIM_DELETE, nfIconData)

End Sub

6、在Form1的MouseMove事件中写下如下代码:

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)

Dim lMsg As Single

lMsg = X / Screen.TwipsPerPixelX

Select Case lMsg

Case WM_LBUTTONUP

'MsgBox "请用鼠标右键点击图标!", vbInformation, "实时播音专家"

'单击左键,显示窗体

ShowWindow Me.hWnd, SW_RESTORE

'下面两句的目的是把窗口显示在窗口最顶层

'Me.Show

'Me.SetFocus

'' Case WM_RBUTTONUP

'' PopupMenu MenuTray '如果是在系统Tray图标上点右键,则弹出菜单MenuTray

'' Case WM_MOUSEMOVE

'' Case WM_LBUTTONDOWN

'' Case WM_LBUTTONDBLCLK

'' Case WM_RBUTTONDOWN

'' Case WM_RBUTTONDBLCLK

'' Case Else

End Select

End Sub

7、现在将程序保存起来运行看看系统托盘处是否增加了一个本工程的图标。单击此图标,Form1就自动弹出来了。

很多软件运行时会在系统托盘区(就是桌面右下角显示时间的区域)出现一个小图标,它作为程序运行的一个标志,我们可以通过使用小图标所弹出的菜单来控制应用程序的状态。本例就给出了一个功能比较完整的托盘程序,我们可以看到怎样用API函数Shell_NotifyIcon来添加、删除、更改托盘图标;而且例中还演示了为托盘图标添加右键菜单和浮动提示的方法。

程序(附后)用到了Shell_NotifyIcon、SendMessage、CallWindowProc、SetWindowLong等API函数,其中Shell_NotifyIcon是主要的函数,它用来添加、删除、更改系统托盘区(taskbar status area)的图标,所以我们先来看看这个函数的声明和参数:

使用API函数之前必须先在程序中声明如下:

Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias

"Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

其中各参数的意义如下表:

参数:意义

dwMessage 为消息设置值,它可以是以下的几个常数值:0、1、2

NIM_ADD = 0 加入图标到系统状态栏中

NIM_MODIFY = 1 修改系统状态栏中的图标

NIM_DELETE = 2 删除系统状态栏中的图标

LpData 用以传入NOTIFYICONDATA数据结构变量,其结构如下所示:

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

返回值 Long,非零表示成功,零表示失败

在使用这个API函数之前我们应该先定义结构类型NOTIFYICONDATA:

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

然后定义一个NOTIFYICONDATA的变量TheData来记录设置托盘图标的数据Private TheData As NOTIFYICONDATA

这时我们就可以使用这个函数来设置系统托盘图标了,具体方法如下:

1、添加图标

With TheData

.Uid = 0

.HWnd = frm.HWnd 注释:frm.HWnd是程序主窗体的句柄

.cbSize = Len(TheData)

.HIcon = frm.Icon.Handle 注释:frm.Icon.Handle指向主窗体的图标

.UFlags = NIF_ICON

.UCallbackMessage = TRAY_CALLBACK

注释:作用是允许返回消息,在下一节中会有详细解释。

.UFlags = .UFlags Or NIF_MESSAGE

.cbSize = Len(TheData)

End With

Shell_NotifyIcon NIM_ADD, TheData

注释:根据前面定义NIM_ADD,设置为“添加模式”,然后添加

2、删去图标

With TheData

.UFlags = 0

End With

Shell_NotifyIcon NIM_DELETE, TheData

注释:根据前面定义NIM_DELETE,设置为“删除模式”

3、更改图标

With TheData

.HIcon = pic.Handle

注释:pic是图片狂PictureBox,存放图标文件

.UFlags = NIF_ICON

End With

Shell_NotifyIcon NIM_MODIFY, TheData

注释:根据前面定义NIM_MODIFY,设置为“更改模式”

4、为图标添加浮动提示信息

With TheData

.SzTip = tip & vbNullChar

注释:tip是字符串string,存储提示信息

.UFlags = NIF_TIP

注释:指明要对浮动提示进行设置

End With

Shell_NotifyIcon NIM_MODIFY, TheData

注释:根据前面定义NIM_MODIFY,设置为“修改模式”

通过以上几段代码我们就能根据自己需要添加、删除、更改系统托盘图标,并能添加系统图标上的浮动提示信息。但这时的托盘图标是孤立的,我们并不能利用它来控制应用程序的行为,怎么办呢?别急,请往下看……

如果你下载(源程序下载)并运行这个例程序,你会发现如果我们在托盘图标上点击鼠标右键,则会弹出一个右键菜单。如果点击相应的菜单项,程序主窗体会随之变化,这样就可以控制程序的行为。而如果当主窗体处于最小化状态时,我们在托盘图标上点击左键,窗体会恢复到原来的大小。其实实现上述的功能都要依赖于WINDOWS操作系统的消息机制,要完全弄懂这个机制挺不容易的,但是我们可以按下述文字来理解它。

把WINDOWS操作系统看作人的大脑,它接收、处理、并发送各种各样的信息给我们的各个器官(当然是比喻各个应用程序了),也就是说它是消息的中枢。而每个应用程序(甚至每一个按钮、标签、窗体等等统称为窗口)在运行时都会被分配一个窗口过程WINDOWPROC,由这个窗口过程来接收和处理操作系统发来的消息(实际上存在一个消息队列),通常情况下这个窗口过程是由操作系统指定的,

它会自动的响应并处理一些WINDOWS消息(如窗体移动、最大化、最小化、错误信息等)。好,到这我们先停一下,提出一个疑问,这些消息能否由我们自己写程序来处理呢?答案是肯定的,不过还得借助API函数的威力了,怎么用?我们还是先看看这些API函数的定义和参数吧。

程序中用到了SendMessage、CallWindowProc、SetWindowLong等API函数,其中SendMessage函数的作用是将一条消息发给某个窗口;CallWindowProc函数用来发送消息到一个窗口过程;而使用SetWindowLong函数来为窗口结构中为指定的窗口设置属性。使用API函数之前必须先在程序中声明如下:

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

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

其中各参数的意义如下表:

CallWindowProc函数

参数意义

lpPrevWndFunc Long,原来的窗口过程地址

HWnd Long,窗口句柄

Msg Long,发送的消息

wParam Long,消息类型,参考wParam参数表

lParam Long,依据wParam参数的不同而不同

返回值 Long,依据发送的消息不同而变化

SetWindowLong函数:

参数意义

hwnd Long,欲为其取得信息的窗口的句柄

nIndex Long,请参考GetWindowLong函数的nIndex参数的说明

dwNewLong Long,由nIndex指定的窗口信息的新值

返回值 Long,指定数据的前一个值

SendMessage函数:

参数意义

hwnd Long,要接收消息的那个窗口的句柄

wMsg Long,消息的标识符

wParam Long,具体取决于消息

lParam Any,具体取决于消息

返回值 Long,由具体的消息决定

我们要自己写程序来处理消息,必须先更改窗口的属性,从原来由默认的窗口过程来处理消息变成由我们自己写的消息处理过程来处理消息。方法是使用SetWindowLong函数来取得默认窗口过程的地址,然后转向为我们自己写的窗口过程的地址,具体的实现方法如下代码:

注释:GWL_WNDPROC获得该窗口的窗口过程的地址,AddressOf是取址函数,NewWindowProc是我们写的过程

OldWindowProc = SetWindowLong(frm.HWnd, GWL_WNDPROC, AddressOf

NewWindowProc)

然后在NewWindowProc函数中写入如下代码,需要注意的是下面代码中红色的TRAY_CALLBACK是由托盘区图标传来的消息,要让托盘图标传回消息,必须在添加托盘图标时指定:

Public 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_LBUTTONUP Then

注释:而这时窗体的状态是最小化时

If TheForm.WindowState = vbMinimized Then _

注释:恢复到最小化前的窗体状态

TheForm.WindowState = https://www.sodocs.net/doc/125905601.html,stState

TheForm.SetFocus

Exit Function

End If

End If

注释:如果点击了右键

If lParam = WM_RBUTTONUP Then

注释:则弹出右键菜单

TheForm.PopupMenu TheMenu

Exit Function

End If

End If

注释:如果是其他类型的消息则传递给原有默认的窗口函数

NewWindowProc = CallWindowProc(OldWindowProc, HWnd, Msg, wParam, lParam)

End Function

这样我们就取得并处理了来自托盘图标的消息,现在的问题是在鼠标右键菜单弹出后,怎么控制程序主窗体的状态,这时我们需要用到SendMessage函数来向主窗体发送最大化、最小化、关闭、移动等消息,具体的代码实现如下,其中HWnd是主窗体的句柄,WM_SYSCOMMAND表示发送的是系统控制类的消息,

SC_MOVE、SC_SIZE、SC_RESTORE便是要发送的消息了:

注释:托盘图标右键菜单上的“移动”项被点击时

Private Sub mnuTrayMove_Click()

SendMessage HWnd, WM_SYSCOMMAND, SC_MOVE, 0&

End Sub

注释:托盘图标右键菜单上的“恢复”项被点击时

Private Sub mnuTrayRestore_Click()

SendMessage HWnd, WM_SYSCOMMAND, SC_RESTORE, 0&

End Sub

注释:托盘图标右键菜单上的“退出”项被点击时

Private Sub mnuTraySize_Click()

SendMessage HWnd, WM_SYSCOMMAND, SC_SIZE, 0&

End Sub

最后要提醒你,在程序退出时一定要把窗口过程的地址恢复为默认值,同时把托盘图标移去哦。

为了学习方便,以下提供了源代码:

注释:---------------------------------------------

注释:使用系统托盘程序演示

注释:---------------------------------------------

注释:程序说明:

注释:这是一个比较完整的使用系统托盘的程序实例,包括

注释:了:添加托盘图标,删除托盘图标,动态改变托盘图标,

注释:为托盘图标添加浮动提示信息,实现托盘图标的鼠标右键

注释:菜单等内容。

注释:-------名称-------------------作用------------

注释: Form1 主窗体

注释: mnuFile,mnuFileExit 文件菜单,菜单项

注释: mnuTray,mnuTrayClose... 托盘区右键菜单,菜单项

注释:---------------------------------------------

Option Explicit

注释:LastState变量的作用是标示主窗体原有状态

Public LastState As Integer

注释:【VB声明】

注释: Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

注释:【说明】

注释:调用一个窗口的窗口函数,将一条消息发给那个窗口。除非消息处理完毕,否则该函数不会返回。SendMessageBynum,

注释: SendMessageByString是该函数的“类型安全”声明形式

注释:【返回值】

注释: Long,由具体的消息决定

注释:【参数表】

注释: hwnd ----------- Long,要接收消息的那个窗口的句柄

注释: wMsg ----------- Long,消息的标识符

注释: wParam --------- Long,具体取决于消息

注释: lParam --------- Any,具体取决于消息

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal HWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long

注释:表示发送的是系统命令

Private Const WM_SYSCOMMAND = &H112

Private Const SC_MOVE = &HF010&

Private Const SC_RESTORE = &HF120&

Private Const SC_SIZE = &HF000&

注释:当主窗体加载时

Private Sub Form_Load()

注释:窗体的WindowState属性,返回或设置一个值,该值用来指定在运行时窗体窗口的可视状态

注释:vbNormal 0 (缺省值)正常。

注释:VbMinimized 1 最小化(最小化为一个图标)

注释:VbMaximized 2 最大化(扩大到最大尺寸)

If WindowState = vbMinimized Then

LastState = vbNormal

Else

LastState = WindowState

End If

注释:将图标添加到托盘的函数,参见模块中的解释

注释:注意了这是从主程序到模块的入口,本例中并没有直接调用

Shell_NotifyIcon函数

AddToTray Me, mnuTray

SetTrayTip "托盘图标演示,点击右键弹出菜单"

End Sub

注释:在主窗体Form1大小改变时,相应改变右键菜单mnuTray的菜单项的可用属性Enabled

Private Sub Form_Resize()

Select Case WindowState

注释:如果窗体最小化了,把菜单项“最大化”“恢复”设为可用,

注释:而把“最小化”“移动”“大小”三项设为不可用.

注释:如果这时在托盘图标上点击鼠标右键,会发现不可用项变为灰色

Case vbMinimized

mnuTrayMaximize.Enabled = True

mnuTrayMinimize.Enabled = False

mnuTrayMove.Enabled = False

mnuTrayRestore.Enabled = True

mnuTraySize.Enabled = False

注释:窗体最大化时

Case vbMaximized

mnuTrayMaximize.Enabled = False

mnuTrayMinimize.Enabled = True

mnuTrayMove.Enabled = False

mnuTrayRestore.Enabled = True

mnuTraySize.Enabled = False

注释:一般状态下

Case vbNormal

mnuTrayMaximize.Enabled = True

mnuTrayMinimize.Enabled = True

mnuTrayMove.Enabled = True

mnuTrayRestore.Enabled = False

mnuTraySize.Enabled = True

End Select

If WindowState <> vbMinimized Then LastState = WindowState End Sub

注释:保证在程序退出时删除托盘图标

Private Sub Form_Unload(Cancel As Integer) RemoveFromTray

End Sub

注释:“文件”菜单的“退出”项被点击时

Private Sub mnuFileExit_Click()

Unload Me

End Sub

注释:托盘图标右键菜单上的“退出”项被点击时

Private Sub mnuTrayClose_Click()

Unload Me

End Sub

注释:托盘图标右键菜单上的“最大化”项被点击时

Private Sub mnuTrayMaximize_Click()

WindowState = vbMaximized

End Sub

注释:托盘图标右键菜单上的“最小化”项被点击时

Private Sub mnuTrayMinimize_Click()

WindowState = vbMinimized

End Sub

注释:托盘图标右键菜单上的“移动”项被点击时

Private Sub mnuTrayMove_Click()

SendMessage HWnd, WM_SYSCOMMAND, _

SC_MOVE, 0&

End Sub

注释:托盘图标右键菜单上的“恢复”项被点击时

Private Sub mnuTrayRestore_Click()

SendMessage HWnd, WM_SYSCOMMAND, _

SC_RESTORE, 0&

End Sub

注释:托盘图标右键菜单上的“退出”项被点击时

Private Sub mnuTraySize_Click()

SendMessage HWnd, WM_SYSCOMMAND, _

SC_SIZE, 0&

End Sub

注释:-----------------------------------------

注释:以下为模块中的代码:

注释:-----------------------------------------

Option Explicit

Public OldWindowProc As Long

Public TheForm As Form

Public TheMenu As Menu

注释:【VB声明】

注释: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

注释:【说明】

注释:此函数发送消息到一个窗口过程

注释:【返回值】

注释: Long,依据发送的消息不同而变化

注释:【参数表】

注释: lpPrevWndFunc----- Long,原来的窗口过程地址

注释: HWnd-------------- Long,窗口句柄

注释: Msg -------------- Long,发送的消息

注释: wParam ----------- Long,消息类型,参考wParam参数表

注释: lParam ----------- Long,依据wParam参数的不同而不同

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

注释:【VB声明】

注释: Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

注释:【说明】

注释:在窗口结构中为指定的窗口设置信息

注释:【返回值】

注释: Long,指定数据的前一个值

注释:【参数表】

注释: hwnd ----------- Long,欲为其取得信息的窗口的句柄

注释: nIndex --------- Long,请参考GetWindowLong函数的nIndex参数的说明

注释: dwNewLong ------ Long,由nIndex指定的窗口信息的新值

Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal HWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

注释:【VB声明】

注释:Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

注释:【说明】

注释:【参数表】

注释:参数dwMessage ---- 为消息设置值,它可以是以下的几个常数值:0、1、2

注释:NIM_ADD = 0 加入图标到系统状态栏中

注释:NIM_MODIFY = 1 修改系统状态栏中的图标

注释:NIM_DELETE = 2 删除系统状态栏中的图标

注释:参数LpData ---- 用以传入NOTIFYICONDATA数据结构变量,我们也需要在"模块"中定义其结构如下:

注释: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

注释:---- 其中参数uCallbackMessage、hIcon、szTip也应在模块中声明为以

下的常量:

注释:Public Const NIF_MESSAGE = 1

注释:Public Const NIF_ICON = 2

注释:Public Const NIF_TIP = 4

Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias

"Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

Public Const WM_USER = &H400

Public Const WM_LBUTTONUP = &H202

Public Const WM_MBUTTONUP = &H208

Public Const WM_RBUTTONUP = &H205

Public Const TRAY_CALLBACK = (WM_USER + 1001&)

Public Const GWL_WNDPROC = (-4)

Public Const GWL_USERDATA = (-21)

Public Const NIF_ICON = &H2

Public Const NIF_TIP = &H4

Public Const NIM_ADD = &H0

Public Const NIF_MESSAGE = &H1

Public Const NIM_MODIFY = &H1

Public Const NIM_DELETE = &H2

注释:记录设置托盘图标的数据的数据类型NOTIFYICONDATA

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

注释:TheData变量记录设置托盘图标的数据

Private TheData As NOTIFYICONDATA

注释: *********************************************

注释:新的窗口过程--主程序中采用SetWindowLong函数改变了窗口函数的地址,消息转向由NewWindowProc处理

注释: *********************************************

Public 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_LBUTTONUP Then

注释:而这时窗体的状态是最小化时

If TheForm.WindowState = vbMinimized Then _

注释:恢复到最小化前的窗体状态

TheForm.WindowState = https://www.sodocs.net/doc/125905601.html,stState

TheForm.SetFocus

Exit Function

End If

End If

注释:如果点击了右键

If lParam = WM_RBUTTONUP Then

注释:则弹出右键菜单

TheForm.PopupMenu TheMenu

Exit Function

End If

End If

注释:如果是其他类型的消息则传递给原有默认的窗口函数

NewWindowProc = CallWindowProc(OldWindowProc, HWnd, Msg, wParam, lParam) End Function

注释: *********************************************

注释:把主窗体的图标(Form1.icon属性可改变)添加到托盘中

注释: *********************************************

Public Sub AddToTray(frm As Form, mnu As Menu)

注释:保存当前窗体和菜单信息

Set TheForm = frm

Set TheMenu = mnu

注释:GWL_WNDPROC获得该窗口的窗口函数的地址

OldWindowProc = SetWindowLong(frm.HWnd, GWL_WNDPROC, AddressOf NewWindowProc)

注释:知识点滴:HWnd属性

注释:返回窗体或控件的句柄。语法: object.HWnd

注释:说明:Microsoft Windows 运行环境,通过给应用程序中的每个窗体和控件

注释:分配一个句柄(或 hWnd)来标识它们。hWnd 属性用于Windows API调用。

注释:将主窗体图标添加在托盘中

With TheData

.Uid = 0 注释:忘了吗?参考一下前面内容,Uid图标的序号,做动画图标有用.HWnd = frm.HWnd

.cbSize = Len(TheData)

.HIcon = frm.Icon.Handle

.UFlags = NIF_ICON 注释:指明要对图标进行设置

.UCallbackMessage = TRAY_CALLBACK

.UFlags = .UFlags Or NIF_MESSAGE 注释:指明要设置图标或返回信息给主窗体,此句不能省去

.cbSize = Len(TheData) 注释:为什么呢?我们需要在添加图标的同时,让其返回信息

End With 注释:给主窗体,Or的意思是同时进行设置和返回消息

Shell_NotifyIcon NIM_ADD, TheData 注释:根据前面定义NIM_ADD,设置为“添加模式”

End Sub

注释: *********************************************

注释:删除系统托盘中的图标

注释: *********************************************

Public Sub RemoveFromTray()

注释:删除托盘中的图标

With TheData

.UFlags = 0

End With

Shell_NotifyIcon NIM_DELETE, TheData 注释:根据前面定义NIM_DELETE,设置为“删除模式”

注释:恢复原有的设置

SetWindowLong TheForm.HWnd, GWL_WNDPROC, OldWindowProc

End Sub

注释: *********************************************

注释:为托盘中的图标加上浮动提示(也就是鼠标移上去时出现的提示字条)注释: *********************************************

Public Sub SetTrayTip(tip As String)

With TheData

.SzTip = tip & vbNullChar

.UFlags = NIF_TIP 注释:指明要对浮动提示进行设置

End With

Shell_NotifyIcon NIM_MODIFY, TheData 注释:根据前面定义NIM_MODIFY,设置为“修改模式”

End Sub

注释: *********************************************

注释:设置托盘的图标(在本例中没有用到,如果要动态改变托盘内显示的图标,它非常有用)

注释:例如:1、显示动画图标(方法你一定猜到了,对!使用Timer控件,不断调用此过程,注意把动画放在pic数组中)

注释: 2、程序处于不同状态时,显示不同的图标,方法是类似的注释:有兴趣的话试一试吧。

注释: ********************************************* Public Sub SetTrayIcon(pic As Picture)

注释:判断一下pic中存放的是不是图标

If pic.Type <> vbPicTypeIcon Then Exit Sub

注释:更换图标为pic中存放的图标

With TheData

.HIcon = pic.Handle

.UFlags = NIF_ICON

End With

Shell_NotifyIcon NIM_MODIFY, TheData

End Sub

程序最小化到托盘

VC++6.0中实现将应用程序的图标加入到Windows的系统托盘中(就是为应用程序在桌面右下角添加一个图标,和QQ类似)有位老兄说我乱贴,可能这位老兄已经看得眼花缭乱了,Shell_NotifyIcon 是一个Windows SDK的一个函数,只要你在windows下编程,不管你是BCB、VC、VB,都可以调用它来实现托盘图标,只是调用方法不同罢了。 常常能见到一些优秀的软件在运行后会将其应用程序图标加入到系统托盘中。如果能将自己编写的应用程序的图标也加入到系统托盘中,将会使你的程序显得很有专业水准。其实这并不困难,与系统托盘通信的函数只有一个: Shell_NotifyIcon (UINT message, NOTIFYICONDATA &m_nid); 首先看一下该函数的两个参数。 第一个参数message可以取以下值:NIM_ADD 向托盘中加入一个图标; NIM_MODIFY 修改托盘中的图标;NIM_DELETE 从托盘中删除一个图标; 第二个参数m_nid是NOTIFYICONDATA结构的一个引用。该结构的原型如下: typedef struct _NOTIFYICONDATA { DWORD cbSize;// 结构的大小,必须在程序中给出 HWND hWnd; //是你程序中将要接收托盘消息的窗口句柄 UINT uID; // 应用程序中定义的托盘图标ID,此参数用作标识 UINT uFlags; //设置属性,低三位有意义,0--7,如下: //第一位//#define NIF_MESSAGE 0x1 // uCallbackMessage参数有效 //第二位//#define NIF_ICON 0x2 // hIcon参数有效 //第三位//#define NIF_TIP 0x4 // szTip参数有效UINT uCallbackMessage; // 自定义的消息ID值,一定不要与以有的消息ID相重。 HICON hIcon; //显示在系统托盘上的Icon的句柄,可以为系统的IDI_WINLOGO等 CHAR szTip[64]; // 用于图标显示的提示字符串 } NOTIFYICONDATA; 为了接收到来自托盘的通知消息你可以将uCallbackMessage设定为你所定义的消息ID值,同时设定NIF_MESSAGE标志。这样当用户在你的托盘图标上移动或按下鼠标时,Windows将发出消息:该消息的messageID是你在uCallbackMessage中定义的值;wParam是你定义的uID值;而lParam是鼠标事件(如WM_LBUTTONDOWN),这样你的应用程序就能响应该事件了。因此,为了将自己的应用程序加入到系统托盘中,首先得建立一处理托盘通知消息的窗口对象,然后将窗口对象与你自己的托盘通知消息联系起来并建立相应的托盘通知消息映射机制,以便你的窗口对象能处理相应的事件。可以看到结构体NOTIFYICONDATA中,其成员变量hWnd,uID,uFlags均用于在窗口对象与你自己的托盘通知消息之间建立联系,而成员变量uCallbackMessage则必须是对应于你的窗口对象的托盘通知消息ID值。于是要完成的工作有: (1)建立一处理托盘通知消息的窗口对象; (2)建立一结构体NOTIFYICONDATA变量,并给变量的相应域赋值以在托盘通知消息与窗口对象之间建立联系; (3)建立相应的托盘通知消息映射机制; (4)调用Shell_NotifyIcon函数以在系统托盘中加入、修改或删除图标; (5)当然别忘了在你的窗口对象中编写相应的事件响应函数。

VB解析算法及程序实现

3.1解析算法及程序实现 1.计算长方体体积的算法描述如下:(h) (z)、宽(w)、高①输入长方体的长 v = z * w * h ②计算长方形体积③输出结果④结束()上述算法属于 A. 枚举算法 B. 排序算法 C. 解析算法 D. 递归算法 2.下列问题适合用解析算法求解的是() A.将十三张纸牌按从小到大进行排列 B.统计100内偶数的各位数字之和恰好为10的个数 C.计算一辆车行驶100公里的油耗 D.寻找本年级身高最高的同学 3.有如下问题: 12求出此圆锥体的体积。 V=πr ①已知圆锥的半径和高度h,使用公式hr3②已知班级每位同学的其中成绩总分s,按照s的值从大到小进行成绩排名。 ③已知圆的周长s,利用公式r=s/(2*3.14)求出圆的半径。 ④已知“水仙花数”的定义,找出1~10000范围内所有的水仙花数。 用计算机解决上述问题时,适合用解析算法的是() A.①② B.①③ C.③④ D.②④ 4.出租车计价规则:3公里以内,10元;超出3公里每公里增加2元。假定公里数为x,金额为y.解决此问题的公式和流程图如下图所示: 流程图加框处部分的算法属于:() A.解析算法 B.排序算法 C.枚举算法 D.递归算法

程序实现如下功能:分别现要求编写VB5.中输入Text3、和Text1、Text2在文本框Command1单击三条线段的长度,“判断”按钮中显示判断结果。程序后,在标签Label1 运行界面如图:按此要求编写的程序如下:Private Sub Command1_Click() Dim a As Single ,b As Single Dim c As Single ,st As String a=Val(Text1.Text) b=Val(Text2.Text) c=Val(Text3.Text) If Not (a + b > c And b + c > a And c + a > b) Then st = “这三条线不能构成一个三角形” ElseIf a * a + b * b = c * c Or a * a + c * c = b * b Or b * b + c * c = a * a Then “可以构成一个直角三角形” st = Then ① ElseIf “可以构成一个等边三角形” st = Else st = “可以构成一个不等边的斜三角形” End If Label1.Caption = ② End Sub 划线处应填写正确的语句是: (1)划线处① (2)划线处② 6.下列VB程序段实现计算s=1+1/2+2/3+3/4+…+99/100的值。请将下面划线处代码补充完整。 Private Sub Command1_Click() Dim i As Integer Dim s As Double s=1 For i=2 To 100 s= Next i

vb三种基本结构练习题

vb三种基本结构练习题 1、计算圆的面积(顺序结构) dim r,s,c as single r=inputbox("输入r的值") s=3.14*r*r c=2*3.14*r print s print c 2、小明去买电池,2.5元一节,买电池超过10节,超出的部分按八折出售。输入小明买电池的数量,输出小明应付的钱数。(选择语句) dim a as integer dim q as single a=inputbox("输入小明买的电池数") if a>10 then b=25+(a-10)*2.5*0.8 else b=a*2.5 end if print b 3、求1+2+3+4+……+100的和。(循环语句) dim i,sum as integer for i=1 to 100 sum=sum+i next i print sum 4、输入数字n,求n!(n!=1*2*3*……*n)(循环语句) dim i,sum,n as long n=inputbox("输入n的值") sum=1 for i=1 to n sum=sum*i next i print sum

1、在窗体上任意位置画一个文本框和一个命令按钮,编写程序,当用户单击命令按钮时,文本框移动到窗体的左上角,并且文本框的大小是原来的2倍。 2、在窗体上任意位置画一个文本框和一个命令按钮,设置窗体的标题属性为“信息窗口”;命令按钮的标题属性为“确定”。编写程序,当用户单击命令按钮时,在文本框中显示“包头师范学院”,要求字体为隶书、加粗、加下划线、字号为20、颜色为红色。 3、在窗体上任意位置画两个命令按钮,分别设置它们的标题属性为:加载图片、显示信息。编写程序,当用户单击第一个命令按钮时,在窗体上加载一幅图片(图片自定)。当用户单击第二个命令按钮时,在窗体上打印信息“包头师范学院“。 4、例1: 在窗体上部设置一个文本框,文本框的下面设置 3 个命令按钮,其中左边按钮中标有“单击此按钮”,中间按钮中标有“清除”,右边按钮中标有“程序结束”。当程序运行时,用鼠标单击左边按钮时,屏幕上部的文本框中显示“欢迎使用vb 6.0”;如果单击中间按钮,则清除文本框中显示的内容;而如果单击右边的按钮,则结束程序。 5、例2 请根据题目要求,设计VB应用程序: 1、在窗体的上方并排分别创建一个标签控件label1和一个文本框控件 text1; 要求:①窗体的标题命名为“个人简介”、窗体背景颜色为黄色。 ②标签和文本框中显示的字体为隶书、样式为斜体、字体大小为三号的红色字。 2、在两个控件的下方并排创建两个命令按钮控件command1、command2,分别命名为:“姓名”、“单位”。 3、请编写事件过程代码,使得程序运行时,当鼠标按下“姓名”按钮时,将在标签中显示你的名字;当鼠标按下“单位”按钮时,将在文本框中显示你现在所在的系、级、班。 4、完成以上操作后以V1为窗体名保存在D盘自己的文件夹下 上机练习三 1、在窗体上画一个文本框控件,要求运行时在文本框中显示信息“包头师范学院”(form-load事件)。当用户在文本框中选中任意数量的字符时,在窗体上显示所选中的字符数、选中字符数的首字符数及选中的字符内容。 2、在窗体上画两个文本框控件,先在属性窗口中删除两个文本框中的初始text 属性值。要求当程序运行时,当在文本框1中输入任意一个字符时,同时在文本框2中显示出来,同时也在窗体中显示出来。 3、实现“减法器”功能。

VB基本知识及选择、循环结构习题

一、VB 基本知识及选择、循环结构习题 一、基本概念题 (1) 说明下列哪些是Visual Basic 合法的直接常量,并分别指出它们的类型。 %100 1E1 123D3 123,456 0100 “ASDF” “” #2004/10/7# 100# π &O78 &H123 True T -1123! # (2)下列数据哪些是变量,哪些是常量是什么类型的常量 Name “name” False ff “11/16/99” cj “120” n #11/12/2004# (3) 下列符号中,哪些可以是Visual Basic 的合法变量名 A123 a12_3 123_a a,123 a 123 Integer XYZ False Sin(x) 变量名 sinx π (4)把下列数学表达式写成Visual Basic 表达式: (1)5||z y x ++ (2)6)1(xy + (3)xy y x 310+ (4)a ac b b 242-+- (5)3211111r r r ++ (6)110ln 45sin 10++++y x e (5)写出下列表达式的值: (1)123 + 23 Mod 10 \ 7 + Asc("A") (2)Int * 100 + / 100 (3)#11/22/2004# - 10 (4)"ZXY" & 123 & "abc" (6)设a=7,b=3,c=4,求下列表达式的值: (1)a + 3 * c (2)a ^ 2 / 4 (3)a / 2 + 3 \ 2 (4)a Mod 3 + b ^ 3 / c \ 5 (7)写出下列函数的值: (1)Int (2)Fix (3)Sqr(Sqr(81)) (4)Len("Visual Basic 程序设计") (5)Int(Abs(99 - 100) / 2) (6)Sgn(7 * 3 + 2) (7)LCase("Hellow VB!") (8)Mid("Hellow VB!", 4, 3) (9)Left("Hellow VB!", 3) (10)Val("16个加23个") (11)Str (12)UCase("Visual Basic") 二、 选择题 (1)可以同时删除字符串前导和尾部空格的函数是 。 A. Ltrim B. Rtrim C. Trim D. Mid (2)函数Int(Rnd(1) * 10)是在哪个范围产生随机整数 。 A. (0,1) B. (0,9) C. (1,10) D. (1,9) (3)数学式子sin25o写成Visual Basic 表达式是 。 B. Sin(25) C. Sin(25o) D. Sin(25*180) (4)表达式16/4 – 2^3 * 8/4 Mod 5\2的值是 。 A. 14 B. 4 C. 20 D. 2 (5)数学关系式103<≤x 表示成正确的VB 表达式为 。 A. 3<= x <10 B. x >= 3 And x<10 C. x>=3 Or x<10 D. 3<= x And <10

VB托盘程序详解

【转载】VB托盘程序详解 2007/11/25 20:53 1、新建立一个VB6工程,将Form1的ShowInTaskBar属性设置为False 2、菜单:工程--添加模块按“打开”这样就添加了一个新模块,名为Module1,保存为Module1.bas 3、在Module1中写下如下代码: Option Explicit Public Const MAX_TOOLTIP As Integer = 64 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 WM_MOUSEMOVE = &H200 Public Const WM_LBUTTONDOWN = &H201 Public Const WM_LBUTTONUP = &H202 Public Const WM_LBUTTONDBLCLK = &H203 Public Const WM_RBUTTONDOWN = &H204 Public Const WM_RBUTTONUP = &H205 Public Const WM_RBUTTONDBLCLK = &H206 Public Const SW_RESTORE = 9 Public Const SW_HIDE = 0 Public nfIconData As NOTIFYICONDATA Public Type NOTIFYICONDATA cbSize As Long hWnd As Long uID As Long uFlags As Long uCallbackMessage As Long hIcon As Long szTip As String * MAX_TOOLTIP End Type Public Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long Public Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long

电气工程师个人简历模板

电气工程师个人简历模板 ◆基本信息 姓名: 彭先生 目前所在:东莞年龄:34 户口所在:湖南国籍:中国 婚姻状况:已婚民族:汉族 诚信徽章:未申请身高:170cm 人才测评:未测评体重: 我的特长: ◆求职意向 人才类型:普通求职 应聘职位:工程/设备-经理/主管/工程师 工作年限:10职称: 求职类型:全职可到职日期:一个月 月薪要求:希望工作地区:广东省,, ◆工作经历 公司性质:外商独资所属行业:电子技术/半导体/集成电路担任职位:电气工程师

工作描述:1、对耗能高的动力设备进行优化节能改造,特别是已停产的老设备。如公司的美国约克冷冻机直接去掉滑阀,由变频器控制压缩机,达到节能与优化的目的。 2、对新增动力设备如空压机、冷冻机、中央空调、真空泵系统与净化车间控制设备、高低压配电系统等的设备招标选型,直到正常投入生产。同时制定严格的安全操作规程与保养、点检计划,保障设备安全运行。 3、公司纯水系统、污水处理系统的规划与维护、保养。根据制定的操作规程合理安排安全操作与维护保养,保障系统的安全,达到生产与国家环保要求。 离职原因: 中粮新沙粮油工业(东莞)有限公司起止年月:2004-03~2008-05 担任职位:电气主管 2、对精炼包装车间和浸出车间发油台的由PLC、变频器、触摸屏等工控元件控制的自控系统,由本人重新进行了设计,达到即提高了工作效率又优化了工艺。 4、做好维修人员的生产调度和培训工作及安全检查,对于技术上的难题给予技术性指导。同时做好易损件的申购工作,以备紧急情况之急需,保证生产。 离职原因: 汤姆逊多媒体(东莞)有限公司起止年月:2000-03~2004-03 公司性质:外商独资所属行业:通信/电信/网络设备 担任职位:电气工程师 工作描述:主要是塑料车间、生产部、仪器仪表的维护与安全检查,特别是自动化设备的维修与保养,PLC、变频器、伺服电机等自动化设备的设计与安全维护。 离职原因:

pb中实现系统托盘

pb 程序托盘化(taskbar status area) 一、涉及的API //托盘程序需要的API 1、shell_notifyicon(long dwmessage,ref nstr_notifyicondata lpdata) 功能:创建、修改、删除托盘图标 参数:dwmessage 0:创建托盘图标;1:修改托盘图标;2:删除图标 lpdata 结构体 结构体定义: long cbsize 结构体长度,固定为88; long hwnd 图标消息接收窗口; long uid 任务栏图标对应的应用程序定义的标识符; long uflags 结构体成员有效标志,1:hicon有效,2:ucallbackmessage有效,4:sztip有效,可以组合 long ucallbackmessage 返回给窗口hwnd的消息 long hicon 图标 character sztip[64] 鼠标移动到图标时显示的文字 pb声明: function integer shell_notifyicon (long dwmessage,ref nstr_notifyicondata lpdata) library "shell32" alias for "Shell_NotifyIconA" 2、loadimage(long hinst,string lpszName,long uType ,long cxDesired ,long cyDesired ,long fuLoad )

功能:装载图片 参数:hinst 包含要装载图片的模块实例的句柄,如果是OEM图片,则此参数为0 lpszName 图片文件名(带路径) uType 装载图片的类型,0:bitmap,2:cursor,1:icon cxDesired utype为1,2时表示图像的宽度(象素),如果utype为0则必须设为0 cyDesired utype为1,2时表示图像的高度(象素),如果utype为0则必须设为0 fuLoad 设为0 pb声明: function long loadimage (long hinst,string lpsz,long un1,long n1,long n2,long un2) library "user32" alias for "LoadImageA" 3、destroyicon(long hicon) 功能:销毁图片 参数:hicon 图片句柄 pb声明: function long destroyicon (long hicon) library "user32" alias for "DestroyIcon" 4、CreatePopupMenu() 功能:创建一个弹出菜单 pb声明:

计算机二级考试《VB》模拟试题及答案

计算机二级考试《VB》模拟试题及答案 2016计算机二级考试《VB》模拟试题及答案 一、基本操作题 (1)在名称为Forml、标题为“球类项目”且没有最大化和最小化按钮的窗体上画1个名称为Combol的组合框。组合框中的文本内容为空,表项内容有“乒乓球”、“羽毛球”和“网球”3项。运行后的窗体如图所示。 注意:存盘时必须存放在考生文件夹下,工程文件名为 sjtl.vbp,窗体文件名为sjtl.frm。 (2)在名称为Forml、标题为“转换”的窗体上,画1个名称为Shapel、边框宽度为3的形状。再画两个标题分别为“椭圆”和“圆”的命令按钮。如下图所示。 要求:编写适当的事件过程,使得单击“椭圆”按钮时,Shapel 的形状变换为椭圆;单击“圆”按钮时,Shapel的形状变换为圆。程序中不得使用变量,每个事件过程中只能写一条语句。 注意:存盘时必须存放在考生文件夹下,工程文件名为 sjr2.vbp,窗体文件名为sjr2.frm。 二、简单应用题 (1)在考生文件夹下有一个工程文件sjt3.vbp。窗体Forml上有两个标题分别是“读数据”和“查找”的命令按钮。请画1个名称为Textl、初始值为空的文本框,该文本框允许显示多行内容,且有垂直滚动条,如图所示。程序功能如下。 ①在考生文件夹下的in.3.dat文件中存有100个正整数。单击“读数据”按钮,则将文件in3.dat中的数据读入数组a中。 ②单击“查找”按钮,则查找数组a中所有为7的倍数的数据,并将这些数据顺次显示在Textl文本框内(数据之间用空格隔开)。

“读数据”按钮的Click事件过程已经给出,请编写程序完成“查找”按钮的Click事件过程,实现上述功能。 注意:考生不得修改窗体文件中已经存在的控件和程序,在结束程序运行之前,必须使用“查找”按钮完成查找过程,且必须用窗 体右上角的关闭按钮结束程序,否则无成绩。最后将程序按原文件 名存盘。 (2)考生文件夹下有一个工程文件sit4.vbp。在窗体Forml上有 两个名称为Commandl和Command2、标题分别为“重输”和“查找”的命令按钮。程序功能如下。 单击“重输”按钮,则清空Textl中的`内容,等待用户输入由 空格隔开的若干个英文单词;单击“查找”按钮,则找出Textl中最 长的单词,并将其显示在Text2中。某一次的运行效果如图所示。 请将“查找”按钮的Click事件过程中的注释符去掉,把?改为正确 内容,以实现上述程序功能。 注意:考生不得修改窗体文件中已经存在的控件和程序,最后将程序按原文件名存盘。 三、综合应用题 考生文件夹下有一个工程文件sjt.s.vbp。在窗体Forml上有两 个标题分别是“产生数据”和“重新排列”的命令按钮,有两个标 题为“原始数据”和“排列数据”的标签。程序功能如下。 ①单击“产生数据”按钮,则随机产生20个一位整数,存人数 组a中,并同时显示在Textl中。 ②单击“重新排列”按钮,则重新排列数组a中的元素:使等值的元素相邻存放,并且保持它们在数组a中首次出现的相对次序;最 后将排列结果显示在Text2中。某一次运行结果如图所示。 请将“重新排列”按钮的Click事件过程中的注释符去掉,把“?”改为正确内容,以实现上述程序功能。

用VB6.0实现将窗体最小化到系统托盘区

用VB6.0实现将窗体最小化到系统托盘区 使用说明:共有两个方法,经个人实际测试(环境:xpsp3 vb6.0)第二个控件法最有效果,第一个方法在启动时确实在右下角,但是弹出后再次最小化就跑到屏幕左下角了,无法最小化,不知道是啥原因,希望大家改进代码。本人力荐第二种小巧有效简单的方法。 方法一 托盘,亦即程序最小化后程序图标隐藏到屏幕右下角的任务栏里。这种最小化方法比普通的最小化节约空间,因此备受欢迎,很多软件都具有这样的功能。在VB中,可用API 函数来实现托盘功能,但比较复杂,不太好操作。 相对而言采用一种非常简单易行的方法:控件法,才是最适合最方便的。下面要使用已被微软封装好的控件:csystray1(名称可自定)。 说到控件,大家可能要皱眉头了:去哪找呀?放心!这个控件就躺在你的VB安装盘里(目录为:COMMON\TOOLS\VB\UNSUPPRT\SYSTRAY)!不过,得处理一下:请在Tool 文件夹里查找一个名叫Systray的目录,将它拷贝到硬盘,用VB打开该目录下的工程,必要的话可作些改进(如更换图标、添加功能等),然后编译成ocx控件,可以随意命名。为方便使用起见,最好编译到Windows\System目录下。好了,现在我们就可以在我们的程序中使用此控件来轻松实现托盘功能了。vb中添加控件的方法就不用我说了吧? 控件的属性和事件浅析: 该控件的InTray属性是用来设置是否显示在托盘中,True为显示在托盘,False为不显示; 该控件的TrayIcon属性是在托盘中显示的图标式样; 该控件的TrayTip属性是鼠标移动到该控件上面时,显示的提示文字; 该控件的重要事件是几个我们常用的鼠标事件:按下、放开、移动、双击,编程时就是利用这些事件达到在任务栏中控制程序的目的。 源代码如下: '使程序最小化时显示到系统托盘 Private Sub Form_Resize() If Me.WindowState = 1 Then '如程序为最小化则—— cSysTray1.InTray = True '隐藏到任务栏 Me.Visible = False '让程序界面不可见 End If End Sub '点击托盘图标后,让程序窗体显示出来 Private Sub CsysTray1_MouseDown(Button As Integer, Id As Long) Me.WindowState = 0 '程序回复到Normal状态 Me.Visible = True '从任务栏中清除图标 cSysTray1.InTray = False '令程序界面可见 Me.setfocus End Sub

VB程序设计试题及答案一

V B程序设计试题及答案(一) 一、单选题 1. VB6.0是一种面向B 的编程环境。 (A) 机器(B) 对象 (C) 过程(D) 应用 2. 要使FormI窗体的标题栏显示"欢迎使用VB",以下D 语句是正确的。 (A) Forml.Caption=“欢迎使用VB” (B) Forml.Caption='欢迎使用VB' (C) Forml.Caption=欢迎使用VB (D) Forml.Caption="欢迎使用VB" 3. 若要使命令按钮不可操作,要对A 属性进行设置。 (A) EnabIed (B)Visible (C) Backcolor (D)Caption 4. 如果在窗体上已经创建了一个文本框对象TextI,可以通过C 事件获得输入键值的ASCII码。 (A) Change (B) LostFocus (C) KeyPress (D) GotFocus 5. 下面A 是合法的变量名。 (A) X_yz (B) 123ab。(C) integer (D) X-Y 6. 以下关系表达式中,其值为False的是A 。 (A) "ABC">"AbC" (B) "女">"男" (C) "BASIC"=UCase("basic) (D) "123"<"23" 7. 为了给x、y、z三个变量赋初值1,下面正确的赋值语句是A 。 (A) x=1:y=1:z=1 (B) x=1,y=1,z=1 (C) x=y=z=1 (D) xyz=1 8. VB提供了结构化程序设计的三种基本结构,三种基本结构是D 。 (A)递归结构、选择结构、循环结构 (B)选择结构、过程结构、顺序结构 (C)过程结构、输入输出结构、转向结构 (D)选择结构、循环结构、顺序结构 9. 下面If语句统计满足性别为男、职称为副教授以上、年龄小于40岁条件的人数,不正确的语句是 D 。 (A) If sex="男" And age=4O And InStr(duty,"教授")>O Then n=n+l (B) If sex="男" And age=4O And (duty="教授" Or duty="副教授") Then n=n+l (C) If sex="男" And age=4O And Right(duty,2)="教授" Then n=n+l (D) If sex="男" And age=4O And duty="教授" And duty="副教授" Then n=n+l 10.下列关于Do…Loop循环结构执行循环次数的描述正确的是D 。 (A) Do While…Loop循环和Do…Loop Until循环至少都执行一次 (B) Do While…Loop循环和Do…Loop Until循环可能都不执行 (C) Do While…Loop循环至少执行一次和Do…Loop Until循环可能不执行 (D) Do While…Loop循环可能不执行和Do…Loop Until循环至少执行一次 11.以下B 是正确的For…Next结构。 (A) For x=1 To Step 10 (B) For x=3 To -3 Step -3 ……

VB程序基本知识学案

主题:程序基本知识 数据类型、常量、变量、函数和表达式 一、点击考点: 1、知道常用的数据类型、变量、常量的含义;学会定义常量、变量的数据类型。 2、知道程序中运算符、函数、表达式的表示方式,能够转换数学表达式为程序接受的 表达式。 3、掌握程序包括的四部分。 二、学习目标: 1、掌握数据类型及其特点; 2、知道常量、变量的声明格式;学会定义常量、变量 3、知道程序中运算符、函数、表达式的表示方式,能够转换数学表达式为程序接受的表达式。 4、知道程序包括的四部分内容。 三、学习方式: 在老师引导下的自主学习,互相评价做题效果 四、考点注解 1、知道常用的数据类型、变量、常量的含义;学会定义常量、变量的数据类型。 (1)VB数据类型(阅读课本27页的表) (2)常量 在程序执行过程中,其值不能改变的量称为常量。常量可以直接用一个数来表示,称为常数(或称为直接常量),也可以用一个符号来表示,称为符号常量。 常量的定义格式如下: Const <常量名> [As 数据类型]=表达式 (3)变量 在程序执行过程中,其值可以改变的量称为变量。 1)变量的命名规则 ?变量名首字符必须是字母; ?变量名只能由字母、数字和下划线组成; ?变量名不能使用VB中的关键字(保留字); ?变量名在同一个作用域内必须唯一; ?变量名长度不超过255; ?变量的命名最好还应遵守一定的编程约定。 3)变量定义语句 Dim <变量名> As <类型> [, <变量名> As <类型>]… 2、知道程序中运算符、函数、表达式的表示方式,能够转换数学表达式为程序接受的表达式。 运算符是在代码中对各种数据进行运算的符号。例如,有进行加、减、乘、除算术运算的运算符,有进行与、或、非、异或逻辑运算的运算符。 表达式是由运算符和运算对象及圆括号组成的一个序列,它是由常量、变量、函数等用运算符连接而成的式子。表达式是构成程序代码的最基本要素。 1)赋值运算符 赋值语句的语法格式为:

VB学习总结

1.2.1 VB简介 VB:Visual Basic BASIC:Beginner’s All-Purpose Symbolic Instruction Code BASIC语言是专门为初学者设计的计算机语言,于1964年问世。最初只有十几条语句,由于简单易学而受到了用户的欢迎,很快就应用于各个领域。随着计算机科学技术的发展,计算机厂商在原有的基础上不断的添加新的功能,进行扩展强化,各种BASIC版本应运而生,使它成为最常用的计算机程序设计语言。 1987年Microsoft公司开发了Quick BASIC,它克服了原有BASIC结构化差和运算速度慢的缺点,并且在功能上大为扩展,具有编辑、运行和调试的集成环境。Quick BASIC兼容以前的传统BASIC。 VB是Microsoft公司在Quick BASIC的基础上为开发Windows应用程序而提供的强有力的开发环境和工具,是具有很好的图形用户界面(Graphic User Interface,简称GUI)的程序设计语言。它采用面向对象和事件驱动的程序设计两种新机制,把过程化和结构化编程集合在一起。正是由于它在应用程序开发中的图形化构思,使得开发者能非常容易地创建一个窗口(在VB中称为窗体—Form),然后从VB工具箱选择控件放在窗体内,无需编写程序。就如同目前盖房子所用的门、窗、水泥、钢筋、砖等,都是现成的材料,只要到建筑现场组合就可以了。用VB设计程序就好比现代的建筑师采用现代科技的产品,而用传统DOS (Disk Operating System)下的BASIC的就如同早先的工匠,一砖、一瓦、一木都要自己动手。 Visual Basic for Windows是一种具有良好图形用户界面(GUI)的程序设计语言,同时又是一种完全支持面向对象程序设计的语言。 Visual是指开发图形用户界面(GUI)的方法,不需要编写大量代码去描述界面元素的外观和位置,而只要把预先建立的对象拖放到窗体上即可。这种直观的编程方法,也叫做可视化编程。Visual的意思是“视觉的”或“可视的”,也就是直观的编程方法。就像使用“画图”之类的绘图程序,通过选择画图工具来画图一样。 Basic是指BASIC语言,之所以叫做“Visual Basic”就是因为它使用了BASIC语言作为代码。VB在原有BASIC语言的基础上进一步发展,至今包含了数百条语句、函数及关 键词,其中很多与Windows GUI有直接关系。 1.2.2 VB的发展过程 1991年:为了简化Windows应用程序的开发,Microsoft公司推出了Visual Basic 1.0。 1992年:Microsoft公司推出了Visual Basic 2.0。 1993年:Microsoft公司推出了Visual Basic 3.0。 1995年:随着Windows95的发布,Visual Basic 4.0也随之推出。 1997年:Microsoft公司开始推出Windows开发工具套件Microsoft Visual Studio 1.0,其中包括了Visual Basic 5.0。

VB6.0实现窗体最小化时到系统托盘区

VB6.0将窗体最小化到系统托盘区 使用说明:共有两个方法,经个人实际测试(环境:xpsp3 vb6.0)第二个控件法最有效果,第一个方法在启动时确实在右下角,但是弹出后再次最小化就跑到屏幕左下角了,无法最小化,不知道是啥原因,希望大家改进代码。本人力荐第二种小巧有效简单的方法。 ---------------------------------------------------------------------------------------------------- 方法一 托盘,亦即程序最小化后程序图标隐藏到屏幕右下角的任务栏里。这种最小化方法比普通的最小化节约空间,因此备受欢迎,很多软件都具有这样的功能。在VB中,可用API 函数来实现托盘功能,但比较复杂,不太好操作。 相对而言采用一种非常简单易行的方法:控件法,才是最适合最方便的。下面要使用已被微软封装好的控件:csystray1(名称可自定)。 说到控件,大家可能要皱眉头了:去哪找呀?放心!这个控件就躺在你的VB安装盘里(目录为:COMMON\TOOLS\VB\UNSUPPRT\SYSTRAY)!不过,得处理一下:请在Tool 文件夹里查找一个名叫Systray的目录,将它拷贝到硬盘,用VB打开该目录下的工程,必要的话可作些改进(如更换图标、添加功能等),然后编译成ocx控件,可以随意命名。为方便使用起见,最好编译到Windows\System目录下。好了,现在我们就可以在我们的程序中使用此控件来轻松实现托盘功能了。vb中添加控件的方法就不用我说了吧? ---------------------------------------------------------------------------------------------------------- 控件的属性和事件浅析: 该控件的InTray属性是用来设置是否显示在托盘中,True为显示在托盘,False为不显示; 该控件的TrayIcon属性是在托盘中显示的图标式样; 该控件的TrayTip属性是鼠标移动到该控件上面时,显示的提示文字; 该控件的重要事件是几个我们常用的鼠标事件:按下、放开、移动、双击,编程时就是利用这些事件达到在任务栏中控制程序的目的。 ------------------------------------------------------------------------------------------------------- 源代码如下: '使程序最小化时显示到系统托盘 Private Sub Form_Resize() If Me.WindowState = 1 Then '如程序为最小化则—— cSysTray1.InTray = True '隐藏到任务栏 Me.Visible = False '让程序界面不可见 End If End Sub '点击托盘图标后,让程序窗体显示出来 Private Sub CsysTray1_MouseDown(Button As Integer, Id As Long) Me.WindowState = 0 '程序回复到Normal状态 Me.Visible = True '从任务栏中清除图标 cSysTray1.InTray = False '令程序界面可见

VB程序的三种基本结构复习课教学案例

《VB程序的三种基本控制结构》 复习课教案 平桂高级中学陀君一、案例背景信息 模块:算法与程序设计 年级:高一年级 所用教材版本:粤教版《算法与程序设计》 学时数:1课时(40分钟) 二、教学设计: 1、教学目标: 知识与技能:能根据流程图正确区分VB程序的三种基本结构,并记住相关语句格式,能编写出简单明了的程序关键代码; 过程与方法:充分认识VB程序中三种基本结构的实用性,体会生活中算法的存在和精彩。 情感态度与价值观:培养学生在学习过程中积极思考、自我探究的能力和学以致用的意识。 2、教学重点:顺序、选择(分支)和循环三种基本结构的区分及其对应的VB 语句的使用。 教学难点:for循环结构,各类语句关键代码的编写。 三、教学实录 1.复习引入 师:我们之前学过VB的基本结构,通常程序有三种最基本的结构,是哪三种结构? 大部分学生在底下小声回答,师让某生回答,说:顺序模式、分支模式、循环模式。

师:分支模式也可称为? 部分学生:选择模式。 师:非常好,接下来看下这三种结构的流程图,然后分别指出这三个流程图是什么结构。(出示三种流程图结构) 2.正题 (1)顺序结构P38: 执行第一条语句后,必然从第二条语句继续,顺序执行所有的语句,直到执行完最后一条语句为止。 例1:例1、 a=1 b=2 c=a+b a=c-a b=c-a

最后,变量b的值是( 1 ) (2)选择结构(分支结构):P42 根据条件判断其是否成立,如果成立执行成立的分支;否则执行另一分支。其一般形式为: If 条件Then 语句序列1 Else 语句序列2 End If 单行形式为: If 条件Then 语句组1 Else 语句组2 例2、a =10 If a>=10 Then a=a+1 Else a=a-1 End If 该程序段运行后,变量a的值是( D ) A. 8 B. 9 C. 10 D. 11 【师读题,学生思考。请同学回答,让同学们思考a=5结果是多少】 (3)循环结构:P51 根据条件判断其是否成立,如果条件成立则重复执行循环体(循环结构中某语句序列),直到条件不成立,退出循环结构为止。 循环结构的常用形式为: for 循环变量= 初值to 终值[step 步长] [循环体] next [循环变量]

c最小化托盘

(一)原理 程序实现:最小化时隐藏至托盘,双击显示窗口,右键弹出快捷菜单“退出”并添加了响应函数。 1、托盘化的原理:首先要将窗口隐藏,然后在右下角托盘中绘制图标。 2、恢复的原理:将窗口显示,再将托盘中的图片删除。 (二)总体程序实现 1、首先建立一个基于对话框的MFC程序"CTrayDlg"。 然后在TrayDlg.h文件里加入自定义消息WM_SHOWTASK: #define WM_SHOWTASK (WM_USER + 0x100)//一般数值大于 100//{{AFX_MSG(CTrayDlg) afx_msg LRESULT OnShowTask(WPARAM wParam,LPARAMlParam);//}}AFX_MSG DECLARE_MESSAGE_MAP() 2、在TrayDlg.cpp文件里加入如下代码: BEGIN_MESSAGE_MAP(CTrayDlg, CDialog) //{{AFX_MSG_MAP(CTrayDlg) 中间加入消息声明: ON_MESSAGE(WM_SHOWTASK,OnShowTask) //}}AFX_MSG_MAP END_MESSAGE_MAP() 3、在CTrayDlg的::OnSysCommand(UINT nID, LPARAM lParam)函数体中增加一个命令响应:

if(nID==SC_MINIMIZE) ToTray();//最小化到托盘的函数 (三)具体函数内容 1、最小化到托盘函数 TrayDlg.h中添加函数声明: voidToTray(); TrayDlg.cpp中定义函数体: voidCTrayDlg::ToTray() { NOTIFYICONDATAnid; //NOTIFYICONDATA结构包含了系统用来处理托盘图标的信息, //它包括选择的图标、回调消息、提示消息和图标对应的窗口等内容。 nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);//以字节为单位的这个结构的大小 nid.hWnd=this->m_hWnd;//接收托盘图标通知消息的窗口句柄 nid.uID=IDR_MAINFRAME;//应用程序定义的该图标的ID号 nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP ;//设置该图标的属性 nid.uCallbackMessage=WM_SHOWTASK;//应用程序定义的消息ID号,此消息传递给hWnd nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRA ME));//图标的句柄 strcpy(nid.szTip,"我的托盘我作主");//鼠标停留在图标上显示的提示信息Shell_NotifyIcon(NIM_ADD,&nid);//在托盘区添加图标de函数,函数说明见文章附录

相关主题