[Win32] Comment laisser le style Windows 9* à une boite de dialogue alors que la

Résolu
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Dernière intervention 7 février 2011 - 22 nov. 2008 à 16:06
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Derniè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.

Cordialement, uaip.

6 réponses

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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.
3
jeffy131 Messages postés 123 Date d'inscription samedi 14 juillet 2007 Statut Membre Dernière intervention 29 mars 2009 1
22 nov. 2008 à 17:34
C'est une FAQ Win32 api
Voir sur le newsgroup professionnel des apis win32 :
news://194.177.96.26/fr.comp.os.ms-windows.programmation
(TA)
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Derniè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...

Cordialement, uaip.
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
25 nov. 2008 à 00:19
Tu utilises quel compilateur?
0
uaip Messages postés 1466 Date d'inscription mardi 20 février 2007 Statut Membre Derniè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

Cordialement, uaip.
0
Rejoignez-nous