MAINTENIR UNE FENÊTRE NON MODALE AU PREMIER PLAN AVEC L'API SETWINDOWPOS EN 2 LI

Signaler
Messages postés
721
Date d'inscription
dimanche 10 juin 2001
Statut
Membre
Dernière intervention
27 mars 2011
-
Renfield
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
-
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/24809-maintenir-une-fenetre-non-modale-au-premier-plan-avec-l-api-setwindowpos-en-2-lignes-de-code

Renfield
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
61
Je pense a un subclassing de la fenetre a mettre en topMostquand wParam true, ta fenetre est en train d'etre activée> SWP_TOPMOST
quand wParam true, une fenetre d'une autre application est en train d'etre activée> SWP_NOTOPMOST

cf.
http://www.vbfrance.com/codes/MODULE-SUBCLASSER_38442.aspx

Option Explicit

Implements ISubclasser
Private mtWindow As SubClassedWindow

Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long

Private Sub Form_Load()
SetWindowPos Me.hWnd, HWND_TOPMOST, 0&, 0&, 0&, 0&, SWP_NOSIZE Or SWP_NOMOVE
InitiateSubClassing mtWindow, Me, Me.hWnd, True, WM_ACTIVATEAPP
End Sub

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
TerminateSubClassing mtWindow
End Sub

Private Function ISubclasser_WindowProc(ByVal hWnd As Long, ByVal uMsg As MessageConstants, ByVal wParam As Long, ByVal lParam As Long) As Long
If wParam Then
SetWindowPos Me.hWnd, HWND_TOPMOST, 0&, 0&, 0&, 0&, SWP_NOSIZE Or SWP_NOMOVE
Else
SetWindowPos Me.hWnd, HWND_NOTOPMOST, 0&, 0&, 0&, 0&, SWP_NOSIZE Or SWP_NOMOVE
End If
End Function
cs_Swinger
Messages postés
6
Date d'inscription
mercredi 25 décembre 2002
Statut
Membre
Dernière intervention
22 février 2012

2012...Il existe encore des gens qui développe sur VB6 (plus pour longtemps, je vous rassure!).
J'avais cherché comment laisser une feuille TOPMOST seulement d'une application et pas de toutes, et ceci sans être en VBmodal, pendant plusieurs mois en vain...HUELCE, je ne sais pas si tu vas lire ce message, mais dans tout les cas, je te dit un tres grand merci!
cs_Ouneufe
Messages postés
60
Date d'inscription
mardi 4 septembre 2001
Statut
Membre
Dernière intervention
19 janvier 2009

c'est bien cette source, juste ce qu'il me fallait.

Merci.
ROOTVL69
Messages postés
11
Date d'inscription
jeudi 18 septembre 2003
Statut
Membre
Dernière intervention
3 août 2007

C'est vrai que le code produit des effets très sympas, mais la feuille disparait quand par exemple windows media player est en plein écran, ce qui me gene pour un projet en cours...
Quelqu'un a une idée?