我做了一个窗体,想在运行的时候让其自动最小化,然后通过自行设定的快捷键(如Ctrl+K)来让其恢愎原来窗体的大小,要怎么样来实现,请大家帮忙。最好详累一点,我是新手,谢谢!
解决方案 »
- 求助!vb中combobox模拟qq用户名输入框
- 急,VB如何将某一目录下的所有图片导入到SQL2000中,在线等。。。
- 关于vb中能否能用corba组件的问题,请帮忙!
- 向大家推荐一个学习英文的网站,免费资料多多
- 关于动态生成控件的问题
- 小儿科问题,高分求解。(急急急!!!)
- 一个在VB控件里调用VC dll调用的问题,求救
- 请各位介绍一下VB工程调试时的一些经验!!!(高分)
- 如何获取访问本机的计算机名或ip地址或网址******在线等候******
- 用户控件里打开自定义窗口控件对话框是不是不能互相交互
- 请问如何共享地打开数据库中的表
- 100分求解简单的VB+ACCESS的打印汇总单问题,参与有分,解惑者重奖!
http://community.csdn.net/Expert/topic/3516/3516338.xml
窗体大小改WindowState就可以
比如启动时最小化~Private Sub Form_Load()
Me.WindowState = 1
End Sub
Private Const MOD_CONTROL = &H2
Private Const MOD_SHIFT = &H4
Private Const PM_REMOVE = &H1
Private Const WM_HOTKEY = &H312
Private Type POINTAPI
x As Long
y As Long
End Type
Private Type Msg
hwnd As Long
Message As Long
wParam As Long
lParam As Long
time As Long
pt As POINTAPI
End TypePrivate Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Private Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long
Private Declare Function PeekMessage Lib "user32" Alias "PeekMessageA" (lpMsg As Msg, ByVal hwnd As Long, ByVal wMsgFilterMin As Long, ByVal wMsgFilterMax As Long, ByVal wRemoveMsg As Long) As Long
Private Declare Function WaitMessage Lib "user32" () As Long
Private Declare Function ShowWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal nCmdShow As Long) As LongPrivate bCancel As Boolean
Public Sub ProcessMessages()
Dim Message As Msg
Do While Not bCancel
WaitMessage
If PeekMessage(Message, Me.hwnd, WM_HOTKEY, WM_HOTKEY, PM_REMOVE) Then
ShowWindow Me.hwnd, 1'恢复显示
End If
DoEvents
Loop
End SubPrivate Sub Command1_Click()
Me.Caption = "test"
End SubPrivate Sub Form_Load()
Dim ret As Long
bCancel = False
ret = RegisterHotKey(Me.hwnd, &HBFFF&, MOD_CONTROL, vbKeyK)
Show
ProcessMessages
End Sub
Private Sub Form_Unload(Cancel As Integer)
bCancel = True
Call UnregisterHotKey(Me.hwnd, &HBFFF&)
End Sub
Public Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public Const MOD_ALT = &H1
Public Const MOD_CONTROL = &H2
Public Const MOD_SHIFT = &H4
Public Const SW_NORMAL = 1
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private loldWnd As Long
Public Const WM_HOTKEY = &H312
Public lHotKeyId As Long
Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As LongPublic Function WindowProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_HOTKEY And wParam = lHotKeyId Then '如果是热键消息,并且ID也正确,一个窗体可能有N多热键,所以要判断ID
ShowWindow hwnd, SW_NORMAL '把窗体设为正常模式
End If
WindowProc = CallWindowProc(loldWnd, hwnd, Msg, wParam, lParam) '执行窗体原有过程
End Function
Public Function HookWindow(ByVal hwnd As Long) As Long
loldWnd = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc) '子类化窗体
End Function'窗体的
Private Sub Form_Load()
lHotKeyId = 1 '把热键的ID设为1 ,msdn上面说可以从&H0000 到&HBFFF
RegisterHotKey Me.hwnd, 1, MOD_CONTROL Or MOD_ALT, vbKeyO '把CTRL +ALT+O(不是零)设为热键
HookWindow Me.hwnd '子类化窗体
End Sub'够详细了吧!Private Sub Form_Unload(Cancel As Integer)
UnregisterHotKey Me.hwnd, lHotKeyId '设定之后肯定是要取消的嘛!
End Sub
If Msg = WM_HOTKEY Then
If wParam = idHotKey Then
Dim lp As taLong, i2 As t2Int
lp.ll = lParam
LSet i2 = lp
If (i2.lWord = Modifiers) And i2.hWord = uVirtKey Then
Form1.Height = 6660
Form1.Top = Form1.Top - 900
Form1.Shape3.Height = Form1.Height
End If
End If
End If
Wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
End Functionform1Dim rets As LongpreWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)rets = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf Wndproc)idHotKey = 1
Modifiers = MOD_ctrl
uVirtKey = vbkeyk 'Z键
rets = RegisterHotKey(Me.hwnd, idHotKey, Modifiers, uVirtKey)