窗体hide后如何show

踏平扶桑 2003-11-02 07:47:10
请问为窗体设置热键后,当让窗体后,如何让它得到热键后显示出来?
谢谢~~
...全文
155 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Shrewdcat 2003-11-03
  • 打赏
  • 举报
回复
aha99(学习) ( ) Addressof 在vb里能用吗?
2934046 2003-11-03
  • 打赏
  • 举报
回复
先用load form1,然后用form1.show和form1.hide就可以了
kyc2001 2003-11-03
  • 打赏
  • 举报
回复
使窗体获得焦点
hxy2003 2003-11-03
  • 打赏
  • 举报
回复
注册全局热键是麻烦,窗口关闭时又要注销,否则会出错
wjx818 2003-11-03
  • 打赏
  • 举报
回复
没这么复杂吧?在当前窗体捕获到热键键值后,直接响应一个窗体SHOW的函数即可。
aha99 2003-11-03
  • 打赏
  • 举报
回复
窗体
Option Explicit
Sub Form_Load()
Dim ret As Long
'??原来的window程序地址
preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
'用自定?程序代替原来的window程序
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf wndproc)

Modifiers = MOD_ALT + MOD_SHIFT + MOD_CONTROL

uVirtKey = vbKeyG

'注册Showhotkey in the range &h0000 through &hBFFF
ret = RegisterHotKey(Me.hwnd, ShowHotKey, Modifiers, uVirtKey)

Me.Hide
End Sub

Private Sub Form_Unload(Cancel As Integer)
Dim ret As Long
'取消Message的截取,使之送往原来的window程序
ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)
Call UnregisterHotKey(Me.hwnd, ShowHotKey)
End Sub
模块
Option Explicit

Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
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 RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal id As Long) As Long

Public Const WM_HOTKEY = &H312
Public Const MOD_ALT = &H1
Public Const MOD_CONTROL = &H2
Public Const MOD_SHIFT = &H4
Public Const GWL_WNDPROC = (-4)
Public Const ShowHotKey = &H44EE
Public preWinProc As Long
Public Modifiers As Long, uVirtKey As Long

Private Type taLong
ll As Long
End Type
Private Type t2Int
lWord As Integer
hword As Integer
End Type
Public Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
If Msg = WM_HOTKEY Then
If wParam = ShowHotKey Then
Dim lp As taLong, i2 As t2Int
lp.ll = lParam
LSet i2 = lp
If (i2.lWord = Modifiers) And i2.hword = uVirtKey Then
'Debug.Print "HotKey Shift-Alt-G Pressed "
Form1.Show
End If
End If
End If
wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
End Function
踏平扶桑 2003-11-03
  • 打赏
  • 举报
回复
可能是在下没有说清楚

我的意思是用api为窗体设置热键后,当一个窗口把程序窗体遮盖后,按下热键就可以让窗体显示出来。
这个没什么问题,不过当窗体隐藏后,按下热键怎么能让它不是隐藏呢?,也就是说热键触发了哪个事件?
谢谢
踏平扶桑 2003-11-02
  • 打赏
  • 举报
回复
up

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧