Noobinho is back!!!
Je souhaite faire une interface graphique pour un programme que j'ai fait en console et qui marchait correctement.
La seule saisie à faire est celle du fichier que je souhaite traiter. Pour cela, j'ai utilisé un bouton parcourir. Le problème est qu'après le if (GetOpenFileName(&ofn)==TRUE) ma fenêtre plante. Je n'arrive pas à savoir pourquoi. Je n'arrive pas à récupérer le nom du fichier que je souhaite traiter. Merci de m'aider.
int WINAPI WinMain(HINSTANCE hinstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
/*
HICON LoadIcon{
HINSTANCE hInstance, // handle to application instance
PCTSTR lpIconName // name string or resource identifier
};
LoadIcon.hInstance=NULL;
LoadIcon.lpIconName=IDI_WINLOGO;
*/
HWND hwnd;
MSG msg;
WNDCLASS wc;
HMENU hMenu, hSousMenu;
hinst = hinstance;
wc.style = 0 ;
wc.lpfnWndProc = MainWndProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hinstance;
wc.hIcon = NULL;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.hbrBackground = NULL;
wc.lpszMenuName = NULL;
wc.lpszClassName = "MaWinClass";;
if(!RegisterClass(&wc)) return FALSE;
hSousMenu = CreateMenu();
AppendMenu(hSousMenu, MF_STRING, IDM_OPEN, "Générer les images acoustiques à partir d'un fichier VTK");
AppendMenu(hSousMenu, MF_SEPARATOR, 0, NULL);
AppendMenu(hSousMenu, MF_STRING, IDM_QUIT, "Quitter");
hMenu = CreateMenu();
AppendMenu(hMenu,MF_POPUP,(UINT)hSousMenu,"Fichier");
hwnd = CreateWindow("MaWinClass", "SCAT Image Processing LaMIPS/NXP 2008", WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, 640, 300, NULL, hMenu, hinstance, NULL);
if (!hwnd) return FALSE;
ShowWindow(hwnd, nCmdShow);
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
return msg.wParam;
}
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
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_MULTILINE | ES_WANTRETURN | WS_VSCROLL,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, EC_LEFTMARGIN | EC_RIGHTMARGIN, MAKELONG(5, 5));
return 0;
}
case WM_CLOSE:
/*if(EditNotChg ||
MessageBox(hwnd,"Le texte a été modifié.\r\nEtes vous sûr de \vouloir fermer l'application ?"
,"Question ?",MB_YESNO | MB_ICONQUESTION ) == IDYES)*/
DestroyWindow(hwnd);
return 0;
case WM_COMMAND:
if(LOWORD(wParam) == IDM_OPEN)
{
HFONT hFont;
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)
{
i=0;
while(*(szFile+i)!='0'); // est ce la bonne syntaxe pour récupérer un chemin de fichier valide?
{
*(name+i)=*(szFile+i);
}
//Ouverture d'un fichier temp. // début de mon programme qui traite mon fichier vtk dont la seule entrée est name
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);
//
//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);
}
}