API win32 problème d'affichage

Résolu
rachid12450 Messages postés 13 Date d'inscription mardi 4 juillet 2006 Statut Membre Dernière intervention 4 mars 2009 - 17 nov. 2006 à 11:19
rachid12450 Messages postés 13 Date d'inscription mardi 4 juillet 2006 Statut Membre Dernière intervention 4 mars 2009 - 20 nov. 2006 à 18:30
Ma question est celle d’un débutant API win32


Voilà j’ai une fenêtre de dialogue avec DialogBox à l’aide de l’éditeur des ressources VC++ j’y ai inséré un tas de contrôles Edit, Boutton, etc..


J’ajuste la taille de la fenêtre pour que tous les contrôles  soient visibles sans pour autant que la boîte dialogue prenne tous l’écran je compile je fais des essais tout est parfait.


Le problème est quand j’exécute le .exe  sur un autre ordinateur, les caractéristiques d’affichages ne sont plus les mêmes. Certains contrôles ne sont plus visibles même quand je maximise la boîte de dialogue.


Comment puis-je éviter ce problème ?


Merçi d’avance pour toute aide


A bientôt.

13 réponses

racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
17 nov. 2006 à 17:42
Comme je disais plus haut, les dimensions et positions des controles doivent être calculés en fonction de la résolution d'écran. La fonction GetSystemMetrcis() permet de retouver les dimensions de l'affichage.
3
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
17 nov. 2006 à 11:28
Cela est du à la résolution de l'ecran.
Tu n'y peux directement rien. La seule parade est de gérer le positionement et la taille des controles en dynamique.

Shell
0
rachid12450 Messages postés 13 Date d'inscription mardi 4 juillet 2006 Statut Membre Dernière intervention 4 mars 2009
17 nov. 2006 à 12:02
merçi pour l'indication
mais sachant que je suis un imposteur pour l'informatique et que le seul langage que je connaisse bien est le C avec des notions d'API win32, je reste dans le brouillard
je souhaiterais un peut plus d'indications ou une documentation à consulter ou un exemple etc..
merçi
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
17 nov. 2006 à 12:15
Salut,
Ce problème est l'une des raisons pour lesquelles je n'aime pas l'éditeur de ressources. Pour que l'application ait la même apparence sur toutes les résolutions d'écran, j'utilise CreateWindow() pour créer les controles pendant le traitement de WM_INITDIALOG. La position et les dimensions des controles seront calculés en fonction de la résolution d'écran récupérée avec la fonction GetSystemMetrics().
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 nov. 2006 à 12:22
WM_INITDIALOG est appelé aussi avec une dialog en ressource, on gagne les appels CreateWindow et donc énormément en vitesse d'affichage.

ciao...
BruNews, MVP VC++
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
17 nov. 2006 à 12:34
BruNews >> Oui c'est vrai qu'avec  les controles dans les ressources la boite s'affiche plus vite. Mais il ne s'agit que de la première apparition de cette boite de dialogue lors de son lancement. Après, il n'y a plus de différence. Pour ce genre de cas, je pense qu'il vaut mieux sacrifier une petite  seconde pour le premier affichage de la boite et avoir le résultat souhaité.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 nov. 2006 à 12:45
Juste pour dire qu'on peut faire les MoveWindow dans WM_INITDIALOG.
J'ai fait ainsi dans un petit jeu dans lequel j'ai 100 STATIC qui servent de cellules, y a pas photo question vitesse avec création dynamique.

ciao...
BruNews, MVP VC++
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 nov. 2006 à 13:08
SetWindowPos ne te convient pas ?

ciao...
BruNews, MVP VC++
0
racpp Messages postés 1909 Date d'inscription vendredi 18 juin 2004 Statut Modérateur Dernière intervention 14 novembre 2014 17
17 nov. 2006 à 13:13
Désolé, j'avais supprimé ma question car je pense que MoveWindow() redimensionnera la boite pendant WM_INITDIALOG. Tu as déjà testé le fonctionnement de MoveWindow() et SetWindowPos() sur une boite  pendant WM_INITDIALOG?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
17 nov. 2006 à 13:34
Aucun problème pour autant que je me souvienne.

ciao...
BruNews, MVP VC++
0
rachid12450 Messages postés 13 Date d'inscription mardi 4 juillet 2006 Statut Membre Dernière intervention 4 mars 2009
17 nov. 2006 à 17:10
Rebonjour à tous merçi de l'intérêt
c'est très sympa cette richesse du débat
 
Excusez de ne pas suivre tout à fait le rythme<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>





Je reviens pour poser la question autrement





J’ai une application  ou ne figure pas de dialogue crée par  DialogBox  ou autre, tous les contrôles sont créés  CreateWindowEx  et non avec l’éditeur des ressources





l'application se structure ainsi:





Fenêtre principale :





Après enregistrement des  classes






    hwndMain =





CreateWindowEx (WS_EX_OVERLAPPEDWINDOW, " MaClass_1", "titre",






           WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 995, 440,  NULL, NULL, hInstance, NULL);






 






Dans WM_CREATE de sa procèdure





Je  crée






 






GetClientRect(hwndMain, &rc);





hwndChild =





CreateWindowEx(WS_EX_CLIENTEDGE, " MaClass2", "", WS_CHILD | WS_VISIBLE,






                                                                                                                                                                          rc.left+5, rc.top+25, rc.right-10, rc.bottom-30, hwndMain,NULL, hInst, NULL);






 






dans la procèdure de hwndChild








case WM_CREATE:





je crée différents contrôles par exemple






 






CreateWindowEx(0,"Edit",     "10000.00",      WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP | ES_RIGHT, 240, 40,150,20, hwndChild, (HMENU)IDC_CAPITAL, hInst, NULL);





CreateWindowEx(0,"Combobox", "", WS_CHILD | WS_VISIBLE | WS_TABSTOP | CBS_DROPDOWN  | WS_VSCROLL, 580, 40,150,160, hwndChild, (HMENU)IDC_TYPE_ECHEANCE, hInst, NULL);





ETC…..





ces dimensions dans les contrôles et les fenêtres sont ajustées pour que tout soit apparents c'est le cas après compilation essais. 






Le problème est quand je lance l'éxécutable sur une autre machine  les caractéristiques d'affichages ne sont plus les mêmes. Certains contrôles ne sont plus visibles même quand je maximise la boîte de dialogue.
et pourtant je n'utilise pas d'éditeur de ressource rien que pour un menu déroulant qui est "sans intérêt"
0
gagah1 Messages postés 509 Date d'inscription samedi 28 juin 2003 Statut Membre Dernière intervention 3 août 2010
18 nov. 2006 à 09:52
N'oublie pas InitCommonControls( ) si l'application a un support de thèmes XP sinon les controles n'apparaient pas.
0
rachid12450 Messages postés 13 Date d'inscription mardi 4 juillet 2006 Statut Membre Dernière intervention 4 mars 2009
20 nov. 2006 à 18:30
effectivement en utilisant GetSystemMetrics j'ai pu définir des les dimmensions et positions des contrôles relativement à la résolution de l'écran. cela permet de s'assurer de la visibilité des contrôles sur n'importe quelle machine. il faut juste bien maitrîser les différents valeurs possibles que peut prendre le paramètre  fournit à  GetSystemMetrics.


Encore une fois merçi beaucoup


 


 
0
Rejoignez-nous