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

C Discussion :

Problème avec les TabDialog


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Par défaut Problème avec les TabDialog
    Bonjour,

    J'ai écris un petit programme en c dans lequel j'affiche une DialogBox( avec DialogboxParamA). Tout se passe bien mais dès que je rajoute une TabDialog sur ma DialogBox, DialogboxParamA rend immédiatement la main et donc le programme quitte sans rien avoir fait. J'ai tracé la callback associée et le système envoie un premier message MW_FONT, suivi juste après d'un WM_DESTROY puis d'un WL_NCDESTROY. Le plus étrange c'est que DialogboxParamA me renvoie -1 mais par contre un GetLastError() que je fais juste après me renvoie 0.

    Voici mon code :

    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
    57
    58
    59
     
    #include <windows.h>
    #include "resource.h"
     
    INT_PTR CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam );
     
    int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int )
    {
    	LRESULT lResult = DialogBoxParamA( hInstance, MAKEINTRESOURCEA( IDD_DIALOGMAIN), NULL, DlgProc, 0L );
    	DWORD dwError = GetLastError();
    	return 0;
    }
     
     
    INT_PTR CALLBACK DlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
    {
    	switch( msg )
    	{
    	case WM_NCDESTROY:
    		{
    			int test=0;
    			break;
    		}
    	case WM_SETFONT:
    		{
    			int test = 0;
    			break;
    		}
    	case WM_DESTROY:
    		{
    			int test=0;
    			break;
    		}
    	case WM_LBUTTONDBLCLK:
    		{
    			EndDialog(hWnd,0);
    			break;
    		}
    	case WM_CLOSE:
    		{
    			EndDialog( hWnd, 0);
    			break;
    		}
    	case WM_COMMAND:
    		{
    			switch( wParam )
    			{
    			case ID_BUTTON_OK:
    			case ID_BUTTON_CANCEL:
    				{
    					EndDialog(hWnd,0);
    					break;
    				}
    			}
    			break;
    		}
    	}
    	return 0;
    }
    Si ça peut éventuellement aider voilà le fichier de ressource :

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    // Microsoft Visual C++ generated resource script.
    //
    #include "resource.h"
     
    #define APSTUDIO_READONLY_SYMBOLS
    /////////////////////////////////////////////////////////////////////////////
    //
    // Generated from the TEXTINCLUDE 2 resource.
    //
    #include "afxres.h"
     
    /////////////////////////////////////////////////////////////////////////////
    #undef APSTUDIO_READONLY_SYMBOLS
     
    /////////////////////////////////////////////////////////////////////////////
    // Français (France) resources
     
    #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_FRA)
    #ifdef _WIN32
    LANGUAGE LANG_FRENCH, SUBLANG_FRENCH
    #pragma code_page(1252)
    #endif //_WIN32
     
    #ifdef APSTUDIO_INVOKED
    /////////////////////////////////////////////////////////////////////////////
    //
    // TEXTINCLUDE
    //
     
    1 TEXTINCLUDE 
    BEGIN
        "resource.h\0"
    END
     
    2 TEXTINCLUDE 
    BEGIN
        "#include ""afxres.h""\r\n"
        "\0"
    END
     
    3 TEXTINCLUDE 
    BEGIN
        "\r\n"
        "\0"
    END
     
    #endif    // APSTUDIO_INVOKED
     
     
    /////////////////////////////////////////////////////////////////////////////
    //
    // Dialog
    //
     
    IDD_DIALOGMAIN DIALOGEX 0, 0, 297, 177
    STYLE DS_SETFONT | DS_3DLOOK | DS_FIXEDSYS | DS_CENTER | WS_MAXIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
    CAPTION "Dialog"
    FONT 8, "MS Shell Dlg", 400, 0, 0x1
    BEGIN
        DEFPUSHBUTTON   "OK",ID_BUTTON_OK,240,7,50,14
        PUSHBUTTON      "Annuler",ID_BUTTON_CANCEL,240,24,50,14
        CONTROL         "",IDC_TAB1,"SysTabControl32",0x0,29,48,174,79
    END
     
     
    /////////////////////////////////////////////////////////////////////////////
    //
    // DESIGNINFO
    //
     
    #ifdef APSTUDIO_INVOKED
    GUIDELINES DESIGNINFO 
    BEGIN
        IDD_DIALOGMAIN, DIALOG
        BEGIN
            LEFTMARGIN, 7
            RIGHTMARGIN, 290
            TOPMARGIN, 7
            BOTTOMMARGIN, 170
        END
    END
    #endif    // APSTUDIO_INVOKED
     
    #endif    // Français (France) resources
    /////////////////////////////////////////////////////////////////////////////
     
     
     
    #ifndef APSTUDIO_INVOKED
    /////////////////////////////////////////////////////////////////////////////
    //
    // Generated from the TEXTINCLUDE 3 resource.
    //
     
     
    /////////////////////////////////////////////////////////////////////////////
    #endif    // not APSTUDIO_INVOKED
    ... et resource.h :

    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
     
    //{{NO_DEPENDENCIES}}
    // Microsoft Visual C++ generated include file.
    // Used by TestGUI.rc
    //
    #define IDD_DIALOGMAIN                  101
    #define IDC_TABCONTROL                  1003
    #define ID_BUTTON_OK                    1004
    #define ID_BUTTON_CANCEL                1005
    #define IDC_TAB1                        1006
     
    // Next default values for new objects
    // 
    #ifdef APSTUDIO_INVOKED
    #ifndef APSTUDIO_READONLY_SYMBOLS
    #define _APS_NEXT_RESOURCE_VALUE        103
    #define _APS_NEXT_COMMAND_VALUE         40001
    #define _APS_NEXT_CONTROL_VALUE         1007
    #define _APS_NEXT_SYMED_VALUE           101
    #endif
    #endif
    Voilà merci beaucoup pour votre aide parce que ça fait plusieurs jours que je me prend la tête là dessus et je n'y comprends plus rien.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Commence par rajouter le style DS_NOFAILCREATE à ta boîte de dialogue.
    En théorie, elle devrait maintenant apparaître, mais incomplète.

    Tu dois faire un InitCommonControlsEx() au début de ton programme...
    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.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    47
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Janvier 2006
    Messages : 47
    Par défaut
    Citation Envoyé par Médinoc Voir le message
    Commence par rajouter le style DS_NOFAILCREATE à ta boîte de dialogue.
    En théorie, elle devrait maintenant apparaître, mais incomplète.

    Tu dois faire un InitCommonControlsEx() au début de ton programme...
    Avec le InitCommonControlsEx ça marche, je ne connaissais pas l'existence de cette fonction.

    Merci !

    EDIT : Par contre je n'ai pas compris l'histoire du style (DS_NOFAILCREATE ), on doit le mettre où ? Je pensais qu'on en avais besoin uniquement pour créer une fenêtre, pas pour une boite de dialogue.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    DS_NOFAILCREATE n'a pas d'effet sur les fenêtres ordinaires, seulement sur les boîtes de dialogue. Il sert à dire de créer quand même la boîte, même si la création d'un contrôle échoue.
    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.

Discussions similaires

  1. Problème avec les fonctions
    Par jvachez dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 13/01/2004, 12h06
  2. [Postgresql]Problème avec les fonctions ...
    Par fet dans le forum Requêtes
    Réponses: 4
    Dernier message: 02/10/2003, 09h04
  3. Problème avec les apostrophes
    Par misterbillyboy dans le forum Requêtes
    Réponses: 2
    Dernier message: 15/07/2003, 16h39
  4. Problème avec les fichiers .JPG
    Par cprogil dans le forum Langage
    Réponses: 5
    Dernier message: 10/06/2003, 15h44
  5. []Problème avec les formulaires Outlook
    Par Invité dans le forum Outlook
    Réponses: 6
    Dernier message: 05/12/2002, 09h59

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