DialogBox

sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 - 8 mai 2003 à 19:16
sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 - 10 mai 2003 à 13:37
Bonjour,

je voudrai affiché un dialogue de façon modale, avec DialogBox. Comment on fé pour récupérer la handle du dialogue créer pour ensuite, utiliser SetDlgItemText.

Merci de me répondre

Ou sinon, comment rendre une fenetre modale avec CreateDialog, ca éviterai d'utiliser DialogBox.

Merci de votre réponse.

Bye

\* -- Seb [[mailto:sebastienbro@aol.com Mail]] [Web] -- */

13 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 mai 2003 à 20:08
le handle t'est passe en 1er param de chaque message dans ta DlgProc. Regarde les sources publiees, il y en a de nombreux exemples.
BruNews, ciao...
0
sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 2
8 mai 2003 à 20:16
C'est bien ca le problème, il me le faudrai juste apre l'apele de la fonction, pq le texte a mettre dans les static est contenu dasn des variables (c'est une dll) donc il me faudrai le handle juste apre la fonction.

\* -- Seb [[mailto:sebastienbro@aol.com Mail]] [Web] -- */
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 mai 2003 à 20:22
Faudrait cette partie du prob en detail.
Quoi dans la dll, la DlgProc ou les chaines ??? etc...
On trouve une solution a tout.
BruNews, ciao...
0
sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 2
9 mai 2003 à 18:42
En fait, g tout dans la dll. on apele une fonction, avec comme argumen le texte à affiché dans le le dialog. puis la fonction fait le reste (créé le dialog, change le texte)

ca donne ca :

BOOL __stdcall DialogProc(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
{

RECT rc;
unsigned long Ret;

switch(Msg) {

case 0x0110:

GetWindowRect(hWnd, &rc);

SetWindowPos(hWnd, HWND_TOP, (GetSystemMetrics(SM_CXSCREEN) - (rc.right - rc.left)) / 2, (GetSystemMetrics(SM_CYSCREEN) - (rc.bottom - rc.top)) / 2, 0, 0, SWP_NOSIZE);

return 1; // Initialisation du dialogue

break;

case 0x0138:

Ret = SetTextColor((HDC) wParam, RGB(0, 255, 0));
return Ret;
break;

case 0x0111: //Message de commande

if (HIWORD(wParam) == 0) { //Si l'utilisateur à cliquer sur un bouton


EndDialog(hWnd, TRUE); //On quitte
return FALSE;

} else return FALSE;

break;

default: return FALSE;

break;

}

}

BOOL __stdcall AboutBox(lAboutBox Opt)
{

HWND lHandle;
HWND lHandleImg;

lHandle = CreateDialog(hInstance, MAKEINTRESOURCE(101), 0, DialogProc);

if (lHandle == NULL) return FALSE;


lHandleImg = GetDlgItem(lHandle, 11);

if (lHandleImg == NULL) return FALSE;

SendMessage(lHandleImg, STM_SETIMAGE, IMAGE_ICON, (long) Opt.Icone);

char *title;

title = (char *)malloc(12 + strlen(Opt.Titre) + 1);

title = strcpy(title, "A propos de ");

title = strcat(title, Opt.Titre);

if (! SetWindowText(lHandle, title)) return FALSE;

lHandleImg = GetDlgItem(lHandle, 10);

if (! SetWindowText(lHandleImg, Opt.App)) return FALSE;

if (! SetDlgItemText(lHandle, 13, Opt.Version)) return FALSE;

if (! SetDlgItemText(lHandle, 14, Opt.Description)) return FALSE;

if (! SetDlgItemText(lHandle, 16, Opt.CopyRight)) return FALSE;

if (! SetDlgItemText(lHandle, 17, Opt.Btn)) return FALSE;

if (ShowWindow(lHandle, SW_SHOW)) return FALSE;


if (! UpdateWindow(lHandle)) return FALSE;

if (! SetFocus(lHandle)) return FALSE;

return TRUE;

}

et je voudrai remplacer CreateDialog par DialogBox, pour que la fenetre soit modal.

\* -- Seb [[mailto:sebastienbro@aol.com Mail]] [Web] -- */
0

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

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 mai 2003 à 19:08
Je pense avoir saisi, tu me diras si NON, ok ?
Tu veux afficher juste une AboutBox, avec texte adaptable comme ce qui suit appel de CreateDialog();
Si cela:
BOOL CALLBACK AboutDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{
switch(mssg) {
case WM_INITDIALOG:
// ICI tu mets le code de ta func AboutBox
return 1;
case WM_COMMAND:
if(wParam == IDCANCEL) EndDialog(hdlg, 0);
}
return 0;
}

Suppression de la fonction AboutBox puisque son code va dans l'event d'initialisation de la boite.
A sa place tu appelles:
DialogBox(hInstance, (LPCTSTR) 101, 0, AboutDlgProc);
Generalement en 3eme param faudrait le handle de la fenetre sur laquelle devient modale.

BruNews, ciao...
0
sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 2
9 mai 2003 à 19:11
Ui, c ca ! mé si je fait comme tu di, comme je ferai pour savoir les valeur affecté au variable ?

\* -- Seb [[mailto:sebastienbro@aol.com Mail]] [Web] -- */
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 mai 2003 à 19:24
Et comment tu fais pour le savoir dans ta func originale ?
Variables ne sont pas accessibles ???
Si NON, indique et je te donne le moyen.
BruNews, ciao...
0
sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 2
9 mai 2003 à 19:27
Les variables sont en arguments (g fait une struc lAboutBox avec lé info dedan). Donc je voi po comment lé récupérer.

\* -- Seb [[mailto:sebastienbro@aol.com Mail]] [Web] -- */
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 mai 2003 à 19:50
Tu as deja fait une struct pour passer les args, impec.
Donc tu remplaces par:
DialogBoxParam(hInstance, (LPCTSTR) 101, 0, AboutDlgProc, (long) &strucparams);
tu recuperes le ptr sur ta struct dans lparam dans event WM_INITDIALOG. Te suffira de mettre un cast quand tu te serviras de lparam.
BruNews, ciao...
0
sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 2
9 mai 2003 à 19:54
Merci bien ! tu pourrai juste me dire komen je récupère ensuite mon struct stp, pq lé pointeur, g po ton compri ! merci

\* -- Seb [[mailto:sebastienbro@aol.com Mail]] [Web] -- */
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 mai 2003 à 20:04
On fait un cas exemple:
typedef struct {
char nom[20;
int age;
} MYPRMS, *LPMYPRMS;

MYPRMS prms;

BOOL CALLBACK AboutDlgProc(HWND hdlg, UINT mssg, WPARAM wParam, LPARAM lParam)
{
switch(mssg) {
case WM_INITDIALOG:
SetDlgItemText(hdlg, IDED_NOM, ((LPMYPRMS) lParam)->nom);
SetDlgItemInt(hdlg,IDED_AGE, ((LPMYPRMS) lParam)->age, 0, 0);
return 1;
case WM_COMMAND:
etc......
}
return 0;
}

// ici tu initialises membres de prms puis appel:
DialogBoxParam(hInstance, (LPCTSTR) 101, 0, AboutDlgProc, (long) &prms);

BruNews, ciao...
0
sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 2
9 mai 2003 à 20:12
Génial, merci beaucoup !

\* -- Seb [[mailto:sebastienbro@aol.com Mail]] [Web] -- */
0
sebastienbro Messages postés 246 Date d'inscription dimanche 14 avril 2002 Statut Membre Dernière intervention 5 août 2004 2
10 mai 2003 à 13:37
Ca marche très bien, merci !

Maintenant, je désirerais savoir comment faire pour que la fenetre soit modale, pour quon ne puisse pa cliker ailleur ke sur le dialog !

Merci

\* -- Seb [[mailto:sebastienbro@aol.com Mail]] [Web] -- */
0
Rejoignez-nous