OPENFILENAME

deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 - 29 déc. 2005 à 14:26
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 - 29 déc. 2005 à 19:47
Bonjour a tous :D





Voila j'ai dans ma fonction de vérification des messages ceci :



if(LOWORD(wParam) == OPEN){


ZeroMemory(&OpenFile,sizeof(OPENFILENAME));





OpenFile.lStructSize=sizeof(OPENFILENAME);


OpenFile.hwndOwner=hWnd;


OpenFile.lpstrFile=D_szFileName;


OpenFile.nMaxFile=MAX_PATH;


OpenFile.lpstrFilter="Fichier source C\0*.c\0Fichier source
CPP\0*.cpp\0Texte (*.txt)\0*.txt\0";


OpenFile.nFilterIndex = 1;


OpenFile.Flags= OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST |
OFN_HIDEREADONLY;





GetOpenFileName(&OpenFile);


if(D_bResult==TRUE){ //Si on a ouvert un fichier.


HANDLE hFile; //On crée un handle de fichier;


DWORD D_dwFileSize,D_dwNbrCarRead;


CHAR *D_szTextFile;





hFile =
CreateFile(D_szFileName,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);


D_dwFileSize = GetFileSize(hFile,NULL);


D_szTextFile=(PCHAR)LocalAlloc(LMEM_FIXED,D_dwFileSize+1);


ReadFile(hFile,D_szTextFile,D_dwFileSize,&D_dwNbrCarRead,NULL);


*(D_szTextFile+D_dwFileSize)=0;


SendMessage(hEdit,WM_SETTEXT,0,(LPARAM)D_szTextFile);


LocalFree(D_szTextFile);


CloseHandle(hFile);


}

}

En clair lorsque je clique sur "ouvrire..." dans mon menu cela éxécute
ces instructions. Cela devrait ouvrire une boit de dialogue ( ça
fonctionne) et je doit pouvoir choisir dans les fichiers filtré (ça
fonctionne) et lorsque je clic sur ouvrire, cela devrait m'afficher le
texte contenu dans fichier dans mon controle ici hEdit (ça fonctionne
pas). J'ai cherché dans tous les sens et je trouve pas la réponse.



Avez vous une idée?



Et j'ai une deuxième question. Lorsque j'ai deux contro de type button
et que j'intercèpte l'évènement MN_CLICKED les instructions sont
éxécuté par tous les controle clicable (logique). Comment je fait pour
les identifier? exemple :



J'ai l'évènement WM_CREATE :



Button1 = CreateWindow("button","&OK", WS_CHILD | WS_VISIBLE,200,280,30,30,hWnd,NULL,Jhinst,NULL);

Button2 = CreateWindow("button","&CANCEL",WS_CHILD | WS_VISIBLE,140,280,60,30,hWnd,NULL,Jhinst,NULL);



et dans le switch des message :



if(LOWORD(wParam) == BN_CLICKED){


MessageBox(hWnd,"OK","BUTTON1 CLICKED",MB_OK | MB_ICONWARNING);


}

if(LOWORD(wParam) == BN_CLICKED){


MessageBox(hWnd,"OK","BUTTON2 CLICKED",MB_OK | MB_ICONWARNING);

}



Comment différentier les deux? Pour que la 1er messagebox s'éxécute lorsque l'ont clic sur button1 et la deuxième sur button2.





Merci d'avance.



PS: je code sous dev-cpp.

39 réponses

deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
29 déc. 2005 à 16:47
Bon je doit sans doute être un abruti mais chez moi quand je fait un if (LOWORD(wParam)==11 ca ne marche quand mm pas.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
29 déc. 2005 à 16:52
En tous cas la technique pour mettre l'ID direct avec CreateWindow marche bien (j'ai vérifié quand même)
Dois-je en conclure quelque chose?
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
29 déc. 2005 à 17:23
Loooooooool non vecchio excuse moi, je disait ca uniquement pour moi, n'en conclu rien.

Ben moi ca marche pas. tu veut la déclaration et le if?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
29 déc. 2005 à 17:27
Non merci, tu en as plus besoin que moi:

case WM_COMMAND:
if(HIWORD(wParam) == BN_CLICKED)
{
MessageBox(hWnd, "BN_CLICKED", "BN_CLICKED", 0);
switch(LOWORD(wParam))
{
case 11:
MessageBox(hWnd,"OK","BUTTON1 CLICKED",MB_OK | MB_ICONWARNING);
break;
case 12:
MessageBox(hWnd,"OK","BUTTON2 CLICKED",MB_OK | MB_ICONWARNING);
break;
...
}
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
29 déc. 2005 à 17:29
Voici un petit bout de code qui fonctionne



<HR>



#define IDB1 0x100
#define IDB2 0x101

LRESULT CALLBACK WindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{


switch (msg)
{
case WM_CREATE:
CreateWindow("button", "&OK", WS_CHILD | WS_VISIBLE, 200, 280, 30, 30, hwnd, (HMENU) IDB1, hInst, NULL);
CreateWindow("button", "&CANCEL", WS_CHILD | WS_VISIBLE, 140, 280, 60, 30, hwnd, (HMENU) IDB2, hInst, NULL);
ShowWindow(hwnd, SW_SHOW);
SetForegroundWindow(hwnd);
return 0;


case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDB1:
MessageBox(NULL, "Bouton 1", "Bouton cliqué", MB_OK);
break;
case IDB2:
MessageBox(NULL, "Bouton 2", "Bouton cliqué", MB_OK);
break;
default:
break;
}
return 0;


//Fermeture de la fenetre
case WM_CLOSE:
DestroyWindow(hwnd);
return 0;


//Destruvtion de la fenetre
case WM_DESTROY:
PostQuitMessage(0);
return 0;


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


<HR>
Ca te cree les deux boutons et quand tu cliques dessus, ben tu as tes deux messageBox qui apparaissent

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
29 déc. 2005 à 17:42
Merci. Mais je vien de trouver l'erreur



Merci beaucoup a vous deux en tous cas.
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
29 déc. 2005 à 17:44
On peut savoir ce que c'était?
Juste pour info histoire de pas faire l'erreur et de savoir ou on peut se tromper

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
29 déc. 2005 à 18:02
Hum non je n'ose le dire, c'est totalement stupide. Disons que le if
etait bon mais en faite tantot quand j'ai vu que ca ne marche pas j'ai
remis (HMENU)11 à NULL. et donc forcément quand j'ai re testé ben cela
n'allait plus. Non me frappéééééééééééé passsssssssssssssss lol.



Par contre pour ma première question, je trouve pas CreateFile et ReadFile ne renvoient pas d'erreur.
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
29 déc. 2005 à 18:06
Déjà LocalAlloc c'est mal (pluto HeapAlloc)
Tu es bien sur de bien passer par le code CreateFile? (je me méfie...)
Et attention, le code d'erreur de CreateFile est INVALID_HANDLE_VALUE, pas FALSE
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
29 déc. 2005 à 18:09
Etant donné que j'aime bien le debug
Je te dirais de regarder si apres ta fenetre d'ouverture tu recuperes bien un chemin vers un fichier valide
Affiche le dans un messageBox.
Si c'est pas ca, on rentrera dans les détails.

Pas grave pour l'erreur, ca arrive a tout le monde

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
29 déc. 2005 à 18:33
savon :j'ai afficher dans un msgbox le chemin récup et cela est bon.



Vecchio oui je passe pas CreateFile et oui je sais que c'est INVALID_HANDLE_VALUE
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
29 déc. 2005 à 19:04
Tu as vérifié que le handle renvoyé par CreateFile était bon?
Ragarde la taille que te renvoies GetFileSize par exemple, peut etre ca donneras une idée du pourquoi.


Tu peux aussi regarder ce que contient D_szTextFile apres le ReadFile.
En bref, essaie d'isoler la ligne ou il y a un probleme.

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
29 déc. 2005 à 19:08
Vecchio, oublier de te demander: Pourquoi LocalAlloc c'et mal?

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
0
julienbj Messages postés 452 Date d'inscription jeudi 4 décembre 2003 Statut Membre Dernière intervention 19 décembre 2008 15
29 déc. 2005 à 19:18
Va voir cette source
http://www.cppfrance.com/code.aspx?ID=31062
Dans le fichier open.cpp (l'extension est mal choisie, c'est du C), tu trouveras ce que tu souhaites faires, à la seule différence que j'utilisais un richedit.
Normalement, devrait fonctionner.

C'est la fonction Load qui devrait te renseigner.

Vive le C
Tchao
[mailto:julienbj@hotmail.com Savon]
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
29 déc. 2005 à 19:20
Le text reçus dans D_szTextFile est bien celui contenut dans le fichier. Donc la problème doit être le SendMessage.
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
29 déc. 2005 à 19:21
hahaaaaaaaaaaaaaaaaaaaaaaaa j'ai trouvé hEdit n'est pas non plus déclré
en static, je vient de le faire et cela fonctionne maintenant.
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
29 déc. 2005 à 19:25
une 3ième question. En faite je débute en win32. Comment on fait pour
récupéré le text d'un textbox pour le mettre dans une variable?
0
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
29 déc. 2005 à 19:37
julienbj>
Pour le LocalAlloc:
"The local functions are slower than other memory management functions and do not provide as many features. Therefore, new applications should use the heap functions"
Donc tu dois plutot utiliser HeapAlloc

deck_bsd> GetWindowText pour récupérer le texte d'une fenêtre
0
deck_bsd Messages postés 1243 Date d'inscription jeudi 31 mars 2005 Statut Membre Dernière intervention 3 août 2016 2
29 déc. 2005 à 19:47
Merci vecchio.Ca marche bien :p



Merci encore a vous deux :D vous êtes des chefs.
0
Rejoignez-nous