uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011
-
22 nov. 2008 à 16:06
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011
-
25 nov. 2008 à 14:06
Bonjour à tous,
Ma question est toute bête (je pense) pourtant je n'y arrive pas.
En gros, j'ai créé une fenêtre utilisant l'API Win32, et je lui ai mis le style XP en incluant un fichier "manifest.xml". Depuis cette fenêtre, plusieurs boites de dialogue peuvent être ouvertes. Elles aussi ont donc le style XP.
Comment faire pour ne pas attribuer le style XP à l'une des boites de dialogue ? (autrement dit, pour qu'elle reste au style Windows 9*).
Ma recherche dans le forum n'a rien donné...
Merci d'avance.
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 24 nov. 2008 à 23:06
Salut,
Si tu veux que les controles d'une boîte de dialogue n'aient pas le syle XP il suffit d'utiliser SetWindowTheme() dans une boucle à la fin du traitement de WM_INITDIALOG. Exemple:
case WM_INITDIALOG:
//...
HWND hwndchild;
hwndchild=FindWindowEx(hDlg,0,0,0);
do
{
SetWindowTheme(hwndchild,L"",L"");
hwndchild=FindWindowEx(hDlg,hwndchild,0,0);
}while(hwndchild);
//...
Pour que ce code fonctionne il faut inclure uxtheme.h et lier uxtheme.lib au projet.
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 25 nov. 2008 à 00:01
Salut, salut
jeffy131, je suis allé faire un tour, et je n'ai pas trouvé mon bonheur
racpp, en effet ça correspond à ce que je cherchais, cependant... ça ne marche pas.
Suite à ton bout de code, j'ai cherché des infos sur ces fonctions, j'ai compris comment les utiliser, etc, le programme compile, mais rien ne passe.
Je suis allé visiter ceci :
http://msdn.microsoft.com/en-us/library/bb759827(VS.85).aspx http://msdn.microsoft.com/fr-fr/library/ms649781(VS.85).aspx (et d'autres liens qui en découlent)
J'ai effectué tous les tests, comme par exemple (je cite)
hwndButton = CreateWindow (TEXT ("button"), ...);
if (hwndButton)
{
SetWindowTheme (hwndButton, TEXT (" "), TEXT (" "));
}
Il est "tout bête" mais rien ne se passe.
J'ai remplacé mon manifest par tous ceux qu'ils proposaient (même si c'est absurde pour certains, autant trop essayer que pas assez).
Je me doute bien que le problème vient de moi (et non de la machine) mais je ne sais pas d'où exactement...
racpp
Messages postés1909Date d'inscriptionvendredi 18 juin 2004StatutModérateurDernière intervention14 novembre 201417 25 nov. 2008 à 00:14
Je viens de faire un test chez moi et ça marche parfaitement. J'ai fait une fenêtre principale et une boite de dialogue fille. Grâce au bout de code mentionné tous les controles de la boite ont le style classique alors que ceux de la fenêtre mère ont le style XP.
As-tu testé la valeur de retour de SetWindowTheme()? Elle doit retourner 0 en cas de succès.
Vous n’avez pas trouvé la réponse que vous recherchez ?
uaip
Messages postés1466Date d'inscriptionmardi 20 février 2007StatutMembreDernière intervention 7 février 2011 25 nov. 2008 à 14:06
Olah ! Et bien écoute, je m'apprétais à t'expliquer comment j'avais procédé et ce qui ne marchait pas, mais avant d'écrire mon commentaire j'ai recompilé vite fait (je sais pas trop pourquoi d'ailleurs) et... ça fonctionne.
Alors là j'avoue ne pas comprendre. J'ai essayé pendant une bonne demi-heure hier, rien à faire. Et là, j'ouvre le compilo, je compile sans avoir touché au code et ça fonctionne.
Hier je ne comprenais pas pourquoi ça ne fonctionnait pas (vu que les commandes sont relativement simples à comprendre (quand on a le code sous les yeux ^^)) mais là je ne comprends pourquoi ça refonctionne.
Je vais estimer que c'est bon, alors.
Sinon pour infos, j'utilise Code::Blocks, j'avais donc linké libuxtheme.a et j'ai du rajouter #define _WIN32_WINNT 0x0501 pour pouvoir utiliser SetWindowTheme(); (je ne sais pas trop si c'est "dangereux" ou pas).
Un grand merci en tout cas