【问题标题】:Force Modal Form to be Shown in Taskbar强制模态表单显示在任务栏中
【发布时间】:2012-02-03 12:02:23
【问题描述】:

According to MS 当您在 VB6 中显示模式表单时,它不会“按设计”显示在任务栏中

但是有什么办法可以让VB6 Modal窗体显示在任务栏中(ShowInTaskbar属性在模态时无效)

在我们的一个应用程序中,我们有一个模式登录表单,它是启动屏幕卸载后在应用程序中显示的第一个表单,因此如果用户将另一个窗口移到顶部,您不知道它已加载。

【问题讨论】:

    标签: vb6 modal-dialog user-experience taskbar vb6-migration


    【解决方案1】:

    将此代码放在您的模态窗口中:

    
        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
    
    

    【讨论】:

    • 这对我有用,而且比子类化要容易得多。有人能解释一下Me.Caption = Me.Caption 的用途吗?
    • 据我所知,它会导致 Windows 更新窗口的某些属性,以便在您再次显示该窗口时重新评估该窗口是否应出现在任务栏中。通过在 ShowWindow 中使用 vbNormalFocus 标志,只要您“更改”了窗口的某些属性,窗口就会将其视为第一次显示窗口。
    【解决方案2】:

    您必须进行子类化,例如来自 VBAccelerator 的 this

    免责声明 - 改编自 PM2 对 this question 的回答,可能重复,但我们无法确定,因为原始发帖人从未告诉我们他们的表单是否是模态的。

    【讨论】:

    • 感谢@Jeff 修复链接!
    【解决方案3】:

    你可以在模态表单中使用这样的东西

    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
    

    【讨论】:

      猜你喜欢
      • 2015-04-08
      • 1970-01-01
      • 2014-09-11
      • 2015-04-08
      • 1970-01-01
      • 2012-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多