2012-01-05 21 views
6

According to MS quando si visualizza un form modale in VB6 non mostra nella barra delle applicazioni 'by design'Forza form modale da visualizzare sulla barra delle applicazioni

Ma esiste un modo per rendere un form VB6 modale per essere mostrato in la barra delle applicazioni (la proprietà ShowInTaskbar non ha effetto quando è modale)

In una delle nostre app abbiamo un modulo di accesso modale che è il primo modulo da mostrare nell'applicazione dopo che la schermata di avvio viene scaricata, quindi se l'utente si sposta un'altra finestra in alto non sai che è stata caricata.

risposta

6

si può usare qualcosa di simile nella forma modale

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 
+0

ottima soluzione semplice grazie –

1

È necessario eseguire la sottoclasse, ad esempio this da VBAccelerator.

Disclaimer - adattato da risposta di PM2 per this question che è probabilmente un duplicato, ma non possiamo dire perché il manifesto originale non ci ha detto se la loro forma era modale.

+0

Grazie @Jeff per fissare il link! – MarkJ

3

Mettete questo codice nel tuo finestra modale:


    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 

+0

Questo ha funzionato per me ed è molto più semplice della sottoclasse. Qualcuno potrebbe spiegare a cosa serve "Me.Caption = Me.Caption"? –

+0

Per quanto posso dire, Windows fa aggiornare alcune proprietà della finestra in modo che rivaluti se la finestra debba apparire nella barra delle applicazioni quando lo si mostra di nuovo. Usando il flag vbNormalFocus con ShowWindow, windows lo tratterà come se fosse la prima volta che viene visualizzata la finestra finché hai "cambiato" alcune proprietà della finestra. – cjc

Problemi correlati