vb窗体最小化问题

作者&投稿:纵金 (若有异议请与网页底部的电邮联系)
VB 窗体最小化与还原~

VB程序运行时,把窗口最大化后,窗口是不能被调整大小的(最小化除外),在程序中也不行。
设计时,可以正常窗口呈现,并屏蔽窗体的最大化按钮,自己做个替代的“最大化”按钮,实现窗体放大。当点击“最大化”时,触发Form的ReSize事件,在Form的ReSize事件中,写入:
Private Sub Form_Resize()
Form1.Left = 0
Form1.Top = 0
Form1.Width = Screen.Width
Form1.Height = Screen.Height - GetTaskbarHeight
End Sub
(当程序启动时,也会同时触发Form_ReSize的)

其中,GetTaskbarHeight的获取要写进模块文件中:
Public Declare Function SystemParametersInfo Lib "user32" Alias "SystemParametersInfoA" (ByVal uAction As Long, ByVal uParam As Long, ByRef lpvParam As Any, ByVal fuWinIni As Long) As Long
Public Const SPI_GETWORKAREA = 48


Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Public Function GetTaskbarHeight() As Integer
Dim lRes As Long
Dim rectVal As RECT

lRes = SystemParametersInfo(SPI_GETWORKAREA, 0, rectVal, 0)
GetTaskbarHeight = ((Screen.Height / Screen.TwipsPerPixelX) -rectVal.Bottom) * Screen.TwipsPerPixelX
End Function

但是,这样做还要考虑到有些人把任务栏移到其他地方的,比如左侧,右侧,甚至隐藏,所以,也是很麻烦的哦

1,打开VB,新建工程。
2,将窗体的BorderStyle设为1,即指定大小模式,不能更改。

3,将MinButton设为True ,即允许最小化。

4,再加上默认存在的关闭,程序运行后窗体就只能关闭、最小化和还原且尺寸固定了。

给你一个类模块吧,呵呵,我用了好久的,能最小化到托盘,还能弹出气球提示,这几天我冲分类达人,回答得好再加些分吧,感激不尽!
再把下面的代码用记事本保存成frmTray.frm
添加到工程里
==========Form1===============
VERSION 5.00
Begin VB.Form Form1
Caption = "Form1"
ClientHeight = 3090
ClientLeft = 60
ClientTop = 450
ClientWidth = 4680
LinkTopic = "Form1"
ScaleHeight = 3090
ScaleWidth = 4680
StartUpPosition = 3 '窗口缺省
Begin VB.CommandButton Command1
Caption = "Command1"
Height = 495
Left = 1560
TabIndex = 3
Top = 1680
Width = 1215
End
Begin VB.PictureBox Picture1
Height = 495
Left = 1560
ScaleHeight = 435
ScaleWidth = 1155
TabIndex = 2
Top = 360
Width = 1215
End
Begin VB.TextBox Text2
Height = 270
Left = 1560
TabIndex = 1
Text = "Text2"
Top = 1320
Width = 1215
End
Begin VB.TextBox Text1
Height = 270
Left = 1560
TabIndex = 0
Text = "Text1"
Top = 960
Width = 1215
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Private Const WM_LBUTTONDOWN = &H201

Dim Tray As New TrayClass

Private Sub Command1_Click()
Tray.PopupBallon Text1, Text2, NIIF_INFO
End Sub

Private Sub Form_Load()
Tray.AddTray Icon, Picture1.hWnd, , "托盘示例"
End Sub

Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Select Case X / 15
Case WM_LBUTTONDOWN
If Me.Visible Then Tray.SendFormToTray Icon, Picture1.hWnd, Me.hWnd, , "托盘示例" Else Tray.RestoreFormFromTray False
End Select
End Sub

再把下面的代码用记事本保存成TrayClass.cls
添加到工程里
==============TrayClass.cls================
VERSION 1.0 CLASS
BEGIN
MultiUse = -1 'True
Persistable = 0 'NotPersistable
DataBindingBehavior = 0 'vbNone
DataSourceBehavior = 0 'vbNone
MTSTransactionMode = 0 'NotAnMTSObject
END
Attribute VB_Name = "TrayClass"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Private Declare Function DrawAnimatedRects Lib "user32" (ByVal hWnd As Long, ByVal idAni As Long, lprcFrom As RECT, lprcTo As RECT) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Private Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As RECT) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function RegisterWindowMessage Lib "user32" Alias "RegisterWindowMessageA" (ByVal lpString As String) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Private Declare Function BringWindowToTop Lib "user32" (ByVal hWnd 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
Private Declare Function AttachThreadInput Lib "user32" (ByVal idAttach As Long, ByVal idAttachTo As Long, ByVal fAttach As Long) As Long
Private Declare Function GetCurrentThreadId Lib "kernel32" () As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long

Private Const NIS_HIDDEN = &H1
Private Const NIS_SHAREDICON = &H2
Private Const WM_USER = &H400
Private Const NIF_ICON As Long = &H2
Private Const NIF_INFO As Long = &H10
Private Const NIF_MESSAGE As Long = &H1
Private Const NIF_STATE As Long = &H8
Private Const NIF_TIP As Long = &H4
Private Const NIM_ADD As Long = &H0
Private Const NIM_DELETE As Long = &H2
Private Const NIM_MODIFY As Long = &H1
Private Const NIM_SETFOCUS As Long = &H3
Private Const NIM_SETVERSION As Long = &H4
Private Const SW_HIDE = 0
Private Const SW_SHOW = 5
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const WM_MBUTTONDOWN = &H207
Private Const WM_MBUTTONUP = &H208
Private Const WM_RBUTTONDOWN = &H204
Private Const WM_RBUTTONUP = &H205
Private Const WM_LBUTTONDBLCLK = &H203
Private Const WM_MBUTTONDBLCLK = &H209
Private Const WM_RBUTTONDBLCLK = &H206
Private Const WM_SHOWWINDOW = &H18
Private Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_MINIMIZE = &H20000000
Private Const WS_MAXIMIZE = &H1000000
Private Const CS_NOCLOSE = &H200
Private Const GWL_WNDPROC = (-4)
Private Const GWL_STYLE = (-16)

Public Enum BallIIcon
NIIF_NONE = &H0
NIIF_INFO = &H1
NIIF_WARNING = &H2
NIIF_ERROR = &H3
End Enum

Public Enum TrayCallBackConstants
TRAY_CALLBACK = (WM_USER + 1001&)
WM_MOUSEMOVE = &H200
End Enum

Private Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uId As Long
uFlags As Long
uCallBackMessage As Long
hIcon As Long
szTip As String * 128
dwState As Long
dwStateMask As Long
szInfo As String * 256
uTimeoutOrVersion As Long
szInfoTitle As String * 64
dwInfoFlags As Long
End Type

Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type

Dim RCWnd As RECT, RCTray As RECT, NIMData As NOTIFYICONDATA, Trayed As Boolean, OWP As Long, frmOwner As Form
Dim m_hWndMessageReceive As Long, m_hWndOwner As Long, m_TrayTip As String, m_TrayIcon As Long, m_CallBackType As Long

Private Function RebuildRect()
Dim hWndTarget As Long
hWndTarget = FindWindow("Shell_TrayWnd", vbNullString)
hWndTarget = FindWindowEx(hWndTarget, 0, "TrayNotifyWnd", vbNullString)
GetWindowRect m_hWndOwner, RCWnd
GetWindowRect hWndTarget, RCTray
End Function

Private Function fAction(ToTray As Boolean)
RebuildRect
If ToTray Then
DrawAnimatedRects m_hWndOwner, 3, RCWnd, RCTray
Else
DrawAnimatedRects m_hWndOwner, 3, RCTray, RCWnd
End If
End Function

Private Function InitTray()
Dim X As Long, T As Long
NIMData.uFlags = NIF_ICON Or NIF_TIP Or NIF_MESSAGE
If Not Trayed Then
Do
NIMData.uId = CLng(Rnd * 32768)
X = Shell_NotifyIcon(NIM_ADD, NIMData)
T = T + 1
If T > 50 Then Exit Function
Loop Until X <> 0
Trayed = True
Else
Shell_NotifyIcon NIM_MODIFY, NIMData
End If
End Function

Public Function TestFunc()
TestFunc = FindWindow("Shell_TrayWnd", vbNullString)
TestFunc = FindWindowEx(TestFunc, 0, "TrayNotifyWnd", "TrayNotifyWnd")
End Function

Public Function SendFormToTray(IconHandel As Long, hWndMessageReceive As Long, hWndOwner As Long, Optional CallBackType As TrayCallBackConstants = WM_MOUSEMOVE, Optional TrayTip As Variant = "Tray") As Long
If m_hWndOwner <> 0 Then Exit Function
m_hWndMessageReceive = hWndMessageReceive
m_CallBackType = CallBackType
m_hWndOwner = hWndOwner
fAction True
AddTray IconHandel, m_hWndMessageReceive, CallBackType, TrayTip
ShowWindow m_hWndOwner, SW_HIDE
End Function

Public Function RestoreFormFromTray(Optional bRemove As Boolean = True)

fAction False
If m_hWndOwner = 0 Then Exit Function
If bRemove Then RemoveTray
Dim ThreadFocus As Long, ThreadForm As Long
ThreadFocus = GetWindowThreadProcessId(GetForegroundWindow, 0)
ThreadForm = GetWindowThreadProcessId(m_hWndOwner, GetCurrentThreadId)
If ThreadFocus <> ThreadForm Then AttachThreadInput ThreadFocus, ThreadForm, True
SetWindowPos m_hWndOwner, 0, 0, 0, 0, 0, &H40 + 3
BringWindowToTop m_hWndOwner
SetForegroundWindow m_hWndOwner
DoEvents
If ThreadFocus <> ThreadForm Then AttachThreadInput ThreadFocus, ThreadForm, False
m_hWndOwner = 0
End Function

Public Function AddTray(IconHandel As Long, hWndMessageReceive As Long, Optional CallBackType As TrayCallBackConstants = WM_MOUSEMOVE, Optional TrayTip As Variant = "Tray") As Long
m_hWndMessageReceive = hWndMessageReceive
m_CallBackType = CallBackType
NIMData.cbSize = Len(NIMData)
NIMData.hWnd = m_hWndMessageReceive
If Not IsMissing(TrayTip) Then m_TrayTip = CStr(TrayTip) & vbNullChar
NIMData.szTip = m_TrayTip
NIMData.hIcon = CLng(IconHandel)
m_TrayIcon = NIMData.hIcon
NIMData.uCallBackMessage = m_CallBackType
InitTray
End Function

Public Function RemoveTray()
Class_Terminate
End Function

Public Function RebuildTray()
RemoveTray
InitTray
End Function

Public Function PopupBallon(Prompt As String, Optional Title As String, Optional DisplayIcon As BallIIcon, Optional TimeOut As Long = 10000) As Long
NIMData.szInfo = Prompt & vbNullChar
NIMData.szInfoTitle = Title & vbNullChar
NIMData.dwInfoFlags = DisplayIcon
NIMData.uFlags = NIF_INFO
NIMData.uTimeoutOrVersion = TimeOut
Shell_NotifyIcon NIM_MODIFY, NIMData
End Function

Public Property Get TrayTip() As String
TrayTip = m_TrayTip
End Property

Public Property Let TrayTip(ByVal newTip As String)
m_TrayTip = newTip
NIMData.szTip = newTip & vbNullChar
NIMData.uFlags = NIF_TIP
Shell_NotifyIcon NIM_MODIFY, NIMData
End Property

Public Property Get TrayIcon() As Long
TrayTip = m_TrayTip
End Property

Public Property Let TrayIcon(ByVal newIcon As Long)
m_TrayIcon = newIcon
NIMData.hIcon = newIcon
NIMData.uFlags = NIF_ICON
Shell_NotifyIcon NIM_MODIFY, NIMData
End Property

Public Property Get TaskBarCreateEvent() As Long
Static h As Long
If h = 0 Then h = RegisterWindowMessage("TaskbarCreated")
TaskBarCreateEvent = h
End Property

Private Sub Class_Terminate()
On Error Resume Next
Shell_NotifyIcon NIM_DELETE, NIMData
Trayed = False
End Sub

由于 x / Screen.TwipsPerPixelX得到的值是恒定的,与Const WM_LBUTTONUP = &H202 进行比较的。窗体宽度的容忍值也就只有这么大,所以,即便是你调X或者WM_LBUTTONUP变小也无济于事。因为只要窗体宽度大于x / Screen.TwipsPerPixelX的值,你的 Form_MouseMove 事件便失效。

解决办法

窗体上放一个 picturebox 的控件,然后把 浏览器对象赋予 pictureBOX 控件对象中即可。

form_load事件里加上
Set Me.WebBrowser1.Container = Me.picture

Private Sub Timer1_Timer()
Me.Caption = WebBrowser1.LocationName

If InStr(Me.Caption, "赢客服-管理端") > 0 Then
Me.Width = 11700
Me.Height = 9100
WebBrowser1.Width = 11700
WebBrowser1.Height = 9100
pic.Width = 11700
pic.Height = 9100
WebBrowser1.ToolBar = 0
Me.Left = (Screen.Width - Me.Width) / 2
Me.Top = (Screen.Height - Me.Height) / 2
Timer1.Enabled = False
End If
End Sub

除了把下面代码替换相应代码外,其他代码不变

Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 And Me.WindowState = 1 Then
Me.WindowState = 0 '程序回复到Normal状态
Me.Visible = True '从任务栏中清除图标
Call Shell_NotifyIcon(NIM_DELETE, nfIconData) '退出图标
End If
End Sub


vb窗体最小化问题
我要的效果是从窗体登陆后,点击最小化按钮,让窗体最小化到系统托盘,可是现在的却只能点开的时候最小化可以,然后也可以恢复,当登陆后就只能最小化到系统托盘,却不能回复窗口。希... 我要的效果是从窗体登陆后,点击最小化按钮,让窗体最小化到系统托盘,可是现在的却只能点开的时候最小化可以,然后也可以恢复,...

vb 单机任务栏的窗口不能最小化
当borderstyle=none时,窗体就不能像borderstyle=sizable那样,在任务栏点窗口就可以最小化和还原窗口了,请问怎么解决因为我做的窗体不能有边框,自己做的按钮,这样就不能通过任务栏点击... 当borderstyle=none时,窗体就不能像borderstyle=sizable 那样,在任务栏点窗口就可以最小化和还原窗口了,请问怎么解决因为我做...

access vba 控制窗体最小化或最大化的问题
这个问题难点在于窗体状态的判断上,至于DoCmd.Minimize只能作用于当前窗体其实好办,将需要最小化的窗体设置为当前窗体后就可以使用了。由于ACCESS VBA没有WindowState属性,因此要判断窗体是否处于最小化状态我们需要借助WINDOWS API函数。下面是具体解决方案:1)新建一个模块,取名“模块1“将下列代码复制黏...

当窗体最小化时缩小为一个图标,设置这个图标的属性是( )。
【答案】:B B) 【解析】Mouselcon属性用于设置自定义的鼠标图标;Icon属性用于设置窗体最小化时的图标;Picture属性用于设置在对象中显示一个图形;MousePointer属性用于设置指示在运行时当鼠标移动到对象的一个特定部分时,被显示的鼠标指针的类型。因此本题选项B正确。

winform 窗体最小化后内存占用变小,如何启动后最小化并且释放内存
将子窗体写到一个线程中即可!A主窗体,B子窗体 private delegate dialogresult showB();private void show(object obj){ Form f=(Form)obj;showB=f.showdialog();f.invok(showB);} 在弹出窗体事件中 new thread(show)。start(new B());这样,B窗体将和A窗体相互独立互不影响 ...

电脑问题,打开两个窗口,A和B,把B最小化了,B还显示在那里,卡住了_百度...
网速问题可能有影响,电脑系统问题,可以重装系统,电脑装的软件太多了,存储的东西多了等,可以按ctrl+alt+delete,结束A和B的任务

关于VB窗体的问题
1)把controlBox设置为False,可以使最大化、最小化、关闭按钮不可见。2)如果想使关闭按钮失效,而不影响最大化、最小化,可以使用下列代码:Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)If UnloadMode = 0 Then Cancel = True End If End Sub 这时,最好在窗体上添加一...

关于VB使最小化按钮失效的问题
。。Dim prevState Private Sub Form_Load()prevState = Me.WindowState End Sub Private Sub Form_Resize()If Me.WindowState = vbMinimized Then Me.WindowState = prevState End If prevState = Me.WindowState End Sub 或者连假象都不需要制造的话就直接设置窗体的最小化按钮为false吧。。。

经常一按B键就IE就关闭,QQ聊天窗口就最小化,HP笔记本ProBook4411s_百度...
您好,感谢您选择惠普产品。建议您连接外接键盘测试一下:a.如果外接键盘问题依旧,不排除和笔记本软件方面相关,更新驱动后无效,则建议您备份数据,全盘格式化,重新安装原版操作系统;b.如果外接键盘正常,建议您恢复bios默认值:开机(或重启)时,不停点击F10进入BIOS,选择file---restore defaults---...

VB做的窗体里面有一个最大化,最小化。还有个关闭!
'需一个Command Button Private Declare Function GetSystemMenu Lib "User32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long Private Declare Function DeleteMenu Lib "User32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long Private Declare ...

钢城区13965993317: 在VB中,如何使窗体以最小化方式运行? -
希垄乐武: 首先,打开你要设置窗体的属性窗口. 再找到WindowState属性,设置WindowState = 1.

钢城区13965993317: VB 窗体最小化 -
希垄乐武: 窗体属性设置的问题,很简单.窗体的属性设置里有一个 ShowInTaskbar,用于决定一个窗体是否在任务栏上显示,你把Form2的ShowInTaskbar设为True就可以了.

钢城区13965993317: VB 窗体最小化与还原 -
希垄乐武: VB程序运行时,把窗口最大化后,窗口是不能被调整大小的(最小化除外),在程序中也不行.设计时,可以正常窗口呈现,并屏蔽窗体的最大化按钮,自己做个替代的“最大化”按钮,实现窗体放大.当点击“最大化”时,触发Form的...

钢城区13965993317: VB窗体最小化 -
希垄乐武: 要一个窗体,一个模块窗体内输入Private Sub Form_Load() prevWndProc = GetWindowLong(Me.hWnd, GWL_WNDPROC) SetWindowLong Me.hWnd, GWL_WNDPROC, AddressOf WndProc Dim nid As NOTIFYICONDATA nid.cbSize = Len(...

钢城区13965993317: vb 窗口最小化时参数是怎么样的呢?(请见详细问题) -
希垄乐武: 最小化是窗体的一种特殊状态,并不改变控件大小,只是把窗体隐藏起来了,所以一般这么写:Private Sub Form_Resize() If Me.WindowState <> vbMinimized Then '不是最小化状态'改变控件大小 End if end sub

钢城区13965993317: 为什么我的vb程序运行后窗体总是自动最小化?我再打开后上面画的图形就显示不出来了.求高手解答! -
希垄乐武: 你的vb程序运行后窗体自动最小化,是因为你的,窗体的WindowState被设置成了1-Minimized运行后窗体自动变为最小化.你可以把它改成0-Normal,运后窗体大小和设计时一样大.如果用2-Maximized,那么就是运行时窗体最大化.还有就是你所画的图形会消失是因为你的AutoRedraw属性是False(假),把它改成True(真)就可以了.

钢城区13965993317: vb编程实现将所有窗口最小化?? -
希垄乐武: 首先,我们要遍历桌面上的所有窗口;其次,要判断窗口类型,桌面上的很多窗口无法最小化,或者窗口是不可见的,如中文Win 95中的输入法窗口.最后,将类型符合的窗口最小化.下面通过程序来介绍如何实现这种功能. 首先,在Project...

钢城区13965993317: 关于VB窗口的最大化和最小化 -
希垄乐武: 看一下BorderStyle的属性: 1.若BorderStyle属性为0,则无论maxbutton和minbutton如何改变,都不会出现最大化,最小化和关闭按钮. 2.当BorderStyle属性为1,则maxbutton属性为true时,最大化可见并可用.minbutton按钮为true时,最小化...

钢城区13965993317: vb 如何最小化或最大化一个窗口
希垄乐武: 最小化 Me.WindowState = 1 最大化 Me.WindowState = 2

钢城区13965993317: vb 单机任务栏的窗口不能最小化 -
希垄乐武: 这则代码告诉你如何在运行时显示或隐藏窗体的标题栏.要使一个窗口的标题栏消失,你必须去掉control box、最大化按钮和最小化按钮,并且将caption设为空.不幸的是,VB中窗体的ControlBox、MinButton和MaxButton属性在运行期是只读...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网