API win32 problème d'affichage [Résolu]

Signaler
Messages postés
13
Date d'inscription
mardi 4 juillet 2006
Statut
Membre
Dernière intervention
4 mars 2009
-
Messages postés
13
Date d'inscription
mardi 4 juillet 2006
Statut
Membre
Dernière intervention
4 mars 2009
-
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

Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
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.
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
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
Messages postés
13
Date d'inscription
mardi 4 juillet 2006
Statut
Membre
Dernière intervention
4 mars 2009

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
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
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().
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
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++
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
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é.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
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++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
SetWindowPos ne te convient pas ?

ciao...
BruNews, MVP VC++
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
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?
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
25
Aucun problème pour autant que je me souvienne.

ciao...
BruNews, MVP VC++
Messages postés
13
Date d'inscription
mardi 4 juillet 2006
Statut
Membre
Dernière intervention
4 mars 2009

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"
Messages postés
509
Date d'inscription
samedi 28 juin 2003
Statut
Membre
Dernière intervention
3 août 2010

N'oublie pas InitCommonControls( ) si l'application a un support de thèmes XP sinon les controles n'apparaient pas.
Messages postés
13
Date d'inscription
mardi 4 juillet 2006
Statut
Membre
Dernière intervention
4 mars 2009

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