|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre habitué
![]() Inscription : avril 2004 Messages : 305 ![]() |
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 |
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() |
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. |
|
|
00
|
|
|
#3 | |
|
Membre habitué
![]() Inscription : avril 2004 Messages : 305 ![]() |
Citation:
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 |
|
|
|
00
|
|
|
#4 |
|
Expert Confirmé Sénior
![]() |
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. |
|
|
00
|
|
|
#5 |
|
Membre habitué
![]() Inscription : mars 2009 Messages : 208 ![]() |
bon courage
|
|
|
00
|
|
|
#6 |
|
Membre habitué
![]() Inscription : avril 2004 Messages : 305 ![]() |
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 |
|
|
00
|
|
|
#7 |
|
Expert Confirmé Sénior
![]() |
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. |
|
|
00
|
|
|
#8 |
|
Membre habitué
![]() Inscription : avril 2004 Messages : 305 ![]() |
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 |
|
|
00
|
|
|
#9 |
|
Expert Confirmé Sénior
![]() |
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. |
|
|
00
|
|
|
#10 |
|
Membre habitué
![]() Inscription : avril 2004 Messages : 305 ![]() |
c'est pas faux
__________________
L'Opus attire les Prélats |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com