如何捕获窗体缩放事件?

jiangqiaohua 2008-03-24 01:09:10
窗体上有最大化和还原窗口

同时还可以双击标题栏进行缩放还原

如何捕获 双击标题栏进行缩放还原这个事件

我要做的是 比如比如 把窗体拉成宽度 300

然后放大 在缩小 这个时候 宽度还是 300

这个是自动变成 300的还是程序控制的?

我要他下次启动的时候就是上次关闭的尺寸
...全文
141 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
jiangqiaohua 2008-03-24
Chen8013 的可以实现了 谢谢 
回复
forbearORfolie 2008-03-24
把normal的数据也写进文件,在resize事件中调用
回复
舉杯邀明月 2008-03-24
如果用我的方法:
是你的逻辑问题!

With tIniFile
.IniFile = AppPath & MainIniName
Call .WriteKey("WindowState", "State", Str(Me.WindowState))
Call .WriteKey("WindowState", "Left", Str(Me.Left / 15))
Call .WriteKey("WindowState", "Top", Str(Me.Top / 15))
Call .WriteKey("WindowState", "Width", Str(Me.Width / 15))
Call .WriteKey("WindowState", "Height", Str(Me.Height / 15))
End With


你不能在退出时取窗口尺寸,而应该是在Form_Resize()事件中,WindowState为Normal时把它保存到四个变量中,
退出时取当前的窗口状态,窗口尺寸从变量中取。
回复
jiangqiaohua 2008-03-24
在 Form_Resize() 事件中,监视并记录窗口的Form.WindowState
并且WindowState值为Normal时,记录(或更新记录)窗口的Left、Top、Width、Height。

程序退出时,可保存下窗口的WindowState、Left、Top、Width、Height的值。
下次启动时,先恢复窗口的Left、Top、Width、Height,再恢复窗口的WindowState,

这样,可“完全还原”以前的状态了。


你这样无法最大化


myjian
我的意思 是 我已经实现了 关闭记录窗口大小
比如 窗口是
Normal时关闭 大小为300*400
打开后还是 300*400


但窗口为最大化时关闭
打开后当然还是最大化

但此时无法将它 Normal


这是我测试的全部代码



Private Sub Form_Load()
Dim tIni As New cINIFile
tIni.IniFile = AppPath & MainIniName
'MsgBox "aa"
'设置窗体大小为上次保存退出的大小
'jerry 2008年3与14号
Dim State, IniLeft, IniTop, IniWidth, IniHeight As Long
State = tIni.ReadInt("WindowState", "State", 0)
IniLeft = tIni.ReadInt("WindowState", "Left", 0)
IniTop = tIni.ReadInt("WindowState", "Top", 0)
IniWidth = tIni.ReadInt("WindowState", "Width", 0)
IniHeight = tIni.ReadInt("WindowState", "Height", 0)


'Me.WindowState = State
Me.Left = IniLeft * 15
Me.Top = IniTop * 15
Me.Width = IniWidth * 15
Me.Height = IniHeight * 15
End Sub

Private Sub Form_Unload(Cancel As Integer)
Call SaveWindowState
End Sub
'============窗口位置============================
Public Sub SaveWindowState()
Dim tIni As New cINIFile
tIni.IniFile = AppPath & MainIniName
Dim tIniFile As cINIFile
Set tIniFile = New cINIFile

With tIniFile
.IniFile = AppPath & MainIniName
Call .WriteKey("WindowState", "State", Str(Me.WindowState))
Call .WriteKey("WindowState", "Left", Str(Me.Left / 15))
Call .WriteKey("WindowState", "Top", Str(Me.Top / 15))
Call .WriteKey("WindowState", "Width", Str(Me.Width / 15))
Call .WriteKey("WindowState", "Height", Str(Me.Height / 15))
End With
End Sub
'===========
回复
[Quote=引用 7 楼 jiangqiaohua 的回复:]
我现在是

可以实现启动后为上次保存退出的窗体大小

可出现一个问题

最大化后 在点还原后就无法还原了

如何解决这个问题
[/Quote]

无法还原,检查你自己的逻辑.
回复
舉杯邀明月 2008-03-24
在 Form_Resize() 事件中,监视并记录窗口的Form.WindowState
并且WindowState值为Normal时,记录(或更新记录)窗口的Left、Top、Width、Height。

程序退出时,可保存下窗口的WindowState、Left、Top、Width、Height的值。
下次启动时,先恢复窗口的Left、Top、Width、Height,再恢复窗口的WindowState,

这样,可“完全还原”以前的状态了。
回复
jiangqiaohua 2008-03-24
我现在是

可以实现启动后为上次保存退出的窗体大小

可出现一个问题

最大化后 在点还原后就无法还原了

如何解决这个问题
回复
东方之珠 2008-03-24
用API函数IsZoomed判断,结合ShowWindow使用。
回复
东方之珠 2008-03-24
如何捕获窗体缩放事件? 用API判断速度较快!
回复
jiangqiaohua 2008-03-24
我在form_load事件里加了
'jerry 2008年3与14号
Dim State, IniLeft, IniTop, IniWidth, IniHeight As Long
State = tIni.ReadInt("WindowState", "State", 0)
IniLeft = tIni.ReadInt("WindowState", "Left", 0)
IniTop = tIni.ReadInt("WindowState", "Top", 0)
IniWidth = tIni.ReadInt("WindowState", "Width", 0)
IniHeight = tIni.ReadInt("WindowState", "Height", 0)


Me.WindowState = State
Me.Left = IniLeft * 15
Me.Top = IniTop * 15
Me.Width = IniWidth * 15
Me.Height = IniHeight * 15

可以实现启动后 为上次保存退出的窗体大小

可出现一个问题

最大化后 在点还原后就无法还原了

如何解决这个问题
回复
cbm6666 2008-03-24
如同1F所说的 不用捕获窗体的缩放事件, 窗体一有变化, Form_Resize事件自动响应.

Private Sub Form_Resize()
Me.Caption = Me.Width & " " & Me.Height
End Sub

在窗体关闭时 Form_Unload事件中,记录下来

1.写到 .txt记事本
2.写到 注册表
3.写到任何一张图片里面

回复
yangao 2008-03-24
下次窗体启动时读取然后设置下即可
回复
yangao 2008-03-24
按你想实现的记录上次窗口尺寸的功能
不用捕获窗体的缩放事件(Form_Resize)
只需要在窗体关闭时记录下窗口的尺寸即可
记录到DB或文件
回复
相关推荐
发帖
VB基础类
创建于2007-09-28

7492

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2008-03-24 01:09
社区公告
暂无公告