Dimensions de la surface client [Résolu]

Signaler
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009
-
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009
-
Bonjour Brunews (je dit Brunews car en general c'est lui qui repond a mes messages le pauvre, bon d'un autre cote c'est lui l'admin) et bounjour au autre aussi. Bon voila je te remercie de m'avoir renseigner pour le trace des graphiques. Le Petzold ma bien aider. Cependant j'ai un petit probleme que je n'arrive pas a resoudre. Dailleur a se sujet je ne sais pas si c'est moi ou s'il y a une erreur mais page 46 du chapitre 5 il dit que pour changer l'origine de la fenetre il faut utiliser SetViewportOrgEx(hdc, 0, cyClient,NULL) et il indique qd meme temps ceci change le sens de l'axe y mais chez moi ca na change pas le sens (bon c'est pas tres grave mais voila).

En fait je cherche a trace un graphique plus long que haut. Je voudrais donc avoir une tres longue zone client dans la fenetre avec une barre de defilement horizontale, mais je n'ai pas trouver comment faire. Bon je supposes que tu vas m'indiquer un chapitre du Petzold (comme ca au fur et a mesure je le lit en entier lol). Bon j'ai bien compris quec'est a la réception du message WM_SIZE, que nous récupérons les dimensions de la surface client de la fenêtre dans le paramètre lParam joint au message. La largeur étant dans son mot de poids faible et la hauteur dans son mot de poids fort. Nous les extrayons à l'aide des macros LOWORD et HIWORD. mais comment faire pour avoir donc une barre de defileemnt sur le bas et une zone client tres tres longue?

Bon dvance merci

20 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
me revoila, dur dur de ne pas avoir plus de temps.
Ton truc pourrait être impec à faire en source pour cppfrance mais honnêtement j'aimerais mieux partir sur un projet vide, mon code ne va peut-être pas correspondre au tien.
Si ça t'intéresse je pourrais voir ça en temps libre petit à petit à partir de la semaine prochaine, alors nenni code mais un cahier des charges précis et un fichier exemple où prendre les données.
OK ???

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
Regarde MSDN à ScrollWindowEx, tu lis bien et ensuite tu suis le lien d'exemples en bas.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

euh c'est pas pour faire mon boulet mais je suis aller sur le site http://msdn.microsoft.com/library et j'ai rechercher ScrollWindowEx et la ben y en tout tout pelin alors c lequel que je prend stp

merci
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
Je reconnais que c'est un peu galère à trouver avec MSDN sur le net, en local va nettement mieux.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
14814
Date d'inscription
lundi 11 juillet 2005
Statut
Modérateur
Dernière intervention
22 septembre 2020
92
T'as pensé à lancer ton fan-club BruNews? :P

Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
Le site de mon mariage
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

Ok ok ok , bon apres avoir bien lu et essayer d'implementer quelque chose j'ai pu m'apercevoir que c'etait bien complique tout ca. Ben oui en fait comme je t'ai dit je trace mon graph a aprtir de donnes que je lit au fur et a mesure dans un fichier. Le probleme c'est que moi je pensais que je pouvait trace tout mon graph dans la zone client , et ensuite n'en montre qu'une parti dans la fenetre. En fait c'est comme si on deplacait un loupe sur un pelicule photo par exemple.
Mais en fait d'apres ce que j'ai pu voir dans l'exemls, il faut redessiner la zoen client qui se trouve dans la fentre a chaque fois que l'on depace la scroll bare (en gros ca revient a dessiner le graph par parti quoi). Le probeleme c'est que pour faire ca j'ai deux solution, soit je deplace ma tete de lecture de fichier pour pouvoir redessiner la bonne partie, soit j'enregistre tous le fichiers en memoire(dans un tableau avec malloc par exmeple) puis je lui dit d'acceder a tel valeur du tableau. En tous les cas dit moi si je fais fausse route car la franchement j'avoue que c'est quand meme pas tres simple.

d'avance merci

PS: Bruno a eu une bonne idee, mettons en place le fan club de Brunews mais je previens d'avance c pas moi la pompom girl
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
Si ce n'est pas trop énorme, la version tableau me semble préférable pour la vitesse.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

Ben justement c'est bien mon probleme car la taille des fichiers sera sans doute tres variable (mais a mon avis jamis en dessous de 20Mo). Car en fait la taille du fichier depend directement du temps que dure l'aquisition, et du nombre de paramtres que l'on enregistre lors de cette aquisition. Du coup je penses que ca peut atteindre une taille dans les 200 Mo. Au quel est ce possble de faire les deux methode en diasnt par exemple que si le fichier lu depasse la taille de 100 Mo par exemple on passe en mode lecture ficheir? merci
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

AAAAAAAAAAhhhhhhhhhh je coris que je vais finir par me sucider. Bon j'ai passer ma journe la dessus, et j'ai un gros probleme ca na marce pas. En fait deja je ne sais meme pas si ma zone client est relleemnt redimensionner, en plus lorsque je fait bouger ma scroll barre mon graph ne s'actualise po. Enfin je peux dire que dans un sens, il continu a trace la ligne en continu a la place de trace la suite.
Bon je sais que c'est pas bien mais comme je ne penses pas y arriver tout seul voici mon code qui gere la fenetre graphique:


/*=================================================================================*/


/* Fonction qui scan le fichier pour connaitre le nombre de points */


/*=================================================================================*/


int readfile(
void)


{



int endfile;



int i;



int xRead;



float yRead;


FILE * open;


open = fopen("tab1.txt","r");


i = 0;


DefineN:


endfile = feof(open);



if (endfile == 0)


{


i++;


fscanf (open,"%d ",&xRead);


fscanf (open,"%f\n",&yRead);



goto DefineN;


}



else


{


fclose(open);


}


return i;


}


/*==================================================================================*/


/* fonction used to record the file in a table */


/*==================================================================================*/


int recintable(
void)


{



int N;


FILE * open;



int xRead;



float yRead;


open = fopen("tab1.txt","r");
//Ouvre le fichier des points




N = readfile();


x=(
int *)calloc(N,(
sizeof(
int)));


y=(
float *)calloc(N,(
sizeof(
float)));



if(x==NULL)


{



return FALSE;


}



if(y==NULL)


{



return FALSE;


}



/*on enregistre le fichier en memoire*/



for (
int cpt = 1; cpt
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

ah oui rassure toi je libere la memoire a la fin du prog par free(x) et free (y) mais d'ailleur a ce sujet je ercoit un message d'erreur damage ....
une idee a ce sujet?

merci
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

Correction 1:

Bon je continu a cherhcer et en fait je me suis appercu que je ne definissait pas correctemnt la scroll bare. voici donc le premier correctif:


case WM_SIZE:


cxClient = LOWORD (lParam) ;


cyClient = HIWORD (lParam) ;


si.cbSize =
sizeof(si);


si.fMask = SIF_RANGE | SIF_PAGE;


si.nMin = 0;


si.nMax = xClientMax;


si.nPage = cxClient / 100;


SetScrollInfo(hwnd, SB_HORZ, &si, TRUE);


si.nMax = xClientMax;



return 0 ;

cependant mon probleme d'actualisation du graph est toujours la
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

bon j'ai aussi rajouter ca UpdateWindow (hwnd);
quand on fait le test pour savoir si on a changer de position mais ben y a toujours rien qui se met a jour snif
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

je me pose des questions sur la validite du nombre numpoint = si.nPos* (N*2)/(si.nMax);
Je crois que le calcul de ne se fait pas ou n'est pas possible du coup il revoit la valeur nil. En plus je crois qu'en fait il faut toujours que x se remmette a 0 sinon on dessine hors de la zone afficher par la fentre

merci
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

CCCAAAA YYY EST Allelouya lol. Bon ben vous avez compris je crois, j'y suis arrive. Pour ceux que ca intresse voici le code.


/*=================================================================================*/


/* Fonction qui scan le fichier pour connaitre le nombre de points */


/*=================================================================================*/


int readfile(
void)


{



int endfile;



int i;



int xRead;



float yRead;


FILE * open;


open = fopen("tab1.txt","r");


i = 0;


DefineN:


endfile = feof(open);



if (endfile == 0)


{


i++;


fscanf (open,"%d ",&xRead);


fscanf (open,"%f\n",&yRead);



goto DefineN;


}



else


{


fclose(open);


}


return i;


}


/*==================================================================================*/


/* fonction used to record the file in a table */


/*==================================================================================*/


int recintable(
void)


{



int N;


FILE * open;



int xRead;



float yRead;


open = fopen("tab1.txt","r");
//Ouvre le fichier des points




N = readfile();


x=(
int *)calloc(N,(
sizeof(
int)));


y=(
float *)calloc(N,(
sizeof(
float)));



if(x==NULL)


{



return FALSE;


}



if(y==NULL)


{



return FALSE;


}



/*on enregistre le fichier en memoire*/



for (
int cpt = 1; cpt
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

Ok ben merci beaucoup je poste le cahier des charge au plus tard demain par contre pour ce qui est du fichier exemple, je peux te l'envoyer ou?.
Merci encore de ton aide.
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
Mets le en download sur un ftp, tu dois bien avoir un ftp par ton fournisseur internet.

Je n'avais même pas vu que c'était bon dans ton avant dernier post, pas mal du tout. On va revoir déjà la lecture du fichier, fscanf etc... rien à faire sous Windows.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

Oui je sais que c'est bizarre le fscanf, mais comme tu la sias j'apprend sur le tas et donc je me sers des fonctions que je connais. Bon en plus je me sers de fscanf car en fait j'ecrit deja dans le fichier avec fprontf et ce afin de pouvoir lire le fichier avce n'inporte qu'elle editeur de texte (ben oui mon fichier et un .txt je peux donc le lire avec note pad, wordpad, word ....)
Bon voila pour le cahier de charges (enfin c'est ce que j'essayerai de faire si j'avais ton niveau):

Creer une fentre dans lequel on trace un graphique a partir d'un fichier contenant les coordonees des points. Ce fichier est ecrit avec fprintf. La premiere ligne de ce fichier comprend 6 valeur qui indique quelle donnees on ete enregistree ou non. Puis elle comporte 5 lignes de texte (premiere ligne non du fichier en tete correspondant a l'aquisition (ce fichier entete contient pour info, la date de creation des 2 fichiers, les donnees energistrees, les systemes metrique utilises lors de l'experience ...)) un ligne vide (saut de ligne), l'inscription data, une ligne vide et une ligne avec les entetes des colones.

Ensuite, on trouve les colone des coordonees.

Pour arriver a cette fenetre graphique, l'utilisateur passe par le biais d'une boite de dialogu. Cette boite de dailogu comporte un bouton permettant de charger le fichier de points, puis une autre fenetre s'ouvre lui permetatnt de choisir les donnees dont il veut trace le graph (parmis celle que contient le fichier bien sur). Puis l'utilisateur reveitn a la boite de dialog principal et clique sur un bouton qui permet d'afficher la fenetre du graphique.

Cette fenetre graphique contient elle:

- les graphiques demander
- Une axes des abscice avec ces graduations,
- La legende (qui s'affiche tout le temps,y compris qd l'utilisateur actionne la scroll bar) dans le
coin en haut a droite.
- une barre d'outil permettant a l'utilisateur de choisir de coefficaient multiplicateur sur laxe des abscice et des
ordonnes in dependement. (en gos ca permet de dilater ou de rapeticir les graph en ordonnes et en abscisse)

Le nec plus ultra serait de permttre a l'utilisateur d'enragistre ce graphique (en bipmap ou .gig par exemple) afin qu'il puisse si le souhaite l'integre dans un rapport (fait avec word ou tout autre editeur texte).

Voila je sais que ce cahier des charges est assez ambitieux mais bon vu que tu es un crac. Si tu as besoin de precision n'hesite pas.

Pour ce qui est du fichier test, je vais regarder ca des maintenant. Je penses qu'il sera dispo d'ici 2 heures grand max. des qu'il est dispo je t'envoi le lien.

Encore merci de ton aide. Je suis pres a t'aider (meme si je suis pas tres fort) pour coder des partis ou ... voial tiens moi au courant et encore merci de ton aide
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
21
Cette url notée pour y revenir mais comme j'ai plein de taf qui s'empile faudra pas être trop pressé.

ciao...
http://dev.winsysdev.com
BruNews, MVP VC++
Messages postés
99
Date d'inscription
jeudi 9 février 2006
Statut
Membre
Dernière intervention
2 février 2009

Ok pas de probleme, en fait si tu veux j'ai encore on va dire deux moi pour fianliser mon prog (fin de mon stage vers la fin juin mais bon enjuin je penses que je serait occupe sur d'autre chose). De toute facon en attendant, je vais retravailler un peu mon code et puis voila ... ce sera en attendant mieux.
Pour ce qui est du fichier text, j'ai essayer de ragerder sur aol pour une ftp mais on peut pas mettre de fichier, je vais essayer de creer un page web ce week end et j'enverai l'adrees ou tu peux la download.

Encore merci