中易网

VB 窗体最小化与还原

答案:3  悬赏:40  
解决时间 2021-02-15 14:14
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

但是,这样做还要考虑到有些人把任务栏移到其他地方的,比如左侧,右侧,甚至隐藏,所以,也是很麻烦的哦
全部回答
第一个问题代码: Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) 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 Const GWL_STYLE = (-16) Private Const WS_SYSMENU = &H80000 Private Const WS_MINIMIZEBOX = &H20000 Private Const WS_MAXIMIZEBOX = &H10000 Private Sub Form_Load() Dim lStyle As Long lStyle = GetWindowLong(Me.hwnd, GWL_STYLE) lStyle = lStyle Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX Or WS_SYSMENU SetWindowLong Me.hwnd, GWL_STYLE, lStyle End Sub 第二问题没看懂
在模块中写入一下内容:Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Public Declare Function SetWindowRgn Lib "user32" (ByVal hwnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Public 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 Sub Command1_Click() Dim RRGN As Long RRGN = CreateRectRgn(0, 0, Form1.Width / 15, Form1.Height / 15) SetWindowRgn Me.hwnd, RRGN, True DeleteObject RRGN End SubPrivate Sub Command2_Click() Me.Height = Screen.Height + 1500 Me.Width = Screen.Width Me.Move 0, -350 Timer1.Enabled = True End SubPrivate Sub Command3_Click() Unload Me End SubPrivate Sub Command4_Click() Dim RRGN As Long RRGN = CreateRectRgn(0, 22, Form1.Width / 15, Form1.Height / 15) SetWindowRgn Me.hwnd, RRGN, True DeleteObject RRGN End SubPrivate Sub Timer1_Timer() SetWindowPos Me.hwnd, -1, 0, 0, 0, 0, 3 End Sub 这段程序有1个BUG之处就是不能完全遮盖任务栏,运行时先将timer的enabled属性设置为false。Interval属性设置为10
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
哈拉金宝哈太在什么地方啊,我要过去处理事情
已知数列{an}的通项公式是an=2n-1,则它的第
烟台到成都怎么座车便宜?现在好像没有直达的
铁路的系统集成商除了中铁电化局和中铁建电化
笔记本电脑为什么冲一会电就冲不进去了
从海南去厦门(非旺季)的鼓浪屿玩7天大概要
君悦酒楼在什么地方啊,我要过去处理事情
贷车没保险被扣了驾驶证行驶证。现在交警队要
盛景花卉怎么去啊,有知道地址的么
作文···福建莆田独特的民风民俗
泰州有做鱼缸的厂家吗?
广西移动cmcc怎么注册
花键轴有限元分析
方舟生存进化.聊天红色字体.谁知道怎么搞.求
东都大厦地址在哪,我要去那里办事
推荐资讯
哪里能买到真的鹿鞭
大北通讯共济街店在哪里啊,我有事要去这个地
魅蓝metalm57ac多少钱
如何设置PPT,演示者能看到备注而观众看不到
新华书店新野营销部地址在什么地方,想过去办
xbox360中的乒乓球游戏真实吗?
问道首饰可以退化吗
利民药房(悦来店)怎么去啊,有知道地址的么
幻想忍者村怎么去波之国
vb error 48' dll加载错误怎么解决?急
靖海之星幼儿园怎么去啊,有知道地址的么
卧室是先贴壁纸还是先安门,为什么?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?