begin process at 2012 02 15 15:24:55
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Windows

 > 

Autre

 > 

Boutons dans TOUTES les barres de titres


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Boutons dans TOUTES les barres de titres

jeudi 28 février 2008 à 13:41:20 | Boutons dans TOUTES les barres de titres

oommeeggaa3d

Bonjour

Je développe actuellement un logiciel de multi-écrans virtuels et j'aimerais ajouter des fonctionnalités aux fenêtres windows à l'aide de boutons qui viendraient s'ajouter dans les barres de titre. (dans le style de ce que fait Ultramon par exemple avec deux boutons supplémentaires dans les barres de titre)

La difficulté étant ici de rajouter ce bouton sur toutes les fenêtres et non sur la seule fenêtre de mon appli.

Auriez-vous, s'il vous plait, des pistes, infos, ou codes là-dessus ?

Merci d'avance.
jeudi 28 février 2008 à 22:44:23 | Re : Boutons dans TOUTES les barres de titres

PCPT

Administrateur CodeS-SourceS
salut,
regarde dans les sources de DarkSidious (il me semble), tu devrais en trouver une concernant l'ajout d'un bouton en barre de titre pour icônifier les fenêtres

++

Prenez un instant pour répondre à ce sondage svp
vendredi 29 février 2008 à 06:14:02 | Re : Boutons dans TOUTES les barres de titres

oommeeggaa3d

Merci je vais regarder ça !
Jusque là, je n'ai trouvé que des sources pour ajouter un bouton dans la form de l'appli, mais pas dans la fenetre de son choix. (ou toutes)
lundi 31 mars 2008 à 11:08:59 | Re : Boutons dans TOUTES les barres de titres

oommeeggaa3d

hello

Je relance le sujet ...
j'ai bien avancé en reprenant les sources dont PCPT parlait.
Ca marche très bien pour la barre du programme mais beaucoup moins avec une fenetre quelconque.

Avec le code suivant j'arrive parfaitement à gérer le bouton et à le "coller" à l'intérieur n'importe quelle fenêtre, mais pas dans la barre de titre.
Ici le bouton est collé dans le coin gauche supérieur de la fenêtre (donc juste sous la barre de titre)
(je sais, le code n'est pas clean, mais c'est du test.)

Public Sub InstallBouton()
    Dim FormRect As Rect
    sonparent = 656502 '3474518 'laFrm.hwnd
    Call GetWindowRect(sonparent, FormRect)
 
    ButtonHwnd& = CreateWindowEx(0&, "Button", "*", &H40000000, FormRect.Right - FormRect.Left - 22, 0, 14, 14, sonparent, 0&, App.hInstance, 0&)
     Call ShowWindow(ButtonHwnd&, 1)
    WHook = SetWindowsHookEx(4, AddressOf HookProc, 0, App.ThreadID)
    Call SetWindowLong(ButtonHwnd&, GWL_EXSTYLE, &H80)
        Call SetParent(ButtonHwnd&, sonparent)
End Sub

Public Sub DesinstallBouton()
    Call UnhookWindowsHookEx(WHook)
    Call SetParent(ButtonHwnd&, Form1.hWnd)
End Sub

Private Function HookProc&(ByVal nCode&, ByVal wParam&, Inf As CWPSTRUCT)
    Dim FormRect As Rect
    Static LastParam&

    If Inf.hWnd = ButtonHwnd& Then
        If Inf.Message = &H82 Then 'destroy
          Form1.Label1.Caption = "Suppression bouton"
          Call DesinstallBouton
        End If
        If Inf.Message = 243 Then 'click
         Form1.Label1.Caption = "Appui sur le bouton"
        End If
    End If

      If Inf.hWnd = sonparent Then
        If Inf.Message = WM_NCPAINT Or Inf.Message = WM_MOVE Then
          Call GetWindowRect(sonparent, FormRect)
          Call SetWindowPos(ButtonHwnd&, 0, 0, 0, 17, 14, SWP_FRAMECHANGED)
        Else
 
        End If
      End If
End Function

le hic c'est que je n'arrive pas à intercepter les messages pour une fenêtre quelconque, et du coup, pas moyen de repositionner le bouton si la fenêtre est déplacée.
ici, le message WM_NCPAINT ou WM_MOVE n'est jamais traité.
Normal, vous me direz car j'ai mis App.ThreadID quand j'ai crée le hook. Mais je n'arrive pas à utiliser un autre ThreadID que celui-ci.
Faire un getparent de la variable "sonparent" (qui ne veut rien dire), renvoie 0.

C'est un peu confus, mais si quelqu'un a une idée, je suis preneur.
 Merci !!!
lundi 31 mars 2008 à 12:49:20 | Re : Boutons dans TOUTES les barres de titres

PCPT

Administrateur CodeS-SourceS
si tu veux qu'on teste, çà serait pas mal de copier les types et api ;)
lundi 31 mars 2008 à 14:48:25 | Re : Boutons dans TOUTES les barres de titres

oommeeggaa3d

Merci de ta réponse.
Je remets tout proprement et je rajoute un findwindow sur une fenêtre calculatrice (calculator sur mon pc)
D'ailleurs en rajoutant ce findwindow, je m'aperçois que je n'ai pas la place d'afficher mon contrôle supplémentaire sur une fenêtre notepad. (avec le menu, les scrollbars et la zone de texte, il ne reste plus de place)
Il me faut donc vraiment trouver un moyen de placer ce bouton dans la barre de titre et faire en sorte que le bouton se repositionne automatiquement.

voici donc le code complet : (dans un module)
Option Explicit
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 GetWindowRect Lib "user32" (ByVal hWnd As Long, lpRect As Rect) As Long
Private Declare Function GetParent Lib "user32" (ByVal hWnd As Long) As Long
Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long
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 Declare Function SetWindowsHookEx Lib "user32" Alias "SetWindowsHookExA" (ByVal idHook&, ByVal lpfn&, ByVal hmod&, ByVal dwThreadId&) As Long
Private Declare Function UnhookWindowsHookEx Lib "user32" (ByVal hHook&) As Long
Private Declare Function CreateWindowEx Lib "user32" Alias "CreateWindowExA" (ByVal dwExStyle As Long, ByVal lpClassName As String, ByVal lpWindowName As String, ByVal dwStyle As Long, ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hWndParent As Long, ByVal hMenu As Long, ByVal hInstance As Long, lpParam As Any) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hWnd As Long, ByVal nCmdShow As Long) As Long
Public Declare Function SetActiveWindow Lib "user32" Alias "SetForegroundWindow" (ByVal hWnd As Long) As Long
Private Declare Function GetLastError Lib "kernel32" () As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Type Rect
    Left As Long
    Top As Long
    Right As Long
    Bottom As Long
End Type
Private Type CWPSTRUCT
    lParam As Long
    wParam As Long
    Message As Long
    hWnd As Long
End Type
Const WM_LBUTTONDOWN = &H201
Const WM_MOVE = &H3
Const WM_SETCURSOR = &H20
Const WM_NCPAINT = &H85
Const WM_COMMAND = &H111
Const SWP_FRAMECHANGED = &H20
Const GWL_EXSTYLE = -20
Private WHook&
Private ButtonHwnd As Long
Public laFrm As Form
Dim sonparent As Long

Public Sub InstallBouton()
    Dim FormRect As Rect
    sonparent = FindWindow(vbNullString, "Calculator")
    If sonparent = 0 Then End
    
    ButtonHwnd& = CreateWindowEx(0&, "BUTTON", "*", &H40000000, FormRect.Right - FormRect.Left - 22, 0, 14, 14, sonparent, 0&, App.hInstance, 0&)
    Call ShowWindow(ButtonHwnd&, 1)
    WHook = SetWindowsHookEx(4, AddressOf HookProc, 0, App.ThreadID)
    If WHook = 0 Then
      MsgBox "err"
      End
    End If
    
    Call SetWindowLong(ButtonHwnd&, GWL_EXSTYLE, &H80)
    Call SetParent(ButtonHwnd&, sonparent)
End Sub

Public Sub DesinstallBouton()
    Call UnhookWindowsHookEx(WHook)
    Call SetParent(ButtonHwnd&, Form1.hWnd)
End Sub

Private Function HookProc&(ByVal nCode&, ByVal wParam&, Inf As CWPSTRUCT)
    Dim FormRect As Rect
    Static LastParam&

    If Inf.hWnd = ButtonHwnd& Then
        If Inf.Message = &H82 Then 'destroy
          'Form1.Label1.Caption = "Suppression bouton"
          Call DesinstallBouton
        End If
        If Inf.Message = 243 Then 'click
         Form1.Label1.Caption = "Appui sur le bouton"
         'Call DesinstallBouton
        End If
    End If

      If Inf.hWnd = sonparent Then
        If Inf.Message = WM_NCPAINT Or Inf.Message = WM_MOVE Then
          Call GetWindowRect(sonparent, FormRect)
          Call SetWindowPos(ButtonHwnd&, 0, 0, 0, 17, 14, SWP_FRAMECHANGED)
        Else
 
        End If
      End If
End Function


il y a aussi une form tout simple avec qui appelle le bazar :

Private Sub Form_Load()
InstallBouton
End Sub

Private Sub Form_Unload(Cancel As Integer)
DesinstallBouton
End Sub

Merci d'avance. Un sacré casse-tête pour moi.
mercredi 2 avril 2008 à 16:15:42 | Re : Boutons dans TOUTES les barres de titres

oommeeggaa3d

personne ne peut m'aider ?
ou c'est mon explication qui n'est pas claire :-)
mercredi 2 avril 2008 à 19:00:52 | Re : Boutons dans TOUTES les barres de titres

PCPT

Administrateur CodeS-SourceS
salut,

pas eu le temps... je jette un oeil dans la soirée (sans promesse )
++

Prenez un instant pour répondre à ce sondage svp
mercredi 2 avril 2008 à 21:48:50 | Re : Boutons dans TOUTES les barres de titres

PCPT

Administrateur CodeS-SourceS
re,

après quelques tests, j'arrive à poser le bouton sur la fenêtre CALC ou autre, ou libre (pas de Parent) mais pas non plus directement dans la barre de titre (sauf la form de l'appli)

j'ai pas trop le temps en ce moment donc j'vais pas pouvoir t'aider des masses

essaye de faire un tour sur [ Lien ] , il y a peut-être un code adéquat...

et pour le subclassing complet (pas que dans le thread de l'appli) tu peux regarder cette source
bon courage

Prenez un instant pour répondre à ce sondage svp
jeudi 3 avril 2008 à 09:08:00 | Re : Boutons dans TOUTES les barres de titres

oommeeggaa3d

Merci.
Je vais continuer à chercher.
Je suis étonné que le sujet n'ait jamais été abordé ! (enfin il me semble)


Cette discussion est classée dans : boutons, ajouter, barres, fenêtres, titres


Répondre à ce message

Sujets en rapport avec ce message

Ajouter des boutons a VB [ par Buisson.sf ] je cherche des boutons style play pause etc... pour faire un lecteur multimédia.seulement je ne sais pas ou trouver ça !si quelqu'un pouvait m'aider.. Ajouter des barres de défilement à une fenetre frm [ par titi18 ] Bonjour,J'ai besoin d'une fenetre tres longue pour y afficher plusieurs graphiques à la suite mais je n'arrive pas à lui donner la taille que je veux. ajouter des boutons sous excel via VB [ par damdam04 ] salut tout le monde décidément excel m'en fait voir de toutes les couleurs... lol je suis en train de créer une appli qui génére des fichiers excel. ajouter des boutons sous excel via VB [ par damdam04 ] salut tout le monde décidément excel m'en fait voir... lol je suis en train de créer une appli qui génére des fichiers excel. je voudrais insérer un Supprimer la barre des titres et les barres d'outils d'une appli exterieure [ par andrebernard ] Bonjour à tousVoila, je suis arrivé grace à la précieuse aide de DARKSIDIOUS à insérer une apli exterieure dans une form.Mais voila, moins on s'y conn suppression boutons de commandes et barres d'outils [ par olivetsyl ] BonjourJe debute sur VB et je souhaiterais supprimer les barres d'outils et les boutons de commandes lors de l'ouverture de mon application excel et t ajouter barres de deftlement a une form vb6 [ par qaskaror ] bonjour si vous avez une idée comment ajouter les barres de défilement horizontales et verticales a une form vb6 . "il est nécessaire de les ajouter Agrandir d'un coup toutes les fenêtres de la barres des tâches [ par tristan2 ] Bonjour à tous ,J'aimerais faire un programme en VB dont son exécution entrainerait l'agrandissement de toutes les fênetres qui sont dans la barre des Affichage de la Boite de dialogue "Références" [ par Calade ] Bonjour à tous, J'essaye de m'initier à VB .NET 2010. Pour ajouter une référence je fais menu "Projet/Ajouter une Référence". Là s'affiche une boîte + de convivialité? [ par jia2812 ] Bonjour,Dans ma base Access, voyez-vous les boutons de déplacement en bas de chaque formulaire [Access of course, ps VB!]?...1 - Je les supprime, en l


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,978 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales