Conserver messages dans hEdit à chaque envoi de nveau message [Résolu]

Signaler
Messages postés
18
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
11 novembre 2008
-
Messages postés
18
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
11 novembre 2008
-
Bonjour tout le monde:
Dsl mais je suis toujours aussi mauvais en winAPI depuis la dernière fois.
Mon problème est que je n'arrive pas à conserver les messages précédents dans ma fenêtre hEdit lorsque j'en envois un nouveau! (cf la partie du code concerné en gras) Comment-faire? Ca ne doit pas être bien compliqué mais j'ai bidouillé pas mal et sans succès.
Merci d'avance.
Noobinho

LRESULT CALLBACK MainWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    static HWND hEdit;
    static BOOL EditNotChg = TRUE;
    FILE *fp0, *fp1, *fp2;
    FILE *tmpf= 0;      //Opened temp. file
 
 char name[255],repertoire[255];
 char ext[7], mode[7];
 unsigned int i =0, j =0, k =0;
 unsigned int imax, jmax, kmax;
 unsigned char pix =0; 
 char *vtk, *vtkPtr;




 #define IDC_COMBO1 1000
 #define IDD_DIALOG1 101




 switch (uMsg)
    {
        case WM_CREATE:


            {
             HFONT hFont;


             hEdit = CreateWindow("edit","Pour générer les images acoustiques de votre échantillon : Fichier -> Générer les images acoustiques à partir d'un fichier VTK", WS_CHILD | WS_VSCROLL | WS_VISIBLE | ES_READONLY | BS_RIGHTBUTTON | BS_RADIOBUTTON,0, 0, 0, 0, hwnd, NULL, hinst, NULL);
             hFont = (HFONT)GetStockObject(ANSI_FIXED_FONT);
             SendMessage(hEdit,WM_SETFONT,(UINT)hFont,TRUE);
             SendMessage(hEdit, WS_DLGFRAME | EM_SETMARGINS,  EC_LEFTMARGIN | EC_RIGHTMARGIN | ES_MULTILINE | ES_WANTRETURN | ES_AUTOHSCROLL, MAKELONG(5, 5));
             SendMessage(hEdit , WM_PAINT,0,0);
    return 0;
            }


        case WM_CLOSE:
    DestroyWindow(hwnd);
    return 0;

  case WM_COMMAND:


            if(LOWORD(wParam) == IDM_OPEN)
              {
                OPENFILENAME ofn;
                CHAR szFile[MAX_PATH]={0};


                ZeroMemory(&ofn, sizeof(OPENFILENAME));


                ofn.lStructSize =sizeof(OPENFILENAME);
             ofn.hwndOwner = hwnd;
                ofn.lpstrFile = szFile;
                ofn.nMaxFile = MAX_PATH;
                ofn.lpstrFilter ="Fichier  VTK\0*.vtk\0";
                ofn.nFilterIndex = 1;
                ofn.Flags =OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;
  
                if (GetOpenFileName(&ofn)==TRUE)  


    {  
     
    UpdateWindow(hEdit);


     //Indication du fichier traité
    char message1[255];
    strcpy(message1,"Traitement du fichier : ");
    strcat(message1,szFile);
    strcat(message1," en cours... ");
    
    SendMessage(hEdit, WM_SETTEXT, 0, (long)message1);
    //SendDlgItemMessage(hwnd, IDC_COMBO1, CB_ADDSTRING, 0, (LPARAM)message1);

   UpdateWindow(hEdit);

// je ne sais pas comment paramètrer SendMessage ou SendDlgItemMessage pour conserver les messages préexistants et afficher le nouveau.
  
      //Ouverture d'un fichier temp.  
      tmpf= scatOpenTempFile();


      //Ouverture des fichiers vtk
      strcpy(ext,".vtk"); strcpy(mode,"rb");
      fp0= scatOpenFile(name,ext,mode);
      strcpy(ext,"X.vtk"); strcpy(mode,"wb+");
      fp1= scatOpenFile(name,ext,mode);
      strcpy(ext,".xls"); strcpy(mode,"wa");
      fp2= scatOpenFile(name,ext,mode);


      //Affichage de l'entete du fichier VTK
      scatHeaderVTK(fp0, fp1, &imax, &jmax, &kmax);


      //Allocation memoire dynamique
      vtkPtr= scatMemAllocVTK(imax, jmax, kmax);
      vtk= vtkPtr;




      //Lecture des echos et reorganisation des data
      scatReadFileVTK(imax,jmax,kmax,fp0,vtk);


      //Traitement des data: lissage + segmentation
      vtk= vtkPtr;
      scatMainProcessing(imax,jmax,kmax,tmpf,fp2,vtk,name);




      fclose(fp0);
      fclose(fp2);




       //fclose(fp1);
       //fclose(tmpf);
       //exit(0);




     //Indication du répertoire où sont rangés les xls, bmp et vtk
     char message2[255];
     strcpy(message2,"Les fichiers xls, bmp et vtk sont rangés dans le répertoire : ");
     strcat(message2,repertoire);




     SendMessage(hEdit, WM_SETTEXT, 0,(long)message2);
     SendDlgItemMessage(hEdit, IDC_COMBO1, CB_ADDSTRING, 0, (LPARAM)message2);


     




      //Remise du fichier vtk dans l'ordre initial
      //Lecture des data


      vtk= vtkPtr;
      rewind(tmpf);


//      for(i=0;i<imax;i++){
//     for(j=0;j<jmax;j++){
//       for(k= 0 ; k<kmax; k++) {
//     fread(&pix,sizeof(unsigned char),1,tmpf);
//     *(vtk+(k*(jmax*imax)+j*imax+i))= pix;  
//       }
//     }
//      }


      //Reecriture
//       for(k=0;k<kmax;k++)
//      for(j=0;j<jmax;j++)
//        for(i= 0; i<imax; i++, vtk++)
//      fwrite(vtk,sizeof(unsigned char),1,fp1);


      fclose(tmpf);
      fclose(fp1);


      free(vtkPtr);     
    }
   
    
 
   }
            if(LOWORD(wParam) == IDM_QUIT) PostMessage(hwnd, WM_CLOSE,0,0);            if(HIWORD(wParam) EN_CHANGE) EditNotChg FALSE;
           
   return 0;


        case WM_SIZE:
             MoveWindow(hEdit, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
             return 0;


        case WM_DESTROY:
            PostQuitMessage(0);
            return 0;


        default:
            return DefWindowProc(hwnd, uMsg, wParam, lParam);
    }
}

5 réponses

Messages postés
268
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
13 mai 2013
2
Salut je suis pas sur d'avoir compris, mais il faut que tu utilise EM_SETSEL et
EM_REPLACESEL.
Messages postés
268
Date d'inscription
vendredi 30 avril 2004
Statut
Membre
Dernière intervention
13 mai 2013
2
Pour les infos utilis tout simplement notreamis commun (google), tape les mots           lef (EM_SETSEL ....) et le premier lien sera vers msdn.

Sinon pour placer ton texte voici un exemple:

int i=GetWindowTextLength(Edit4);
SendMessage(Edit4,EM_SETSEL,i+1,i+1); // pour se placer à la fin

SendMessage(Edit4,EM_REPLACESEL,false,(LPARAM)"Ton texte");
SendMessage(Edit4,EM_REPLACESEL,false,(LPARAM)" \r\n");// pour le saut de ligne
Messages postés
18
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
11 novembre 2008

Merci ça marche!

Pour info, en ce qui concerne mon programme  EM_REPLACESEL marche mais pas EM_SETSEL.
Sais-tu où je peux trouver une aide pour toutes ces config? Je ne les trouve ni sur l'aide de MS VC++ ni sur MSDN.
J'aurais aimé que les messages s'affichent après et non avant mes messages précédents dans ma fenêtre hEdit. Sais-tu comment y remédier?
Enfin, comment fais-t-on pour passer à la ligne dans une fenêtre hEdit? J'ai essayé \n mais en vain.

Merci encore.
Noobinho
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Bonjour,

Pour ajouter dans un combobox j'utilise tout simplement :
SendMessage(hEdit,CB_ADDSTRING,0,(LPARAM)message);

Jean-François
Messages postés
18
Date d'inscription
samedi 14 juin 2008
Statut
Membre
Dernière intervention
11 novembre 2008

Merci tibo ça marche nickel!
Tu m'a encore trop aidé !

A bientôt