OVH Cloud OVH Cloud

Boite de dialogue

6 réponses
Avatar
Jean-François GAZET
Bonjour,

je ne suis pas un expert en programmation C++ mais je me débrouille et j'ai
bien compris le principe de MessageBox().

Mais j'aurais besoin d'une boite de dialogue identique avec :
- un message informatif, du blabla, quoi.
- une zone de texte (30 caractères environ).
- un bouton OK

Aprés le clic sur OK, j'ai juste besoin de savoir si du texte a été saisi ou
non.

Est-ce qu'une fonction aussi simple que MessageBox() permet cela ?

Merci.

6 réponses

Avatar
Manuel Leclerc
Jean-François GAZET a écrit :

je ne suis pas un expert en programmation C++
mais je me débrouille et j'ai bien compris le
principe de MessageBox().

Mais j'aurais besoin d'une boite de dialogue
identique avec :
- un message informatif, du blabla, quoi.
- une zone de texte (30 caractères environ).
- un bouton OK

Aprés le clic sur OK, j'ai juste besoin de savoir
si du texte a été saisi ou non.

Est-ce qu'une fonction aussi simple que MessageBox()
permet cela ?



Non.

Il te faut voir du côté de l'API Win32 DialogBox, ou
bien consulter la documentation de ton framework de
développement.
Avatar
Jean-François GAZET
> > j'aurais besoin d'une boite de dialogue avec :
> - une zone de texte (30 caractères environ).
> - un bouton OK
> Est-ce qu'une fonction aussi simple que MessageBox()
> permet cela ?



Non.
Il te faut voir du côté de l'API Win32 DialogBox, ou
bien consulter la documentation de ton framework de
développement.



Merci.
Je suis sous VC++6.0. Je vois que je peux créer une boite de dialogue dans
les ressources que je peux habiller.
Son nom est IDD_DIALOG1 par défaut. Avez-vous des exemples pour afficher
cette boite de dialogue et répondre aux évènement OK et ANNULER ?
Avatar
Ambassadeur Kosh
> Merci.
Je suis sous VC++6.0.



condoléances :o)

Je vois que je peux créer une boite de dialogue dans
les ressources que je peux habiller.
Son nom est IDD_DIALOG1 par défaut. Avez-vous des exemples pour afficher
cette boite de dialogue et répondre aux évènement OK et ANNULER ?



une façon pratique de faire est d'utiliser DoModal sur la fenêtre.
donc en premier, avec class wizard, tu vas créer une classe (descendante de
CDialog) qui "emballe" ta resource. appelons la CPersoMsgDlg.
puis, une fois ceci fait, c'est fini (ou presque).

CPersoMsgDlg *dlg = new CPersoMsgDlg(...ce qu'il faut...) ;
const int result = dlg->DoModal() ;

if(result==MR_OK) // ou un nom qui ressemble à ça
{
string text = dlg->GetTheValeur() ;
...
}

le DoModal à le comportement escompté. cad qu'il montre la fenêtre, et
bloque tout ce qu'il y a en dessous (fenêtres desactivées, et code
"suspendu") jusqu'à ce que tu réalises une action modale.
appuier echap ou fermeture retourne MR_CANCEL. appuier sur un bouton qui a
un ModalResult renverra ce ModalResult. un bouton qui n'a pas de ModalResult
ne sera pas pris en compte. les possibilités de valeur sont Cancel, Ok, Yes,
No, Abort, mais faut pas demander plus.

voila voila...
Avatar
Manuel Leclerc
Jean-François GAZET a écrit :

> > j'aurais besoin d'une boite de dialogue avec :
> > - une zone de texte (30 caractères environ).
> > - un bouton OK
> > Est-ce qu'une fonction aussi simple que MessageBox()
> > permet cela ?

> Non.
> Il te faut voir du côté de l'API Win32 DialogBox, ou
> bien consulter la documentation de ton framework de
> développement.

Merci.
Je suis sous VC++6.0. Je vois que je peux créer une boite
de dialogue dans les ressources que je peux habiller.
Son nom est IDD_DIALOG1 par défaut. Avez-vous des exemples
pour afficher cette boite de dialogue et répondre aux évènement
OK et ANNULER ?



Il y a tout ce qu'il faut dans la documentation de VC. Voir
la classe CDialog et ses méthodes. Tu exagères, quand même :-)

Allez, j'eesaye de t'aider, mais sans garantie, je n'aime pas
trop MFC :-)

{
CDialog MyDialog( IDD_DIALOG1 );
int nRet = MyDialog.DoModal();
switch ( nRet ) {
case IDOK:
break;
case IDCANCEL:
break;
default:
}
}

Pour ton champs de saisie, place une variable
CString m_strInput;
dans ta classe dialog et un code genre :

CWnd * pMyEdit = GetDlgItem( IDC_EDIT1 );
if ( pMyEdit ) pMyEdit->GetWindowText( m_strInput );

dans le OnOk() de la dialog.

Tu peux alors lire la variable membre après le DoModal();

Tout ça sans garantie, tu me diras si ça marche :-)
Avatar
Chistian ASTOR
Jean-François GAZET a écrit:


Mais j'aurais besoin d'une boite de dialogue identique avec :
- un message informatif, du blabla, quoi.
- une zone de texte (30 caractères environ).
- un bouton OK

Aprés le clic sur OK, j'ai juste besoin de savoir si du texte a été saisi ou
non.



Par ex =>

#include "windows.h"
#include "resource.h"

char sText[255];

LRESULT CALLBACK DlgProc(HWND hWnd, UINT message, WPARAM wParam,LPARAM
lParam);

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{

if (DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1),
NULL,(DLGPROC)DlgProc) == IDOK)
MessageBox(NULL, sText, "Info", MB_OK | MB_ICONINFORMATION);
return 0;

}

LRESULT CALLBACK DlgProc(HWND hWnd, UINT message, WPARAM wParam,LPARAM
lParam)
{
switch (message)
{
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDOK:
{
if (SendDlgItemMessage(hWnd, IDC_EDIT1, WM_GETTEXTLENGTH, 0, 0 ) == 0)
MessageBox(hWnd, "Empty text !", "Error", MB_OK | MB_ICONSTOP);
else
{
SendDlgItemMessage(hWnd, IDC_EDIT1, WM_GETTEXT, sizeof sText,
(LPARAM)sText ) ;
EndDialog(hWnd, wParam);
}
}
break;
case IDCANCEL:
EndDialog(hWnd, wParam);
return TRUE;
}
}
break;
}
return 0;
}
Avatar
Jean-François GAZET
Alors là : Bravo !
Pile poil ce que je cherchais :-))
Je vous fais la bise :o)
Merci.

Merci aussi pour les autres réponses, mais je suis un peu neuneu et les MFC,
classes et autre, je pige pas tout.

> Mais j'aurais besoin d'une boite de dialogue identique avec :
> - un message informatif, du blabla, quoi.
> - une zone de texte (30 caractères environ).
> - un bouton OK
>
> Aprés le clic sur OK, j'ai juste besoin de savoir si du texte a été


saisi ou
> non.

Par ex =>

#include "windows.h"
#include "resource.h"

char sText[255];

LRESULT CALLBACK DlgProc(HWND hWnd, UINT message, WPARAM wParam,LPARAM
lParam);

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{

if (DialogBox(hInstance, MAKEINTRESOURCE(IDD_DIALOG1),
NULL,(DLGPROC)DlgProc) == IDOK)
MessageBox(NULL, sText, "Info", MB_OK | MB_ICONINFORMATION);
return 0;

}

LRESULT CALLBACK DlgProc(HWND hWnd, UINT message, WPARAM wParam,LPARAM
lParam)
{
switch (message)
{
case WM_COMMAND:
{
switch (LOWORD(wParam))
{
case IDOK:
{
if (SendDlgItemMessage(hWnd, IDC_EDIT1, WM_GETTEXTLENGTH, 0, 0 ) == 0)
MessageBox(hWnd, "Empty text !", "Error", MB_OK | MB_ICONSTOP);
else
{
SendDlgItemMessage(hWnd, IDC_EDIT1, WM_GETTEXT, sizeof sText,
(LPARAM)sText ) ;
EndDialog(hWnd, wParam);
}
}
break;
case IDCANCEL:
EndDialog(hWnd, wParam);
return TRUE;
}
}
break;
}
return 0;
}