glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: [C++][Windows] Cacher l'icone d'une fenêtre dans la barre de tache Mer 17 Déc 2014 - 2:10 | |
| Hide window icon in the taskbar -> pour google au cas où 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 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 ). 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 |
|
Mass *Excellent utilisateur*
Messages : 3351 Localisation : Dans une canonnière wookie. Projet Actuel : Monter des trucs et des machins
| Sujet: Re: [C++][Windows] Cacher l'icone d'une fenêtre dans la barre de tache Mer 17 Déc 2014 - 10: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 |
|
glcraft Utilisateur confirmé: Rang *****
Messages : 1698 Localisation : Entre l'Espagne, l'Italie, la Suisse, L'allemagne et le RU :P Projet Actuel : Jeu de survie avancé
||--------
| Sujet: Re: [C++][Windows] Cacher l'icone d'une fenêtre dans la barre de tache Mer 17 Déc 2014 - 11:03 | |
| ouais mais la c'est du C++ pure, pas du GM, ni du .NET. |
|
Contenu sponsorisé
| Sujet: Re: [C++][Windows] Cacher l'icone d'une fenêtre dans la barre de tache | |
| |
|