AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 [C++][Windows] Cacher l'icone d'une fenêtre dans la barre de tache

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
glcraft
Utilisateur confirmé: Rang *****
avatar

Messages : 1698
Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P
Projet Actuel : Jeu de survie avancé
||--------

MessageSujet: [C++][Windows] Cacher l'icone d'une fenêtre dans la barre de tache   Mer 17 Déc 2014 - 1:10

Hide window icon in the taskbar -> pour google au cas où Razz

Bonjour a tous, ca fait une a deux semaine que je cherchais comment enlever l'icone de mon application dans la barre de tache car j'utilise le systray. 1 a 2 semaine car la réponse est quasiment inexistante sur le web ou que je sais très mal chercher.

Enfin bref, je vous fournis un code fonctionnel ainsi que son explication détaillé. Dans l'espoir que ca sert autant que ca m'a servi Wink

Donc pour explication, le but est de créer deux fenêtres : une invisible et l'autre parenté (donc enfant) de la première. La première etant invisible, l'icone n’apparaît tout simplement pas et la fenêtre n'est pas visible. La seconde fenetre étant parenté à la première fenêtre, l'icone de la seconde disparaît car c'est comme si celle-ci faisait partie de la première (bon, en fait c'est exactement ca Wink ). Dans ce cas de figure, on se retrouve avec un programme sans icone car l'icone d'une fenêtre est désintégrée par une autre fenêtre qui elle même n'a pas d'icone.
Il existe deux façons de faire, soit on passe que par des fenetres Windows, soit si comme moi vous avez pris la SFML, on passe par la SFML et Windows (sans .NET et autre bibliothèque de surcharge inutile)

1ère méthode :

Code:
if (!InitApplication(hInstance)) // creation d'un registre pour le premier parametre d'une fenetre. Dispo plus loin
   return FALSE;

HWND hwnd=CreateWindow(
            "MainWClass",          // Registre défini par InitApplication(hInstance), plus de détails sur MSDN (RegisterClassEx)
          "Fenetre invisible",      // Nom de la fenetre, inutile ^^
          0,                     // Le style de la fenetre. Pas très important étant invisible, donc 0 = WS_OVERLAPPED
          CW_USEDEFAULT,            // x
          CW_USEDEFAULT,            // y
          CW_USEDEFAULT,            // w
          CW_USEDEFAULT,            // h, vous aurez compris
          NULL,                  // Le handle parent, ici aucun
          NULL,                  // Le handle d'un menu
          hInstance,               // le HINSTANEC que WinMain vous a retourné
          (LPVOID) 0);            // et enfin lwParam, que je sais pas me servir
         
//ShowWindow(hwnd, nCmdShow);          //On n'affiche pas la fenetre pour qu'elle soit invisible !

UpdateWindow(hwnd);                  // On met a jour la fenetre
/*******************************************************
On reprendra a parti d'ici pour la deuxieme methode
*******************************************************/
HWND hwnd1=CreateWindow(             // Même chose on créer une fenetre, celle qui vous servira d'affichage
            "MainWClass",
          "Window 2",
          WS_OVERLAPPEDWINDOW,      // Fenetre en haut nievau, soit une fenetre qui ne peut pas être caché par d'autre
          CW_USEDEFAULT,
          CW_USEDEFAULT,
          CW_USEDEFAULT,
          CW_USEDEFAULT,
          hwnd,                  //Très important et tout ce passe ici : Le "parentage" de la fenetre en passant le handle de la fenetre 1 !
          NULL,
          hInstance,
          NULL);

//   Petit detail : pas de WS_CHILD dans cette fenetre car meme si c'est son enfant a la premiere fenetre, si vous faites ça,
// la deuxieme fenetre se retrouvera dans la premiere fenetre et vu qu'elle est invisible, aucune fenetre s'affichera !

ShowWindow(hwnd1, nCmdShow);         // On affiche la fenetre, le second parametre est le 4eme parametre envoyé dans WinMain ici mais vous pouvez mettre ce que vous voulez
UpdateWindow(hwnd1);               // Et on la met a jour

2ème methode, avec la SFML:
Code:

[...]
m_window = new sf::Window(sf::VideoMode(RENDER_WIDTH, RENDER_HEIGHT), "Window 2", sf::Style::None, m_contextSettings);   //Mettez les paramettres que vous desirez
m_handle=m_window->getSystemHandle();
SetWindowLong(m_handle, GWL_HWNDPARENT, (LONG)hwnd); // Change le parent de cette nouvelle fenetre par la première fenetre. La deuxieme fenetre est donc enfant de la première
//C'est tout ^^

Voila, simple et efficace.
Peut être que la prochaine fois je pourrais vous expliquer comment détroner la "Window Procedure" implenté dans une fenêtre issue de la SFML pour ajouter ses propres fonctionnalités comme les fonctions tactile ou Drag&Drop de fichiers dans l'appli (fonction non incluse dans la SFML).
Dites moi si ça vous intéresserais Wink
Revenir en haut Aller en bas
http://gameblog49.skyblog.com/
Mass
*Excellent utilisateur*
avatar

Messages : 3324
Localisation : Dans une canonnière wookie.
Projet Actuel :
Wyvup
SpaceShift
Centauri-France


MessageSujet: Re: [C++][Windows] Cacher l'icone d'une fenêtre dans la barre de tache   Mer 17 Déc 2014 - 9:10

A mon avis il y a une méthode plus simple que la création d'une fenêtre fille, je pense notamment à l'une des DLL sur le CBNA qui est capable de le faire avec une fenêtre de GM, dans ce cas de figure le passage par une fenêtre cible est impossible gnii
Revenir en haut Aller en bas
http://madmass.mype.fr/CBNA/
glcraft
Utilisateur confirmé: Rang *****
avatar

Messages : 1698
Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P
Projet Actuel : Jeu de survie avancé
||--------

MessageSujet: Re: [C++][Windows] Cacher l'icone d'une fenêtre dans la barre de tache   Mer 17 Déc 2014 - 10:03

ouais mais la c'est du C++ pure, pas du GM, ni du .NET.
Revenir en haut Aller en bas
http://gameblog49.skyblog.com/
Contenu sponsorisé




MessageSujet: Re: [C++][Windows] Cacher l'icone d'une fenêtre dans la barre de tache   

Revenir en haut Aller en bas
 
[C++][Windows] Cacher l'icone d'une fenêtre dans la barre de tache
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [C++][Windows] Cacher l'icone d'une fenêtre dans la barre de tache
» icone dans barre de tache disparait
» Changer icone dans la barre d'outils
» Insertion d'icone de notification de messages dans un cadre d'une catégorie composite
» Ecrire a côté de l'heure dans la barre de tâches

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Programmation-
Sauter vers: