begin process at 2012 05 29 13:37:25
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

plusieurs dialog [API]


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

plusieurs dialog [API]

jeudi 28 mars 2002 à 15:36:49 | plusieurs dialog [API]

Xs

voila, je faisait un prog, et pis tout d'un coup, j'ai eu envie de changer son design, qui été deja sous API WIN32.

ce design consiste a avoir une dialog "menu" et en appeler d'autres pour les fonctions :

1er pb : -comment appeler plusieurs dialog, par ex, quand on click qur le bouton "ajouter", on appel la dialog "ADD" ??

2e pb : - comment les faires communiquer entres elles ??
jeudi 28 mars 2002 à 15:53:48 | Re : plusieurs dialog [API]

Xs

j'ai oublié deux choses :
1- les dialog sont des ressources
2- le code :

#include <windows.h>
#include <fstream.h>
#include <stdlib.h>
#include <stdio.h>
#include <commctrl.h>
#include "resource.h"

FILE *agen;

char art[255];
char tit[255];
char artv[255];
char titv[255];



void file()
{


agen =fopen("liste.lst","a+");

fprintf(agen,"(%s)[%s]\n",art,tit);
fclose(agen);
MessageBox (NULL, "L'auteur et la chanson ont bien été ajouté.", "Ok !", 0 + MB_ICONASTERISK);
}

void verif()
{
int c;
c = 0;
agen =fopen("liste.lst","r");
c= fgetc(agen);

fclose(agen);
}

LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{

switch(msg)
{
case WM_CLOSE:
DestroyWindow(hDlg);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch(HIWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{/*le code un peu casse-cou....
case IDADDSONG:{
{
HINSTANCE hInstance;
int nCmdShow;
HWND hdlg;
MSG Msg;

hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_ADDSONG), NULL, (DLGPROC) DlgProc);


if(hdlg == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}

ShowWindow(hdlg, nCmdShow);
UpdateWindow(hdlg);

while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}}
break;*/
case IDCADD:
{
GetDlgItemText(hDlg,IDC_ART,art,255);
GetDlgItemText(hDlg,IDC_TIT,tit,255);
SetDlgItemText(hDlg,IDC_STATADD,"Ajout en cours...");
file();
SetDlgItemText(hDlg,IDC_STATADD,"Ajout");
}
break;
case IDC_VER:
{
GetDlgItemText(hDlg,IDC_ARTV,artv,255);
GetDlgItemText(hDlg,IDC_TITV,titv,255);
verif();
}
break;
case IDCANCEL:
DestroyWindow(hDlg);
break;
}
}
break;
default:
return FALSE;
}
return FALSE;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
HWND hdlg;
MSG Msg;

hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC) DlgProc);


if(hdlg == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}

ShowWindow(hdlg, nCmdShow);
UpdateWindow(hdlg);

while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}

-------------------------------
Réponse au message :
-------------------------------

voila, je faisait un prog, et pis tout d'un coup, j'ai eu envie de changer son design, qui été deja sous API WIN32.

ce design consiste a avoir une dialog "menu" et en appeler d'autres pour les fonctions :

1er pb : -comment appeler plusieurs dialog, par ex, quand on click qur le bouton "ajouter", on appel la dialog "ADD" ??

2e pb : - comment les faires communiquer entres elles ??
jeudi 28 mars 2002 à 20:26:04 | Re : plusieurs dialog [API]

jcecchi

>>1er pb : -comment appeler plusieurs dialog, par ex, quand on click qur le bouton "ajouter", on appel la dialog "ADD" ??

Ce qui ne va pas dans ton code c'est que tu n'as qu'une seule procedure DlgProc pour ta boite de dialogue principale.
Dans case IDADDSONG tu cree un nouvelle boite de dialogue mais avec la meme procedure. Il faut donc creer une nouvelle procedure par exemple AddSongProc(.......).
Il faut en faire de meme pour chaque boite de dialogue.
Ensuite tu fais ton
CreateDialog(,,,(DLGPROC)AddSongProc);

De plus pas besoin de creer une nouvelle boucle de message : elle existe deja dans WinMain.

2e pb : - comment les faires communiquer entres elles ??

D'abord il faut creer des messages, par exemple :

#define WM_VALIDSONG WM_USER+1

Et dans la procedure de la boite de dialogue a laquelle doit parvenir ce message tu met
case WM_VALIDSONG:
...

Pour la communication entre boite de dialogue tu fais des SendMessage avec les messages que tu as definis.

J'espere que ca pourra t'aider.

-------------------------------
Réponse au message :
-------------------------------

LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{

switch(msg)
{
case WM_CLOSE:
DestroyWindow(hDlg);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch(HIWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{/*le code un peu casse-cou....
case IDADDSONG:{
{
HINSTANCE hInstance;
int nCmdShow;
HWND hdlg;
MSG Msg;

hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_ADDSONG), NULL, (DLGPROC) DlgProc);


if(hdlg == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}

ShowWindow(hdlg, nCmdShow);
UpdateWindow(hdlg);

while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}}
break;*/
case IDCADD:
{
GetDlgItemText(hDlg,IDC_ART,art,255);
GetDlgItemText(hDlg,IDC_TIT,tit,255);
SetDlgItemText(hDlg,IDC_STATADD,"Ajout en cours...");
file();
SetDlgItemText(hDlg,IDC_STATADD,"Ajout");
}
break;
case IDC_VER:
{
GetDlgItemText(hDlg,IDC_ARTV,artv,255);
GetDlgItemText(hDlg,IDC_TITV,titv,255);
verif();
}
break;
case IDCANCEL:
DestroyWindow(hDlg);
break;
}
}
break;
default:
return FALSE;
}
return FALSE;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
HWND hdlg;
MSG Msg;

hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC) DlgProc);


if(hdlg == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}

ShowWindow(hdlg, nCmdShow);
UpdateWindow(hdlg);

while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}

-------------------------------
Réponse au message :
-------------------------------

voila, je faisait un prog, et pis tout d'un coup, j'ai eu envie de changer son design, qui été deja sous API WIN32.

ce design consiste a avoir une dialog "menu" et en appeler d'autres pour les fonctions :

1er pb : -comment appeler plusieurs dialog, par ex, quand on click qur le bouton "ajouter", on appel la dialog "ADD" ??

2e pb : - comment les faires communiquer entres elles ??

jeudi 28 mars 2002 à 20:44:06 | Re : plusieurs dialog [API]

Xs

alors voila, j'ai fait comme tu m'a dit : mais la y'a pas d'erreurs, de warnings, ou autre mais quand je click sur le bouton "ajouter une chanson", rien ne se passe.

#include <windows.h>
#include <fstream.h>
#include <stdlib.h>
#include <stdio.h>
#include <commctrl.h>
#include "resource.h"

FILE *agen;

char art[255];
char tit[255];
char artv[255];
char titv[255];



void file()
{


agen =fopen("liste.lst","a+");

fprintf(agen,"(%s)[%s]\n",art,tit);
fclose(agen);
MessageBox (NULL, "L'auteur et la chanson ont bien été ajouté.", "Ok !", 0 + MB_ICONASTERISK);
}

void verif()
{
int c;
c = 0;
agen =fopen("liste.lst","r");
c= fgetc(agen);

fclose(agen);
}

LRESULT CALLBACK AddSongProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{

switch(msg)
{
case WM_CLOSE:
DestroyWindow(hDlg);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch(HIWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{
case IDCADD:
{
GetDlgItemText(hDlg,IDC_ART,art,255);
GetDlgItemText(hDlg,IDC_TIT,tit,255);
SetDlgItemText(hDlg,IDC_STATADD,"Ajout en cours...");
file();
SetDlgItemText(hDlg,IDC_STATADD,"Ajout");
}
break;
case IDCANCEL:
DestroyWindow(hDlg);
break;
}
}
break;
default:
return FALSE;
}
return FALSE;
}

LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{

switch(msg)
{
case WM_CLOSE:
DestroyWindow(hDlg);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch(HIWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{
case IDADDSONG:
hDlg = CreateDialog(NULL,MAKEINTRESOURCE(IDD_ADDSONG), NULL, (DLGPROC) AddSongProc);
if(hDlg == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
break;
case IDCADD:
{
GetDlgItemText(hDlg,IDC_ART,art,255);
GetDlgItemText(hDlg,IDC_TIT,tit,255);
SetDlgItemText(hDlg,IDC_STATADD,"Ajout en cours...");
file();
SetDlgItemText(hDlg,IDC_STATADD,"Ajout");
}
break;
case IDC_VER:
{
GetDlgItemText(hDlg,IDC_ARTV,artv,255);
GetDlgItemText(hDlg,IDC_TITV,titv,255);
verif();
}
break;
case IDCANCEL:
DestroyWindow(hDlg);
break;
}
}
break;
default:
return FALSE;
}
return FALSE;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
HWND hdlg;
MSG Msg;

hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC) DlgProc);


if(hdlg == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}

ShowWindow(hdlg, nCmdShow);
UpdateWindow(hdlg);

while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}

et comme tu vois, a l'endroit ou la dialog devrait se creer/afficher, rien ne se passe, mais en plus, etonnant, la creation de la fenetre n'echoue meme pas et la fonction est bien lu !! (donc devrait avoir été executé)....

c'est a rien n'y comprendre !

-------------------------------
Réponse au message :
-------------------------------

>>1er pb : -comment appeler plusieurs dialog, par ex, quand on click qur le bouton "ajouter", on appel la dialog "ADD" ??

Ce qui ne va pas dans ton code c'est que tu n'as qu'une seule procedure DlgProc pour ta boite de dialogue principale.
Dans case IDADDSONG tu cree un nouvelle boite de dialogue mais avec la meme procedure. Il faut donc creer une nouvelle procedure par exemple AddSongProc(.......).
Il faut en faire de meme pour chaque boite de dialogue.
Ensuite tu fais ton
CreateDialog(,,,(DLGPROC)AddSongProc);

De plus pas besoin de creer une nouvelle boucle de message : elle existe deja dans WinMain.

2e pb : - comment les faires communiquer entres elles ??

D'abord il faut creer des messages, par exemple :

#define WM_VALIDSONG WM_USER+1

Et dans la procedure de la boite de dialogue a laquelle doit parvenir ce message tu met
case WM_VALIDSONG:
...

Pour la communication entre boite de dialogue tu fais des SendMessage avec les messages que tu as definis.

J'espere que ca pourra t'aider.

-------------------------------
Réponse au message :
-------------------------------

LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{

switch(msg)
{
case WM_CLOSE:
DestroyWindow(hDlg);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch(HIWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{/*le code un peu casse-cou....
case IDADDSONG:{
{
HINSTANCE hInstance;
int nCmdShow;
HWND hdlg;
MSG Msg;

hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_ADDSONG), NULL, (DLGPROC) DlgProc);


if(hdlg == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}

ShowWindow(hdlg, nCmdShow);
UpdateWindow(hdlg);

while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}}
break;*/
case IDCADD:
{
GetDlgItemText(hDlg,IDC_ART,art,255);
GetDlgItemText(hDlg,IDC_TIT,tit,255);
SetDlgItemText(hDlg,IDC_STATADD,"Ajout en cours...");
file();
SetDlgItemText(hDlg,IDC_STATADD,"Ajout");
}
break;
case IDC_VER:
{
GetDlgItemText(hDlg,IDC_ARTV,artv,255);
GetDlgItemText(hDlg,IDC_TITV,titv,255);
verif();
}
break;
case IDCANCEL:
DestroyWindow(hDlg);
break;
}
}
break;
default:
return FALSE;
}
return FALSE;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
HWND hdlg;
MSG Msg;

hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC) DlgProc);


if(hdlg == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}

ShowWindow(hdlg, nCmdShow);
UpdateWindow(hdlg);

while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}

-------------------------------
Réponse au message :
-------------------------------

voila, je faisait un prog, et pis tout d'un coup, j'ai eu envie de changer son design, qui été deja sous API WIN32.

ce design consiste a avoir une dialog "menu" et en appeler d'autres pour les fonctions :

1er pb : -comment appeler plusieurs dialog, par ex, quand on click qur le bouton "ajouter", on appel la dialog "ADD" ??

2e pb : - comment les faires communiquer entres elles ??


vendredi 29 mars 2002 à 12:24:13 | Re : plusieurs dialog [API]

jcecchi

Ok, tu as bien enlever la deuxieme boucle de message, mais il faut quand meme laisser le ShowWindow et le UpdateWindow pour l'affichage de la boite de dialogue.

-------------------------------
Réponse au message :
-------------------------------

alors voila, j'ai fait comme tu m'a dit : mais la y'a pas d'erreurs, de warnings, ou autre mais quand je click sur le bouton "ajouter une chanson", rien ne se passe.

#include <windows.h>
#include <fstream.h>
#include <stdlib.h>
#include <stdio.h>
#include <commctrl.h>
#include "resource.h"

FILE *agen;

char art[255];
char tit[255];
char artv[255];
char titv[255];



void file()
{


agen =fopen("liste.lst","a+");

fprintf(agen,"(%s)[%s]\n",art,tit);
fclose(agen);
MessageBox (NULL, "L'auteur et la chanson ont bien été ajouté.", "Ok !", 0 + MB_ICONASTERISK);
}

void verif()
{
int c;
c = 0;
agen =fopen("liste.lst","r");
c= fgetc(agen);

fclose(agen);
}

LRESULT CALLBACK AddSongProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{

switch(msg)
{
case WM_CLOSE:
DestroyWindow(hDlg);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch(HIWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{
case IDCADD:
{
GetDlgItemText(hDlg,IDC_ART,art,255);
GetDlgItemText(hDlg,IDC_TIT,tit,255);
SetDlgItemText(hDlg,IDC_STATADD,"Ajout en cours...");
file();
SetDlgItemText(hDlg,IDC_STATADD,"Ajout");
}
break;
case IDCANCEL:
DestroyWindow(hDlg);
break;
}
}
break;
default:
return FALSE;
}
return FALSE;
}

LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{

switch(msg)
{
case WM_CLOSE:
DestroyWindow(hDlg);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch(HIWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{
case IDADDSONG:
hDlg = CreateDialog(NULL,MAKEINTRESOURCE(IDD_ADDSONG), NULL, (DLGPROC) AddSongProc);
if(hDlg == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
break;
case IDCADD:
{
GetDlgItemText(hDlg,IDC_ART,art,255);
GetDlgItemText(hDlg,IDC_TIT,tit,255);
SetDlgItemText(hDlg,IDC_STATADD,"Ajout en cours...");
file();
SetDlgItemText(hDlg,IDC_STATADD,"Ajout");
}
break;
case IDC_VER:
{
GetDlgItemText(hDlg,IDC_ARTV,artv,255);
GetDlgItemText(hDlg,IDC_TITV,titv,255);
verif();
}
break;
case IDCANCEL:
DestroyWindow(hDlg);
break;
}
}
break;
default:
return FALSE;
}
return FALSE;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
HWND hdlg;
MSG Msg;

hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC) DlgProc);


if(hdlg == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}

ShowWindow(hdlg, nCmdShow);
UpdateWindow(hdlg);

while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}

et comme tu vois, a l'endroit ou la dialog devrait se creer/afficher, rien ne se passe, mais en plus, etonnant, la creation de la fenetre n'echoue meme pas et la fonction est bien lu !! (donc devrait avoir été executé)....

c'est a rien n'y comprendre !
vendredi 29 mars 2002 à 18:39:25 | fermeture unik

Xs

voila, ca marche !

mais toujours un pb :
quand je demande de fermer la seconde boite de dialog, c'est une fermeture globale : tu le programme ce termine alors que moi, je veux juste fermer la seconde boite

kesako ?

-------------------------------
Réponse au message :
-------------------------------

Ok, tu as bien enlever la deuxieme boucle de message, mais il faut quand meme laisser le ShowWindow et le UpdateWindow pour l'affichage de la boite de dialogue.

-------------------------------
Réponse au message :
-------------------------------

alors voila, j'ai fait comme tu m'a dit : mais la y'a pas d'erreurs, de warnings, ou autre mais quand je click sur le bouton "ajouter une chanson", rien ne se passe.

#include <windows.h>
#include <fstream.h>
#include <stdlib.h>
#include <stdio.h>
#include <commctrl.h>
#include "resource.h"

FILE *agen;

char art[255];
char tit[255];
char artv[255];
char titv[255];



void file()
{


agen =fopen("liste.lst","a+");

fprintf(agen,"(%s)[%s]\n",art,tit);
fclose(agen);
MessageBox (NULL, "L'auteur et la chanson ont bien été ajouté.", "Ok !", 0 + MB_ICONASTERISK);
}

void verif()
{
int c;
c = 0;
agen =fopen("liste.lst","r");
c= fgetc(agen);

fclose(agen);
}

LRESULT CALLBACK AddSongProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{

switch(msg)
{
case WM_CLOSE:
DestroyWindow(hDlg);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch(HIWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{
case IDCADD:
{
GetDlgItemText(hDlg,IDC_ART,art,255);
GetDlgItemText(hDlg,IDC_TIT,tit,255);
SetDlgItemText(hDlg,IDC_STATADD,"Ajout en cours...");
file();
SetDlgItemText(hDlg,IDC_STATADD,"Ajout");
}
break;
case IDCANCEL:
DestroyWindow(hDlg);
break;
}
}
break;
default:
return FALSE;
}
return FALSE;
}

LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{

switch(msg)
{
case WM_CLOSE:
DestroyWindow(hDlg);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch(HIWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{
case IDADDSONG:
hDlg = CreateDialog(NULL,MAKEINTRESOURCE(IDD_ADDSONG), NULL, (DLGPROC) AddSongProc);
if(hDlg == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
break;
case IDCADD:
{
GetDlgItemText(hDlg,IDC_ART,art,255);
GetDlgItemText(hDlg,IDC_TIT,tit,255);
SetDlgItemText(hDlg,IDC_STATADD,"Ajout en cours...");
file();
SetDlgItemText(hDlg,IDC_STATADD,"Ajout");
}
break;
case IDC_VER:
{
GetDlgItemText(hDlg,IDC_ARTV,artv,255);
GetDlgItemText(hDlg,IDC_TITV,titv,255);
verif();
}
break;
case IDCANCEL:
DestroyWindow(hDlg);
break;
}
}
break;
default:
return FALSE;
}
return FALSE;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
HWND hdlg;
MSG Msg;

hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC) DlgProc);


if(hdlg == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}

ShowWindow(hdlg, nCmdShow);
UpdateWindow(hdlg);

while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}

et comme tu vois, a l'endroit ou la dialog devrait se creer/afficher, rien ne se passe, mais en plus, etonnant, la creation de la fenetre n'echoue meme pas et la fonction est bien lu !! (donc devrait avoir été executé)....

c'est a rien n'y comprendre !

vendredi 29 mars 2002 à 20:00:52 | Re : fermeture unik

jcecchi

Dans AddSongProc->WM_DESTROY ne fais pas PostQuitMessage(0) mais EndDialog(hDlg)

PostQuitMessage te fais sortir de ta boucle de message et quitter l'application.



-------------------------------
Réponse au message :
-------------------------------

voila, ca marche !

mais toujours un pb :
quand je demande de fermer la seconde boite de dialog, c'est une fermeture globale : tu le programme ce termine alors que moi, je veux juste fermer la seconde boite

kesako ?

-------------------------------
Réponse au message :
-------------------------------

Ok, tu as bien enlever la deuxieme boucle de message, mais il faut quand meme laisser le ShowWindow et le UpdateWindow pour l'affichage de la boite de dialogue.

-------------------------------
Réponse au message :
-------------------------------

alors voila, j'ai fait comme tu m'a dit : mais la y'a pas d'erreurs, de warnings, ou autre mais quand je click sur le bouton "ajouter une chanson", rien ne se passe.

#include <windows.h>
#include <fstream.h>
#include <stdlib.h>
#include <stdio.h>
#include <commctrl.h>
#include "resource.h"

FILE *agen;

char art[255];
char tit[255];
char artv[255];
char titv[255];



void file()
{


agen =fopen("liste.lst","a+");

fprintf(agen,"(%s)[%s]\n",art,tit);
fclose(agen);
MessageBox (NULL, "L'auteur et la chanson ont bien été ajouté.", "Ok !", 0 + MB_ICONASTERISK);
}

void verif()
{
int c;
c = 0;
agen =fopen("liste.lst","r");
c= fgetc(agen);

fclose(agen);
}

LRESULT CALLBACK AddSongProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{

switch(msg)
{
case WM_CLOSE:
DestroyWindow(hDlg);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch(HIWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{
case IDCADD:
{
GetDlgItemText(hDlg,IDC_ART,art,255);
GetDlgItemText(hDlg,IDC_TIT,tit,255);
SetDlgItemText(hDlg,IDC_STATADD,"Ajout en cours...");
file();
SetDlgItemText(hDlg,IDC_STATADD,"Ajout");
}
break;
case IDCANCEL:
DestroyWindow(hDlg);
break;
}
}
break;
default:
return FALSE;
}
return FALSE;
}

LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{

switch(msg)
{
case WM_CLOSE:
DestroyWindow(hDlg);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch(HIWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{
case IDADDSONG:
hDlg = CreateDialog(NULL,MAKEINTRESOURCE(IDD_ADDSONG), NULL, (DLGPROC) AddSongProc);
if(hDlg == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
break;
case IDCADD:
{
GetDlgItemText(hDlg,IDC_ART,art,255);
GetDlgItemText(hDlg,IDC_TIT,tit,255);
SetDlgItemText(hDlg,IDC_STATADD,"Ajout en cours...");
file();
SetDlgItemText(hDlg,IDC_STATADD,"Ajout");
}
break;
case IDC_VER:
{
GetDlgItemText(hDlg,IDC_ARTV,artv,255);
GetDlgItemText(hDlg,IDC_TITV,titv,255);
verif();
}
break;
case IDCANCEL:
DestroyWindow(hDlg);
break;
}
}
break;
default:
return FALSE;
}
return FALSE;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
HWND hdlg;
MSG Msg;

hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC) DlgProc);


if(hdlg == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}

ShowWindow(hdlg, nCmdShow);
UpdateWindow(hdlg);

while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}

et comme tu vois, a l'endroit ou la dialog devrait se creer/afficher, rien ne se passe, mais en plus, etonnant, la creation de la fenetre n'echoue meme pas et la fonction est bien lu !! (donc devrait avoir été executé)....

c'est a rien n'y comprendre !


vendredi 29 mars 2002 à 21:44:15 | Merci !

Xs

Un grand merci !

-------------------------------
Réponse au message :
-------------------------------

Dans AddSongProc->WM_DESTROY ne fais pas PostQuitMessage(0) mais EndDialog(hDlg)

PostQuitMessage te fais sortir de ta boucle de message et quitter l'application.



-------------------------------
Réponse au message :
-------------------------------

voila, ca marche !

mais toujours un pb :
quand je demande de fermer la seconde boite de dialog, c'est une fermeture globale : tu le programme ce termine alors que moi, je veux juste fermer la seconde boite

kesako ?

-------------------------------
Réponse au message :
-------------------------------

Ok, tu as bien enlever la deuxieme boucle de message, mais il faut quand meme laisser le ShowWindow et le UpdateWindow pour l'affichage de la boite de dialogue.

-------------------------------
Réponse au message :
-------------------------------

alors voila, j'ai fait comme tu m'a dit : mais la y'a pas d'erreurs, de warnings, ou autre mais quand je click sur le bouton "ajouter une chanson", rien ne se passe.

#include <windows.h>
#include <fstream.h>
#include <stdlib.h>
#include <stdio.h>
#include <commctrl.h>
#include "resource.h"

FILE *agen;

char art[255];
char tit[255];
char artv[255];
char titv[255];



void file()
{


agen =fopen("liste.lst","a+");

fprintf(agen,"(%s)[%s]\n",art,tit);
fclose(agen);
MessageBox (NULL, "L'auteur et la chanson ont bien été ajouté.", "Ok !", 0 + MB_ICONASTERISK);
}

void verif()
{
int c;
c = 0;
agen =fopen("liste.lst","r");
c= fgetc(agen);

fclose(agen);
}

LRESULT CALLBACK AddSongProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{

switch(msg)
{
case WM_CLOSE:
DestroyWindow(hDlg);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch(HIWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{
case IDCADD:
{
GetDlgItemText(hDlg,IDC_ART,art,255);
GetDlgItemText(hDlg,IDC_TIT,tit,255);
SetDlgItemText(hDlg,IDC_STATADD,"Ajout en cours...");
file();
SetDlgItemText(hDlg,IDC_STATADD,"Ajout");
}
break;
case IDCANCEL:
DestroyWindow(hDlg);
break;
}
}
break;
default:
return FALSE;
}
return FALSE;
}

LRESULT CALLBACK DlgProc(HWND hDlg, UINT msg, WPARAM wParam, LPARAM lParam)
{

switch(msg)
{
case WM_CLOSE:
DestroyWindow(hDlg);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_COMMAND:
switch(HIWORD(wParam))
{
case BN_CLICKED:
switch(LOWORD(wParam))
{
case IDADDSONG:
hDlg = CreateDialog(NULL,MAKEINTRESOURCE(IDD_ADDSONG), NULL, (DLGPROC) AddSongProc);
if(hDlg == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}
break;
case IDCADD:
{
GetDlgItemText(hDlg,IDC_ART,art,255);
GetDlgItemText(hDlg,IDC_TIT,tit,255);
SetDlgItemText(hDlg,IDC_STATADD,"Ajout en cours...");
file();
SetDlgItemText(hDlg,IDC_STATADD,"Ajout");
}
break;
case IDC_VER:
{
GetDlgItemText(hDlg,IDC_ARTV,artv,255);
GetDlgItemText(hDlg,IDC_TITV,titv,255);
verif();
}
break;
case IDCANCEL:
DestroyWindow(hDlg);
break;
}
}
break;
default:
return FALSE;
}
return FALSE;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow)
{
HWND hdlg;
MSG Msg;

hdlg = CreateDialog(hInstance,MAKEINTRESOURCE(IDD_DIALOG1), NULL, (DLGPROC) DlgProc);


if(hdlg == NULL)
{
MessageBox(NULL, "Window Creation Failed!", "Error!",
MB_ICONEXCLAMATION | MB_OK);
return 0;
}

ShowWindow(hdlg, nCmdShow);
UpdateWindow(hdlg);

while(GetMessage(&Msg, NULL, 0, 0) > 0)
{
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
return Msg.wParam;
}

et comme tu vois, a l'endroit ou la dialog devrait se creer/afficher, rien ne se passe, mais en plus, etonnant, la creation de la fenetre n'echoue meme pas et la fonction est bien lu !! (donc devrait avoir été executé)....

c'est a rien n'y comprendre !





Cette discussion est classée dans : pb, design, dialog, api, appeler


Répondre à ce message

Sujets en rapport avec ce message

Pb Dialog et icone barre des titre [ par Viper31 ] salut je voulais connaitre le moyen le plus simple pour mettre un icone dans la barre des titres d'une boite de dialog ! J'ai deja regardé dans le man API Mysql pb connexion seveur distant [ par GUybrush113 ] Salut les gens !Voila j'ai suivi un tuto plutot complet du net, sur l'utilisation de l'API Mysql, et en fait il n'arrive que a se connecter sur un ser Pb avec l'affichage dans un dialog [ par marcel6566 ] VC++6 - MFCJ'ai créé une boite à dialogue lié à la class CIMAGE et je voudrais afficher l'image IDB_BITMAP1 dedans.J'ai défini CBitmap image;J'ai rajo pb de rafraichissement dialog fenetre ronde [ par gege1024 ] voila, j'ai fais une appli en mfc avec des fenetres rondes (traitement des messages : on create, onpaint, onmousemove,...)mais j'ai un pb de rafraichi pb affichage dialog box en mode release [ par naoem ] bonjour,je m'explique: j'ai fait un programme avec un menu qui ouvre des dialogbox (jusqu'ici tout va bien)...en mode debug, il n'y a pas de pb, les f Pb avec VC [ par kokoariko ] Lus',1/Sous Visual C++, j'ai créé différents contrôles (CListBox, CProgressBar, CStatic ...) sur une fenêtre Dialog, grace à MFC ClassWizard.Tout se p API creation dialog !! [ par SnOOpss ] Bonjour j'ai quelques problemes avec les api de windows 1 - kan je crée une scrollbar jarrive a en faire ce que je veux avec WM_CTLCOLORSCROLLBAR et Pb utilisation api mysql ds prog C [ par dam1234 ] G un probleme, je n'arrive pas a utiliser la librairie mysql (mysql.lib) ds un programme ecrit avec CppBuilder 5. Je ne sais pas quelles sont les etap probleme dll [ par spyanakine ] salut j ai un pb avec une dll que j ai créé en fait dans cette dll j ai une boite de dialog avec un controle chart (mschrt20.ocx) lorsque j apelle cet pb dialog bar et dessin [ par obby ] Bonjour dsl de encore posté un msg mais j'ai un gros problème. En fait, je dessine ma dialogbar avec la couleur que je veu, les controles transparent


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,593 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales