définir une fonction dans une application MFC

définir une fonction dans une application MFC - C++ - Programmation

Marsh Posté le 26-05-2004 à 12:54:24    

je suis autodidact en c++ et mfc, voila mon probleme, j'ai une application crée avec MFC, il se trouve dans cette application il y a un boutton ou un checkbox et un deplacement de slider qui utilise la meme tache pendant un clic ou un deplacement d'un slider, donc j'ai réécrit a chaque fois la tache a excuter. je cherche un maniere de definir la fonction aileur une seule fois, ainsi a chaque fois que quelquechose utilise cette fonction, je fais juste fonction(); et ca execute. j'ai essayé de definir la fonction dans un nouveux fichier .cpp mais il merde car il ne reconnais pas les GetDlgItem...  
il me dit "error C2660: 'GetDlgItem' : function does not take 1 parameters"
ma fonction a executer est la suivante:

Code :
  1. void fonction(){
  2. CSliderCtrl * sliderr = (CSliderCtrl *) GetDlgItem (IDC_red); //slider rouge
  3. CSliderCtrl * sliderv = (CSliderCtrl *) GetDlgItem (IDC_green); //vert
  4. CSliderCtrl * sliderb = (CSliderCtrl *) GetDlgItem (IDC_blue);  //bleu
  5. int rouge=sliderr->GetPos()*2.55; //variable recupérant la valeur du curseur
  6. int vert=sliderv->GetPos()*2.55;
  7. int bleu=sliderb->GetPos()*2.55;         
  8. CRect rect2;
  9. CWnd* col=GetDlgItem(IDC_color);
  10. col->GetClientRect(&rect2);
  11. CDC* cdc2=col->GetDC();
  12. CPen cpen2;
  13. cpen2.CreatePen(PS_SOLID,1,RGB(rouge,vert,bleu));
  14. cdc2->SelectObject(&cpen2);
  15. double echx2=(double)(rect2.right - rect2.left)/(double)255;
  16. double echy2=(double)(rect2.bottom - rect2.top)/(double)255;
  17. int ix2,iy2;
  18. ix2=rect2.left;
  19. iy2=rect2.bottom;
  20. cdc2->MoveTo(ix2,iy2);
  21. int i=0;
  22. int j=0;
  23. for(i=0;i<256;i++){  //remplissage du carré de couleur
  24.  ix2=(int)(i*echx2);
  25.  iy2=0;
  26.  cdc2->MoveTo(ix2,iy2);
  27.  iy2=(int)(255*echy2);
  28.  cdc2->LineTo(ix2,iy2);
  29. }
  30. }


je vous remerci pour toute proposition  :jap:


Message édité par neg'gwada le 26-05-2004 à 13:36:13

---------------
--- WinSplit Revolution ---
Reply

Marsh Posté le 26-05-2004 à 12:54:24   

Reply

Marsh Posté le 26-05-2004 à 13:29:21    

[:mlc]
passe le résultat de ton GetDlgItem en paramètre à ta fonction...?

Reply

Marsh Posté le 26-05-2004 à 13:31:53    

skeye a écrit :

[:mlc]
passe le résultat de ton GetDlgItem en paramètre à ta fonction...?

j'ai edité, mais je vais testé, je pensais qu'il y avait un méthode plus générale sans avoir a mettre de paramettres et ou il recupere tout seul les valeur des GetDlgItem... [:spamafote]


Message édité par neg'gwada le 26-05-2004 à 13:34:47

---------------
--- WinSplit Revolution ---
Reply

Marsh Posté le 26-05-2004 à 13:33:05    


il est où le début de la fonction? :??:

Reply

Marsh Posté le 26-05-2004 à 13:35:32    

ca c'est la fonction en question je veux faire une fonction qui ferai ca, edité a nouveau


Message édité par neg'gwada le 26-05-2004 à 13:36:41

---------------
--- WinSplit Revolution ---
Reply

Marsh Posté le 26-05-2004 à 13:36:50    

neg'gwada a écrit :

ca c'est la fonction en question je veux faire une fonction qui ferai ca, edité a nouveau


 

skeye a écrit :

[:mlc]
passe le résultat de ton GetDlgItem en paramètre à ta fonction...?

Reply

Marsh Posté le 26-05-2004 à 13:41:07    

skeye , je veux bien faire passer ces valuer en parametre mais (je debute donc je n'ai pas encore toute les notions) quels parametres je rentre??? je fais  

Code :
  1. void fonction(int rouge,int vert, int bleu){
  2. blablabla
  3. }


 
et  

Code :
  1. CSliderCtrl * sliderr = (CSliderCtrl *) GetDlgItem (IDC_red); //slider rouge  
  2.      CSliderCtrl * sliderv = (CSliderCtrl *) GetDlgItem (IDC_green); //vert  
  3.      CSliderCtrl * sliderb = (CSliderCtrl *) GetDlgItem (IDC_blue);  //bleu  
  4. CWnd* col=GetDlgItem(IDC_color);


je le definit avant de lancer fonction(...) ?


Message édité par neg'gwada le 26-05-2004 à 13:42:45

---------------
--- WinSplit Revolution ---
Reply

Marsh Posté le 26-05-2004 à 13:43:54    

neg'gwada a écrit :

skeye , je veux bien faire passer ces valuer en parametre mais (je debute donc je n'ai pas encore toute les notions) quels parametres je rentre??? je fais  

Code :
  1. void fonction(int rouge,int vert, int bleu){
  2. blablabla
  3. }


 
et  

Code :
  1. CSliderCtrl * sliderr = (CSliderCtrl *) GetDlgItem (IDC_red); //slider rouge  
  2.      CSliderCtrl * sliderv = (CSliderCtrl *) GetDlgItem (IDC_green); //vert  
  3.      CSliderCtrl * sliderb = (CSliderCtrl *) GetDlgItem (IDC_blue);  //bleu  
  4. CWnd* col=GetDlgItem(IDC_color);


je le definit avant de lancer fonction(...) ?


mais non.
En paramètre tu passes tes CSliderCtrl *, et tu appelles tes GetDlgItem avant d'appeler la fonction.
 
[edit]
Ou alors p-e que tu peux passer tes IDC_machin en paramètre, aucune idée...


Message édité par skeye le 26-05-2004 à 13:45:11
Reply

Marsh Posté le 26-05-2004 à 13:44:49    

skeye a écrit :

mais non.
En paramètre tu passes tes CSliderCtrl *, et tu appelles tes GetDlgItem avant d'appeler la fonction.

:jap:  je test et je vous dit ca ce soir, car là je dois partir...


---------------
--- WinSplit Revolution ---
Reply

Marsh Posté le 26-05-2004 à 13:45:28    

neg'gwada a écrit :

:jap:  je test et je vous dit ca ce soir, car là je dois partir...


cf edit.

Reply

Marsh Posté le 26-05-2004 à 13:45:28   

Reply

Marsh Posté le 26-05-2004 à 22:47:37    

c'est bon ca marche, dans le ***Dlg.h je definis:
 CSliderCtrl * sred;
 CSliderCtrl * sgreen;
 CSliderCtrl * sblu;
 puis dans l'initialisation BOOL C***Dlg:: OnInitDialog()
je fais:
        sred = (CSliderCtrl *) GetDlgItem (IDC_red);
 sgreen = (CSliderCtrl *) GetDlgItem (IDC_green);
 sblu = (CSliderCtrl *) GetDlgItem (IDC_blue);
 couleur=GetDlgItem(IDC_color);
et enfi je creer ma fonction

Code :
  1. void fonction(CSliderCtrl * sliderr,CSliderCtrl * sliderv,CSliderCtrl * sliderb,CWnd* col){
  2. int rouge=sliderr->GetPos()*2.55;
  3. int vert=sliderv->GetPos()*2.55;
  4. int bleu=sliderb->GetPos()*2.55;
  5. CRect rect2;
  6. col->GetClientRect(&rect2);
  7. CDC* cdc2=col->GetDC();
  8. CPen cpen2;
  9. cpen2.CreatePen(PS_SOLID,2,RGB(rouge,vert,bleu));
  10. cdc2->SelectObject(&cpen2);
  11. double echx2=(double)(rect2.right - rect2.left)/(double)255;
  12. double echy2=(double)(rect2.bottom - rect2.top)/(double)255;
  13. int ix2,iy2;
  14. ix2=rect2.left;
  15. iy2=rect2.bottom;
  16. cdc2->MoveTo(ix2,iy2);
  17. int i=0;
  18. int j=0;
  19. for(i=0;i<256;i++){
  20.  ix2=(int)(i*echx2);
  21.  iy2=0;
  22.  cdc2->MoveTo(ix2,iy2);
  23.  iy2=(int)(255*echy2);
  24.  cdc2->LineTo(ix2,iy2);
  25. }
  26. }


Merci a tous  ;)


Message édité par neg'gwada le 26-05-2004 à 22:55:57

---------------
--- WinSplit Revolution ---
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed