CUSTOMISATION DE CONTROLES AUTOMATIQUE OU APPLICATION DE THEME PERSO (WIN 32)

cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 - 10 sept. 2006 à 16:23
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013 - 25 sept. 2006 à 20:13
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/39508-customisation-de-controles-automatique-ou-application-de-theme-perso-win-32

SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
25 sept. 2006 à 20:13
C'est bon normallement plus de problemes, mais j'ai pas eu le temps de faire tout ce que je voulait faire.

Pour le "X" c'est fait expres, en fait j'avais 2 possibilitées:
1 - Redessiner par dessus l'ancienne barre de titre ,mais dans ce cas taille fixe (pas moyen de changer l'epaisseur de la barre de titre)
2 - Tout refaire
Avec la deuxieme solution je vire la barre de titre et me refait la mienne comme je veut, rien ne m'empeche de me refaire un boutton "X" perso cf http://nsrn1.free.fr/Images/custom.jpeg
kzimir666 Messages postés 44 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 24 septembre 2006
24 sept. 2006 à 22:27
J'ai oublié de dire que j'utilise VisualC++6.0...
Sinon dans le exe, la fenetre n'a pas de X pour fermer c'est normal ?
Merci pour ton travail :)
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
24 sept. 2006 à 21:44
Je viens de trouver le probleme
1-probleme avec les manifest et VC2005
Project Properties->Configuration Properties->Mainfest Tool->Input and Output->Embed Manifest'. This is set to 'YES' by default.
mettre a "NO"
2-
//le skin
//Customwin(Dlg);
setIconBoutton(Dlg,IDC_BUTTON4,"theme1\\icone1.ico");
Il faut virer les deux // devant Customwin(Dlg);

Demain soir je fait une mise a jour, désolé.
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
24 sept. 2006 à 21:35
Pour les problemes d'error LNK2001: unresolved external symbol il faut linker les libs msimg32.lib et Comctl32.lib.

Apres pour les chemins d'accés normallement il n'y a rien a changer il suffit d'appuyer sur "F5" avec VC++ 2005 Express sans deplacer aucun fichiers. En fait je ne gere pas les erreurs (par soucis de simplicité) mais la plupart des fonctions retournent 0 (ou false) en cas d'erreur il suffit de tracer en mode debug pour verifier.
SuperPat45 Messages postés 6 Date d'inscription vendredi 26 novembre 2004 Statut Membre Dernière intervention 24 septembre 2006
24 sept. 2006 à 18:57
Moi je l'ai compilé avec VC++ 2005 express sans aucune erreur ni warning,
mais si je lance le programme (compilé en mode debug) danc le répoertoire customwin le programmme ce lance mais rien ne ce skinne et en mode release, rien ne s'affiche....
kzimir666 Messages postés 44 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 24 septembre 2006
24 sept. 2006 à 16:00
Je n'arrive pas à compiler malheureusement :
Trackbar.obj : error LNK2001: unresolved external symbol __imp___TrackMouseEvent@4
boutton.obj : error LNK2001: unresolved external symbol __imp___TrackMouseEvent@4
Trackbar.obj : error LNK2001: unresolved external symbol __imp__TransparentBlt@44
boutton.obj : error LNK2001: unresolved external symbol __imp__TransparentBlt@44
fonction.obj : error LNK2001: unresolved external symbol __imp__TransparentBlt@44
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
24 sept. 2006 à 11:12
Ben pour le moment c'est juste une demo que je met ici pour avoir quelques remarques et conseils. Sinon oui si je la met ici c'est pour que les gens puissent s'en servir, il y a dedans pas mal de bout de code que j'ai trouvé egalement ici. Le projet final sera sous license GPL je pense.

Pour les commentaires, j'ai été legé je le reconnais mais je n'utilise que des apis de bases donc rien de bien complexe (sinon je peut expliquer la partie concernée ?).

Pour le franglais ca je vais le corriger, en fait je suis en train d'adapter un projet que j'ai commencé il y a au moins 1 an certains bout de code sont nouveaux d'autres ne sont que des c/c.

Pour utiliser le code, sans commentaires ni aide, c'est assez chaud. Dans la semaine je vais essayer de mettre la suite avec le loader xml, les scrollbars et les entetes GPL.
kzimir666 Messages postés 44 Date d'inscription dimanche 27 avril 2003 Statut Membre Dernière intervention 24 septembre 2006
24 sept. 2006 à 00:37
Ca parrait vraiment bien et je trouve que le tout sans héritage est une bonne chose car ça permet en effet de créer des plugin pour des logiciels plus facilement.
Est-il possible d'utiliser ton code pour créer un plugin (gratuit bien évidemment) ? :)
Bravo à toi.

Petit Hic: Les sources sont peu commentées et il n'y a aucun topo pour montrer comment utiliser ton code. Sinon, le Franglais c'est pas top. ;)
Mais ce sont des broutilles.
SuperPat45 Messages postés 6 Date d'inscription vendredi 26 novembre 2004 Statut Membre Dernière intervention 24 septembre 2006
18 sept. 2006 à 11:53
Voila qui est intéressant,

j'essaye justement de faire un plugin pour nsis permettant justement de skinner les contrôles.
Actuellement, j'arrive à skinner les boutons(Style XP off) et les scrollbars(NT only),

http://ultramodernui.sourceforge.net/

Ma question est:
Mon plugin étant sous licence zlib/libpng, puis-je utiliser quelques portions de ton code source pour mon plugin? (Ce serait bien que tu indique une licence pour ce code)
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
11 sept. 2006 à 20:00
Ben apres reflection l'heritage je laisse tomber.
J'ai a peine quelques variables a mettre en commun et les fonctions sont trop differentes. En fait je ne voit pas ce que ca pourrait m'apporter en performance et je trouve que de laisser comme ca c'est plus clair, si quelqu'un veut customiser juste un boutton (ce qu'on voit souvent sur ce forum) il lui suffit de jeter un coup d'oeuil dans boutton.cpp, tout est dedans il peut meme utliser le fichier seul.

Le coup du xml,j y avait jamais pensé mais il faut dire que mon premier projet etait une dll utlisable dans un environnement de script donc en fait elle ne donnait que des fonctions suplementaires et le codeur pouvait lui meme refaire son "loader xml".
La je corige les bugs, fini les controles que j'ai deja fait (combos,listview,...) et je m'attaque au loader c'est pas ce qui va me prendre le plus de temps.

Par contre MuPuf si tu es encore la, pour tes menus tu as utlisé quelles techniques ? En fait pour les items c'est bon ( via ownerdrawn) mais il m'est impossible de baisser ou modifier la menubar.
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
10 sept. 2006 à 21:31
Perso je trouve que la façon de gérer les skins et compliquée
Comme MuPuF, un fichier xml qui contient toutes les données, et juste un Load du fichier au démarrage et le tour est joué

Par contre j'ai oublié un delete dans mon code
Sorry
Et MuPuF y'a po de 'c' à Joky :)
MuPuF Messages postés 536 Date d'inscription mercredi 27 avril 2005 Statut Membre Dernière intervention 22 août 2008
10 sept. 2006 à 20:50
Hey hey, la mienne arrive pour gerer les skins, j'ai fais comme jocky a dit, héritage.
C'est un truc à mi-chemin avec les MFC, cad qu'on peut utiliser les fonctions win32 ou celles que j'ai créé. Et j'ai une escuse pour ça, c'est que je créé le skin à partir d'un xml.

Mais moi aussi je veux gerer les owner drawn, mais ce sera dans quelques temps, car j'ai d'autres choses qui attendent depuis trop longtemps.
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
10 sept. 2006 à 17:43
Ben en fait au contraire ce n'est pas une usine a gaz (enfin son utilisation). Il suffit de faire son dialog avec un editeur de ressource, faire son application avec les APIs classiques et rajouter quelques lignes d'initialisations.
En fait l utilité de la librairie c'est qu'on a pas a s'occuper du code qui gere les skins.
Il existe deja des librairies faisant ca mais toutes payantes.
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
10 sept. 2006 à 17:03
Oui me doute bien qu'il réinvente la roue mais bon s'il veut vraiment faire son truc, autant le faire bien.

Exemple pour les fonctions virtuelles

#include <windows.h>

class A
{
public:
virtual void f() { MessageBox(0, "Coucou je viens de A", 0, 0x40);};
};

class B : public A
{
public:
virtual void f() { MessageBox(0, "Coucou je viens de B", 0, 0x40);};
};

int main()
{
A a;
A *pa;

pa = new B();
pa->f(); //Affichera le message de B

return 0;
}
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
10 sept. 2006 à 16:57
JOKY > Ne pas perdre de vue que si c'est pour refaire une usine à gaz type MFC, inutile ça existe déjà et parfaitement testé.
SnOOpss Messages postés 571 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 5 décembre 2013
10 sept. 2006 à 16:48
Oui, je n'ai pas encore exploité les classes du tout, j'ai juste commencé a les mettre en place pour eviter d'avoir encore tout a refaire.
En fait je m'en servirais dans les versions futures pour des controles speciaux comme faire une slidebar comme le volume dans certain lecteur de mp3 (un triangle dont la taille et la couleur augmente) mais pour le moment je n'ai pas pu trouver de fonctions a mettre en virtuelle.

Sinon je ne connaissais pas du tout l'heritage, vais voir de ce coté.
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
10 sept. 2006 à 16:23
DestroyWindow n'est bon que parceque tu utilises CreateDialog
Sinon il faut utiliser EndDialog

Je trouve aussi que tu n'utilises pas toutes les possibilités des classes

Tu aurais dû utiliser l'héritage par exemple une classe bouton avec pour héritier une classe CheckBox etc... et ainsi mettre en place des fonctions virtuelles et plein de chose comme ça

Fin bref, quelques truc à revoir
Rejoignez-nous