Précédent   Forum des professionnels en informatique > Général Développement > Programmation système > Windows
Windows Forum d'entraide sur la programmation Windows. Tutoriel API Windows
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 31/01/2012, 07h48   #1
Membre habitué
 
Homme
Inscription : avril 2004
Messages : 305
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 305
Points : 130
Points : 130
Par défaut modifier le thème d'une fenêtre avec l'API win32

J'ai en fait 2 questions concernant le :

1) j'aimerais pouvoir intercepter la création de n'importe quelle fenêtre pour pouvoir modifier sa barre de titre et sa bordure. En cherchant un peu avec internet, ça serait possible avec SetWindowsHookEx() (sans plus d'explication). Comment je dois utiliser cette fonction pour intercepter la création d'une fenêtre ? Y a-t-il une meilleure solution ?

2) Une fois interceptée, pour changer la barre de titre et la bordure, mon idée était de la rendre sans bord et sans barre de titre (en utilisant SetWindowLongPtr(win, GWL_STYLE, style & ~(WS_CAPTION | WS_THICKFRAME))), puis de rajouter des fenêtres filles autour et dont le contenu (la zone client) serait le bord, la barre de titre, les boutons qu'il faut, etc... C'est vraiment une personnalisation du thème, dans la mesure où la barre de titre pourrait être verticale à droite de la fenêtre et avec les boutons verticalement à gauche de la fenêtre (par exemple). La méthode est-elle raisonnable ?

En gros, ceci s'apparente à un desktop shell alternatif, plus où moins, style LiteStep ou Emerge Desktop

merci
__________________
L'Opus attire les Prélats
d'Oursse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 15h07   #2
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 21 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 21 481
Points : 28 760
Points : 28 760
Envoyer un message via MSN à Médinoc
Ne fais pas ça avec des fenêtres filles, tu auras des problèmes pour gérer la Client Area de la fenêtre.
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 11h45   #3
Membre habitué
 
Homme
Inscription : avril 2004
Messages : 305
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 305
Points : 130
Points : 130
Citation:
Envoyé par Médinoc Voir le message
Ne fais pas ça avec des fenêtres filles, tu auras des problèmes pour gérer la Client Area de la fenêtre.
J'avais l'idée suivante : faire une application fullscreen, et dedans, gérer les fenêtres en question. Toutes les nouvelles fenêtres seraient donc des filles de la fenêtre fullscreen.

A priori, c'est possible de faire ceci, vu la doc MSDN

Pourrais-tu me dire quels problèmes je pourrais avoir ?

SInon, la méthode que je voudrais mettre en place (cf le premier message) semble raisonnable ?

merci
__________________
L'Opus attire les Prélats
d'Oursse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 22h11   #4
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 21 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 21 481
Points : 28 760
Points : 28 760
Envoyer un message via MSN à Médinoc
J'ai l'impression qu'il faudrait non seulement hooker la création de fenêtres, mais aussi injecter une DLL dans chaque process qui se chargerait de subclasser chaque fenêtre créée. Et ensuite, réimplémenter ses messages de gestion de la zone non-client (WM_NCCALCSIZE, WM_NCPAINT, WM_NCHITTEST au minimum).
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 19h18   #5
Membre habitué
 
Inscription : mars 2009
Messages : 208
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 208
Points : 104
Points : 104
bon courage
exe2bin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/02/2012, 19h06   #6
Membre habitué
 
Homme
Inscription : avril 2004
Messages : 305
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 305
Points : 130
Points : 130
au delà de la complexité de la chose, je voudrais savoir si la création d'une fenêtre prend beaucoup de ressources ou non. En particulier, vaut-il mieux:

1) créer 4 petites fenêtres pour les bords
2) créer une grosse fenêtre pour servir de frame (comme dans ce lien : http://msdn.microsoft.com/en-us/libr...8VS.80%29.aspx), donc un peu plus grosse que la fenêtre dont je désire ajouter les bords et la barre de titre, cette dernière étant une fenêtre fille de la frame
__________________
L'Opus attire les Prélats
d'Oursse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2012, 10h18   #7
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 21 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 21 481
Points : 28 760
Points : 28 760
Envoyer un message via MSN à Médinoc
Je dirais que oui, ça tend à bouffer des ressources. Au strict minimum, limite-toi à l'option 2 (si tu ne subclasses pas la fenêtre à la place).
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/02/2012, 23h33   #8
Membre habitué
 
Homme
Inscription : avril 2004
Messages : 305
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 305
Points : 130
Points : 130
Citation:
Envoyé par Médinoc Voir le message
Je dirais que oui, ça tend à bouffer des ressources. Au strict minimum, limite-toi à l'option 2 (si tu ne subclasses pas la fenêtre à la place).
je pense que de toute façon, je ne ferai pas de subclassing. D'après la doc msdn que je viens de lire, je ne peux pas subclasser une fenêtre d'une autre application, donc ça règle le problème (vu que je veux modifier le thème de n'importe quelle application qui se lance).
__________________
L'Opus attire les Prélats
d'Oursse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2012, 06h50   #9
Expert Confirmé Sénior
 
Avatar de Médinoc
 
Homme
Développeur informatique
Inscription : septembre 2005
Messages : 21 481
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 28
Localisation : France

Informations professionnelles :
Activité : Développeur informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : septembre 2005
Messages : 21 481
Points : 28 760
Points : 28 760
Envoyer un message via MSN à Médinoc
Vu que dans tous les cas il faut hooker, et que le hook injecte une DLL...
__________________
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone.
-- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
Médinoc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2012, 16h03   #10
Membre habitué
 
Homme
Inscription : avril 2004
Messages : 305
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 305
Points : 130
Points : 130
c'est pas faux
__________________
L'Opus attire les Prélats
d'Oursse est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h09.


 
 
 
 
Partenaires

Hébergement Web