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);
}
}