C++, changer la résolution d'ecran

leprov -  
 leprov -
bonjour a tous.
voila, j'aimerais faire un programme c++ qui tout bêtement change la résoltion d'écran au démarrage. donc juste' un programme a la con a aajouter au boot, pas de soucis...mais quoi qu'est-ce qui faut comme code pour changer la résolution? j'ai cherché sur le net, pas trouvé, et je suis juste un pauvre petit étudiant en informatique qui n'a pas encore certaines bases...je sais que je pourrais faire ca dans un autre langage, je trouverais ca facilement, mais vu que j'aurais d'autres trucs a faire en c++ dans le style, autant s'y mettre des maintenant. sinon si vous avez un lien qui parle des outils graphique utilisable en c++ sous windows (compilateur = visual c++ 6.0, mais peut trouver autre chose, pas de soucis, et si cest juste des librairies a la con a dl, pas de soucis non plus), ca serait le bienvenu aussi...
merci d'avance
A voir également:

5 réponses

damien
 
Salut,

Voir du cote de ChangeDisplaySettings et compagnie.

A+
Damien
0
leprov
 
merci damien. depuis ke tas posté jai cherché un peu...bon deja jai vu sur msdn jai un peu de mal a capter comment ca marche, cest pas super bien expliqué, mais ca je vais approfonfir...c'est possible de faire un prog en tache de fond (systray si jai bien tt suivi) qui me change une fois la résolution au lancement, et une autre fois a la fermeture? (dailleurs si vous avez des explications plus concretes que msdn, je veux bien....)
merci d'avance
0
leprov
 
bon voila apres avoir fouillé comme tu m'as dis j'ai fait le code suivant qui n'a aucun effet....queski se passe? keske j'ai mal fait?

#include "stdafx.h"

int chgScreenResolution()
{
DEVMODE dvMode;
//ZeroMemory(&dvMode, sizeof(dvMode));

//la ligne precedente, a quoi elle sert? pourquoi faut mettre tous les bits a zero? si qqun peut m'expliquer....

dvMode.dmSize = sizeof(dvMode);
const unsigned long lWidth = 800;
const unsigned long lHeight = 600;
const unsigned long lBits = 32;

dvMode.dmPelsWidth = lWidth;
dvMode.dmPelsHeight = lHeight;
dvMode.dmBitsPerPel = lBits;

ChangeDisplaySettings(&dvMode, 0);

return 0;

}



int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
chgScreenResolution();

return 0;
}
0
damien
 
Bon en ce qui concerne le changement de resolution, tout d'abord, la ligne
ZeroMemory(&dvMode, sizeof(dvMode));

sert à t'assurer que tous les "champs" de ta structure seront bien initialisé à 0.

Ensuite dans ton appel à ChangeDisplaySettings, il faut que ta structure soit completement definis, il ne suffit pas seulement de positionner dmPelsWidth et qq autres.

En fait le meilleur moyen est de faire appel à la fonction EnumDisplaySettings, jusqu'a que tu trouve une resolution conforme à ce que tu souhaite et ensuite la passer à ChangeDisplaySettings et le tour est joué.

par ex:
while(EnumDisplaySettings(NULL, i, pscreenRes))
{
if(pscreenRes->dmPelsWidth == 1024 && pscreenRes->dmBitsPerPel == 16)
{
_wmemcpy(pscreenRes2, pscreenRes, sizeof(DEVMODE));
}

i++;
}

ChangeDisplaySettings(pscreenRes2, 0);



A+
Damien
0
leprov > damien
 
ok merci. juste qqs questions sur ce bout de code.
a prpos de enumdisplaydevice, deja quest ce qui fait qu'il devient false et que la boucle sarrete? ensuite pk mettre le peripherique sur NULL, ca donne lecran par defaut cest ca? le mode grapgique cest un nombre compris entre 0 et un autre truc, et la boucle sarrete des ke i devient invalide paske a ce moment enumdisplaydevice devient FALSE?
ensuite psscreenres, cest un pointeur? et mes psscreenres, cest koi, cest des DEVMODE que jai declaré plus haut? deja merci pour cette source, ca meclaircit deja un peu, mais ya encore qqs trucs flous....je debute.....
0
leprov > damien
 
et a propos de _wmemcopy, bon ca copy parametre 2 ds parametre 1 bit par bit je suppose, cest koi le troisieme parametre (et au passage, la fonction est ds quelle librairie?)
0
damien > leprov
 
Salut,

Alors enumDisplaySettings ( attention ne pas confondre EnumDisplayDevice et EnumDisplaySettings) s'arrete en cas d'erreur ou si i est sup au dernier mode possible:

Graphics mode indexes start at zero. To obtain information for all of a display device's graphics modes, make a series of calls to EnumDisplaySettings, as follows: Set iModeNum to zero for the first call, and increment iModeNum by one for each subsequent call. Continue calling the function until the return value is zero.

EN allant de i=0 jusqu'a ce que EnumDisplayDevice te sorte 0 tu continue afin d'enumerr tous les modes

Mettre le periph à NULL enumere les modes pour le device graphique par default. Sinon un serie d'appel à EnumDisplayDevice pour pouvoir enumerer tous les modes possibles pouir tous les device graphiques.

pscreenRes est un pointeur vers DEVMODE. DEVMODE est une structure qui contient des infos sur un mode graphique ( en tres gros).

Pour memcpy, voir l'equivalent Win32 CopyMemory sur MSDN, le dernier parametres represente la taille que tu veux copier.

A+
Damien
0
leprov > damien
 
merci pour ts tes conseils, desormais ca marche, mais il y a un hic...apres l'éxecution du programme, j'ai une espece de balayage sur l'écran....c'est du a quoi?c'est tres moche et tres desagreable...
ensuite je vais essayer de me demerder pour mettre tout ca ds le systray, si j'ai des problemes je reposterais.
encore merci
a+
0
damien
 
Salut,

Rassure-moi, tu n'as pas posté tout ton code....sinon c'est normal que cela ne fonctinne pas ;-)

Je recupere qq vieux exemples pour une reponse un peu plus tard

A+
Damien
0

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

Posez votre question
leprov
 
bah jai posté tt mon code, en me disant que ce code me changerais la résolution et pi basta. la ca ne fait strictement rien. avec ca je voulais juste changer la resolution, point barre. meme pas, ca fait rien. et je capte pas pk, ya un truc ki ma echappé, mais faut dire ke pr un debutant, msdn est fantastique, on capte tt en un instant...franchement je trouve cest merdique comme cest expliqué. bon sur ce, merci davance a tt le monde pr les autres reponses qui jespere arriveront bientot...
0