Vb6 强制在任务栏中显示模式窗体
在VB6中显示模式窗体时,它不会显示在“按设计”的任务栏中 但是,有没有办法使VB6模式窗体显示在任务栏中(ShowInTaskbar属性为模式时无效)Vb6 强制在任务栏中显示模式窗体,vb6,modal-dialog,user-experience,taskbar,vb6-migration,Vb6,Modal Dialog,User Experience,Taskbar,Vb6 Migration,在VB6中显示模式窗体时,它不会显示在“按设计”的任务栏中 但是,有没有办法使VB6模式窗体显示在任务栏中(ShowInTaskbar属性为模式时无效) 在我们的一个应用程序中,我们有一个模式登录表单,它是启动屏幕卸载后应用程序中显示的第一个表单,因此,如果用户将另一个窗口移到顶部,您就不知道它已加载。您必须进行子类化,类似于从VBAccelerator 免责声明-根据PM2的答案改编,该答案可能是重复的,但我们无法确定,因为原始海报从未告诉我们其形式是否为模态形式。您可以在模态形式中使用类似的
在我们的一个应用程序中,我们有一个模式登录表单,它是启动屏幕卸载后应用程序中显示的第一个表单,因此,如果用户将另一个窗口移到顶部,您就不知道它已加载。您必须进行子类化,类似于从VBAccelerator
免责声明-根据PM2的答案改编,该答案可能是重复的,但我们无法确定,因为原始海报从未告诉我们其形式是否为模态形式。您可以在模态形式中使用类似的内容
Private Const WS_EX_APPWINDOW As Long = &H40000
Private Const GWL_EXSTYLE As Long = (-20)
Private Const SW_HIDE As Long = 0
Private Const SW_SHOW As Long = 5
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 Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
Private m_bActivated As Boolean
Private Sub Form_Activate()
If Not m_bActivated Then
m_bActivated = True
Call SetWindowLong(hwnd, GWL_EXSTYLE, GetWindowLong(hwnd, GWL_EXSTYLE) Or WS_EX_APPWINDOW)
Call ShowWindow(hwnd, SW_HIDE)
Call ShowWindow(hwnd, SW_SHOW)
End If
End Sub
将此代码放在模式窗口中:
Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Private Sub Form_Activate()
Call ShowWindow(Me.hWnd, vbHide)
Me.Caption = Me.Caption
Call ShowWindow(Me.hWnd, vbNormalFocus)
End Sub
感谢@Jeff修复链接!这对我来说很有效,比子类化容易得多。有人能解释一下
Me.Caption=Me.Caption
的用途吗?据我所知,它会导致Windows更新窗口的某些属性,以便在您再次显示窗口时重新计算该窗口是否应显示在任务栏中。通过在ShowWindow中使用vbNormalFocus标志,只要您“更改”了窗口的某些属性,windows就会将其视为第一次显示窗口。