Problème d'affichage dans une fenêtre hEdit

piroman14 Messages postés 18 Date d'inscription samedi 14 juin 2008 Statut Membre Dernière intervention 11 novembre 2008 - 4 juil. 2008 à 11:55
Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 - 5 juil. 2008 à 15:56
Bonjour je suis débutant avec les winAPI.
Je n'arrive pas à afficher mon message dans la fenêtre hEdit
J'y suis arrivé par hasard en mettant un MessageBox quelconque après mon SetWindowText(hEdit,message1);
Là le message s'affichait bien dans la fenêtre principale.
Merci de m'aider.

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];
 char ext[7], mode[7];
 unsigned int i, j, k;
 unsigned int imax, jmax, kmax;
 unsigned char pix; 
 char *vtk, *vtkPtr;


 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_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, EM_SETMARGINS, WS_DLGFRAME | EC_LEFTMARGIN | EC_RIGHTMARGIN | ES_MULTILINE | ES_WANTRETURN, MAKELONG(5, 5));
             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


    {  
    //Récupération du chemin du fichier vtk sans l'extension .vtk
    i = 0;   
    while (*(szFile + i) != 0)
    {
       *(name + i) = *(szFile + i);
       ++i;
    }
    *(name + i) = 0; // terminateur par défaut
    while (i > 0)
    {
       --i;
       if (*(name + i) == '\\') break; // pas d'extension
       if (*(name + i) == '/') break; // pas d'extension
       if (*(name + i) == '.')
       {
       *(name + i) = 0; // extension supprimée
     }
    
    }
    
     //Indication du fichier traité
    char message1[255];
    strcpy(message1,"Traitement du fichier : ");
    strcat(message1,szFile);





    SetWindowText(hEdit,message1);
     
      //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 xls, bmp et vtk sont rangés dans le répertoire : ");
     strcat(message2,name);




     
     SetWindowText(hEdit,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);
    }
}

1 réponse

Pistol_Pete Messages postés 1053 Date d'inscription samedi 2 octobre 2004 Statut Membre Dernière intervention 9 juillet 2013 7
5 juil. 2008 à 15:56
Salut

Peu de temps après avoir écrit dans ton hEdit, tu bloques l'exécution de ta fonction dans WM_COMMAND puis tu fais un exit(0° ! Tu quittes le programme avant d'avoir la possibilité de l'afficher.

Il faudrait sans doute revoir la structure de ton programme. Sinon met un SendMessage( ... , WM_PAINT,0,0); juste après avoir écrit dans ton Edit.

A+
Mon site internet : http://pistol.petesampras.free.fr
0
Rejoignez-nous