Boucles et boites de dialogues

cs_grems Messages postés 50 Date d'inscription mercredi 7 avril 2004 Statut Membre Dernière intervention 20 avril 2004 - 8 avril 2004 à 20:57
G0ss3Yn Messages postés 65 Date d'inscription dimanche 12 janvier 2003 Statut Membre Dernière intervention 5 novembre 2010 - 15 avril 2004 à 22:54
salut !

Mon appli est censée détecter quand des nouveaux *.hd arrivent dans un dossier . Lorsque ca arrive, une boite de dialogue s'ouvre et une musique se met en route jusqu'à ce qu'on ferme la dialogBox. mai le pb c'est que la musique ne se met pas en marche et que la détection ne marche plus (avant je fonctionnait simplement avec WIN32 )

voila mon "main" :

#include <fstream>
#include
#include <conio.h>
#include <windows.h>
#include <stdio.h>
#include <mmsystem.h>
#pragma comment (lib,"winmm.lib") //librairie => playsound
#include "resource.h"

using namespace std;

LRESULT CALLBACK MainProc(HWND Dlg,UINT mssg,WPARAM wParam,LPARAM lParam);

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
int i=0;
int new_nb=0,old_nb=0;
HANDLE hd;
WIN32_FIND_DATA w32hd;
HWND hDlg;

//détection des *.hd
while(1){
int nb=0; //sera le nombre de fichiers *.hd
char leshd[256] = "*.hd"; //tableau stockant les fichiers *.hd

//prendre le 1er fichier
hd = FindFirstFile ( leshd, &w32hd );

//si il y a un autre fichier recommencer l'operation
while (FindNextFile( hd, &w32hd)) nb++;

//si il y a des fichier avec l'extension .hd
if (hd!=INVALID_HANDLE_VALUE) new_nb = nb;

//si la nouvelle valeur de nb est différente de l'ancienne valeur (+ de .hd)
if (new_nb >> old_nb){
//mise à jour de nb
old_nb = new_nb;
hDlg=CreateDialog(hInstance,(LPCTSTR)IDD_DIALOG1,NULL,(DLGPROC)MainProc);
ShowWindow(hDlg,SW_SHOW);
MSG msg;
while(GetMessage(&msg,hDlg,0,0)==TRUE)
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
//en cas de vidage mensuel du dossier
else old_nb = new_nb; //remise à jour de la valeur de nb

Sleep(3000);
i++;
}
return 0;
}

LRESULT CALLBACK MainProc(HWND Dlg,UINT message,WPARAM wParam,LPARAM lParam)
{
int Select;
switch(message)
{
case WM_COMMAND:
Select=LOWORD(wParam);
switch(Select)
{
//lecture d'un son *.wav
PlaySound("d:\\dog.wav",GetModuleHandle(NULL), SND_FILENAME|SND_ASYNC);
//si appui sur OK, fermeture de la boite de dialogue
case IDOK:
EndDialog(Dlg,0);
PostQuitMessage(0);
return TRUE;
}
default:
return FALSE;
}
}

Si vou voyez quel pourrai être le problème , n'hésitez pas !!

Merci :)

Attention !! ne me mouillez po ! il parait ke je deviendrait méchant ...

1 réponse

G0ss3Yn Messages postés 65 Date d'inscription dimanche 12 janvier 2003 Statut Membre Dernière intervention 5 novembre 2010
15 avril 2004 à 22:54
Salut !
J'ai remodeler ton code tout d'abord, afin de le comprendre...
Et en effet il ne marche pas... :(

J'ai donc changé le code 'création de la boite de dialog' et remplacé par une MessageBox et ton PlaySound...
Ca marchait toujours pas... :(

Et puis tout d'un coup, j'ai vu que tu avais mis deux >> au niveau du test de supériorité... Et avec un seul ça marche, la MessageBox s'affiche et lorsque je click sur Ok, j'ai un Horrible Bip ! qui sort des haut parleur :D

Voilà le code modifié si tu veux tester...

if (new_nb > old_nb)
{
//mise à jour de nb
old_nb = new_nb;
// hDlg=CreateDialog(hInstance,(LPCTSTR)IDD_DIALOG1,NULL,(DLGPROC)MainProc);
// ShowWindow(hDlg,SW_SHOW);
MessageBox( NULL, "Nouveau !", "TEST", MB_OK ) ;
PlaySound("d:\\dog.wav",GetModuleHandle(NULL), SND_FILENAME|SND_ASYNC);
MSG msg;

}

Et aussi, ton PlaySound, il faut le mettre dans le
case IDOK :, sinon il est schinté par le switch( select )...
Voilà, j'espère que ton problème est résolu...
@+

G0ss3Yn... ( Bon coding a tous !)
0
Rejoignez-nous