IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Visual C++ Discussion :

Afficher une Boite de dialogue


Sujet :

Visual C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 27
    Points : 19
    Points
    19
    Par défaut Afficher une Boite de dialogue
    Bonjour tout le monde,

    Voila je voudrais afficher une boite de dialogue quand je clique sur un item dans un menu. J'ai essayé d'adapter le tutoial sur les boites de dialogue personnalisée a mon application mais la boite de dialogue ne s'affiche pas, en fait le programme ne passe meme pas dans la fonction DialogProc (voir dans le code).

    Quelqu'un aurait il une idée?

    Merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    HINSTANCE hinst;
    BOOL APIENTRY DialogProc(HWND, UINT, WPARAM, LPARAM);
     
    LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
    {
    	switch(msg)
    	{
    		case WM_DESTROY:
    			PostQuitMessage(WM_QUIT);			
    			break;
    		case WM_COMMAND:
    			switch(LOWORD(wParam))
    			{
    				case ID_FILE_EXIT:
    					PostQuitMessage(WM_QUIT);
    					break;
    				case ID_EDIT_NBOCTAVES:
    					DialogBox(hinst, "Dialog" , hWnd, (DLGPROC)DialogProc);
    					break;
    			}
    			break;
    		default:
    			break;
    	}
    	return DefWindowProc(hWnd, msg, wParam, lParam);
    }
     
     
    BOOL APIENTRY DialogProc(HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)
    {
    	static HWND hParent;
        switch (uMsg)
        {
          case WM_INITDIALOG:
             return TRUE;
     
          default:
             return FALSE;
        }
    }

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    La boite de dialogue n'est pas crée avec CreateWindow()
    Il faut appeler CreateWindow au démarrage lors du WinMain.
    Si c'est une boite de dlg ressource il faut prendre DialogBoxParam

    DialogBoxParam
    The DialogBoxParam function creates a modal dialog box from a dialog box template resource. Before displaying the dialog box, the function passes an application-defined value to the dialog box procedure as the lParam parameter of the WM_INITDIALOG message. An application can use this value to initialize dialog box controls.

  3. #3
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    DialogBoxParam() ou bien CreateDialogParam(), selon le type de boîte de dialogue...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 27
    Points : 19
    Points
    19
    Par défaut
    bon j'ai testé avec DialoBoxParam() et CreateDialogParam() et je n'arriv tjrs pas a afficher ce ke je veut... donc je vous met le code du main cette fois car je fait le CreateWindow().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
    {
    	int width = 600;
    	int height = 450;
     
    	hinst = hInstance;
     
    	WNDCLASS wc;
    	wc.style = CS_OWNDC;
    	wc.lpfnWndProc = WndProc;
    	wc.cbClsExtra = 0;
    	wc.cbWndExtra = 0;
    	wc.hInstance = hInstance;
    	wc.hIcon = 0;
    	wc.hCursor = LoadCursor(0, IDC_ARROW);
    	wc.hbrBackground = (HBRUSH)(COLOR_WINDOW);
    	wc.lpszClassName = "WindowClass";
    	wc.lpszMenuName = MAKEINTRESOURCE(IDR_MENU);
    	if( RegisterClass(&wc) == 0)
    		return -1;
     
    	HWND hWnd = CreateWindow ("WindowClass", "Practical Project 2007",WS_CAPTION | WS_OVERLAPPEDWINDOW |WS_VISIBLE, 100, 100,width,height,NULL,NULL, hInstance, NULL);
     
     
    	CApplication* Appli;
    	Appli = new CApplication(hWnd,hInstance,vis);
    	Appli->InitAppli();
     
    	ShowWindow(hWnd,nCmdShow);
     
    	MSG msg;
    	ZeroMemory( &msg, sizeof(msg) );
     
    	while(msg.message!=WM_QUIT)
    	{
     
    		if(PeekMessage(&msg,NULL,0,0,PM_REMOVE))
    		{
    			TranslateMessage(&msg);
    			DispatchMessage(&msg);
     
    		}
    		else
    		{
    			Appli->Update();
     
    		}
    	}
     
    	Appli->clean();
     
    	delete Appli;
     
    	return 0;
    }

  5. #5
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 369
    Points : 41 519
    Points
    41 519
    Par défaut
    Je ne connais pas CApplication.
    Et je suppose que tu le sais, Appli->Update() va être appelé en quasi-permanence, ce qui va bouffer 100% du proc...

    PS: Il faut COLOR_WINDOW+1 et non COLOR_WINDOW tout court.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 361
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 361
    Points : 20 381
    Points
    20 381
    Par défaut
    Ooops toutes mes excuses c'est plutot avec CreateDialog et non CreateWindow ce qui semble logique
    Ceci si la fenetre de dialogue n'est pas basée sur les ressources

    Voilà ce que dit Charles ( Petzold , wintellect )
    hDlgModeless = CreateDialog (hInstance, TEXT ("MyDlg"),
    hwnd, MyDlg) ;
    Regardes dans le MSDN

  7. #7
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Citation Envoyé par Mat.M
    Voilà ce que dit Charles ( Petzold , wintellect )
    le bon vieux charles , master charles

  8. #8
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    je dois encore avoir son book premiere édition sur la programmation windows (sous 3.1)

  9. #9
    Candidat au Club
    Inscrit en
    Octobre 2006
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 2
    Points : 2
    Points
    2
    Par défaut
    la solution c'est de créer un pointeur de la classe de la boite de dialoge que tu veux l'afficher
    par exemple on poséde que boite1 et le non de la classe de la boite de dialoge
    classmenu::onajouter()
    boite1 *a=new boite1;
    a->DOMODAL;
    n'oublier pas d'ajouter #include "boite1.h"

Discussions similaires

  1. [Debutant] Afficher une boite de dialogue
    Par M E H D I dans le forum JBuilder
    Réponses: 2
    Dernier message: 11/04/2008, 23h30
  2. Réponses: 6
    Dernier message: 15/11/2007, 23h11
  3. Comment afficher une boite de dialogue ?
    Par THkiller dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/08/2006, 21h24
  4. Réponses: 2
    Dernier message: 20/04/2006, 13h20
  5. comment afficher une boite de dialogue simple ?
    Par Ekimasu dans le forum Agents de placement/Fenêtres
    Réponses: 4
    Dernier message: 08/06/2004, 16h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo