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

MFC Discussion :

MDI sans MFC, possible ?


Sujet :

MFC

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juin 2002
    Messages : 256
    Points : 121
    Points
    121
    Par défaut MDI sans MFC, possible ?
    salut !
    ben, tout est dans le titre...

    je considere MDI une fenetre qui en contient une autre : exemple sur ce dessin :


    |---------------------------------------------------------|
    |fenetre mere |
    |---------------------------------------------------------|
    | |-----------------------------------------------| |
    | |fenetre fille | |
    | |-----------------------------------------------| |
    | | | |
    | | | |
    | | | |
    | | | |
    | | | |
    | |-----------------------------------------------| |
    | |
    |----------------------------------------------------------|


    voila.


    ps : si c possible que vous tajoutiez un exemple d'utilisation...
    OS : WinXP
    Outils : VC++ 8 (Visual Studio 2005)

  2. #2
    Bob
    Bob est déconnecté
    Membre éclairé
    Avatar de Bob
    Inscrit en
    Mars 2002
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 115
    Points : 866
    Points
    866
    Par défaut application MDI sans MFC
    C'est tout a fait possible. Les MFC sont faites ENTIEREMENT a partir de l'API. Ce ne sont que des classes qui encapsulent l'API et rien d'autre.
    Pour creer une fenetre mere, il faut utiliser CreateWindowEx().
    Puis, pour la fenetre fille, on refait la meme operation mais en indiquant dans que la fenetre parent, est celle precedament créée. hWndParent est un des parametres de CreateWindowEx()
    Bob, Rédacteur C/C++ & PHP
    http://bob.developpez.com/

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juin 2002
    Messages : 256
    Points : 121
    Points
    121
    Par défaut ON Y EST PRESQUE !! PLUS QU'UN PETIT EFFORD !!
    voila mon code :

    il est concluant mais je te dirai le "bug" apres le 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
    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
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    #include <windows.h>
    #include <stdio.h>
    #include <stdlib.h>
     
    static char g_szClassName&#91;&#93; = "MyWindowClass";
    static char mychild&#91;&#93; = "child";
    static HINSTANCE g_hInst = NULL;
     
    #define IDM_CHILD 1001
     
    HWND hwndMDIClient;
     
    LRESULT CALLBACK ChildProc&#40;HWND hwndChild, UINT Message, WPARAM wParam, LPARAM lParam&#41;
    &#123;
         switch&#40;Message&#41;
         &#123;
     
    	 case WM_PAINT&#58;
    		 &#123;
    		 HDC hdc = GetDC&#40;hwndChild&#41;;
    		 TextOut&#40;hdc,0,0,"Coucou !",8&#41;;
    		 &#125;
    		 break;
    		        case WM_CLOSE&#58;
                     DestroyWindow&#40;hwndChild&#41;;
                break;
                case WM_DESTROY&#58;
                     PostQuitMessage&#40;0&#41;;
                break;
                default&#58;
                     return DefWindowProc&#40;hwndChild, Message, wParam, lParam&#41;;
         &#125;
         return 0;
    &#125;
     
    LRESULT CALLBACK WndProc&#40;HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam&#41;
    &#123;
         switch&#40;Message&#41;
         &#123;
     
    		 case WM_CREATE&#58; 
        &#123; 
                   hwndMDIClient =/* CreateWindowEx&#40;WS_EX_CLIENTEDGE,mychild,"Fenetre MDI fille",
                WS_CHILD | WS_CLIPSIBLINGS | WS_VSCROLL | WS_HSCROLL |  WS_CLIPSIBLINGS, 
                40,40, 400,300,hwnd,NULL, g_hInst, NULL&#41;; */
    			CreateWindowEx&#40;
                WS_EX_CLIENTEDGE | WS_CLIPCHILDREN,
                mychild,
                "je suis ta fille !",
                WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS ,
                CW_USEDEFAULT, CW_USEDEFAULT, 640, 480,
                hwnd, NULL, g_hInst, NULL&#41;;
     
            ShowWindow&#40;hwndMDIClient, SW_SHOW&#41;; 
    		UpdateWindow&#40;hwnd&#41;;
        &#125; 
        break; 
     
    /*            case WM_COMMAND&#58;
                     switch&#40;LOWORD&#40;wParam&#41;&#41;
                     &#123;
     
                     &#125;
                break;*/
                case WM_CLOSE&#58;
                     DestroyWindow&#40;hwnd&#41;;
                break;
                case WM_DESTROY&#58;
                     PostQuitMessage&#40;0&#41;;
                break;
                default&#58;
                     return DefWindowProc&#40;hwnd, Message, wParam, lParam&#41;;
         &#125;
         return 0;
    &#125;
     
    int WINAPI WinMain&#40;HINSTANCE hInstance, HINSTANCE hPrevInstance,
         LPSTR lpCmdLine, int nCmdShow&#41;
    &#123;
         WNDCLASSEX WndClass;
         HWND hwnd;
         MSG msg;
     
         g_hInst = hInstance;
     
         WndClass.cbSize                = sizeof&#40;WNDCLASSEX&#41;;
         WndClass.style              = 0;
         WndClass.lpfnWndProc    = WndProc;
         WndClass.cbClsExtra        = 0;
         WndClass.cbWndExtra        = 0;
         WndClass.hInstance      = g_hInst;
         WndClass.hIcon              = LoadIcon&#40;NULL, IDI_APPLICATION&#41;;
         WndClass.hCursor            = LoadCursor&#40;NULL, IDC_ARROW&#41;;
         WndClass.hbrBackground = &#40;HBRUSH&#41;&#40;COLOR_WINDOW&#41;;
         WndClass.lpszMenuName  = "MAINMENU";
         WndClass.lpszClassName = g_szClassName;
         WndClass.hIconSm            = LoadIcon&#40;NULL, IDI_APPLICATION&#41;;
     
     if&#40;!RegisterClassEx&#40;&WndClass&#41;&#41;
         &#123;
                return 0;
         &#125;
     
    	 WndClass.lpfnWndProc   = &#40;WNDPROC&#41; ChildProc; 
         WndClass.hIcon         = NULL;
         WndClass.lpszMenuName  = &#40;LPCTSTR&#41; NULL; 
         WndClass.cbWndExtra    = 0; 
    	 WndClass.hbrBackground = &#40;HBRUSH&#41;&#40;COLOR_WINDOW+1&#41;;
         WndClass.lpszClassName = mychild; 
     
     
         if&#40;!RegisterClassEx&#40;&WndClass&#41;&#41;
         &#123;
                return 0;
         &#125;
     
         hwnd = CreateWindowEx&#40;
                WS_EX_CLIENTEDGE | WS_CLIPCHILDREN,
                g_szClassName,
                "Fonctions Affines/linéaires",
                WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS ,
                CW_USEDEFAULT, CW_USEDEFAULT, 800, 600,
                NULL, NULL, g_hInst, NULL&#41;;
     
         if&#40;hwnd == NULL&#41;
         &#123;
                return 0;
         &#125;
     
    	 /*hwndMDIClient = CreateMDIWindow&#40;g_szClassName,"coucou",WS_OVERLAPPED | WS_CLIPCHILDREN ,0,0,400,400,hwnd,g_hInst,NULL&#41;;
    	ShowWindow&#40;hwndMDIClient, SW_SHOW&#41;;
       
    	 ShowWindow&#40;hwndMDIClient, SW_SHOW&#41;;
         UpdateWindow&#40;hwndMDIClient&#41;;*/
    	     ShowWindow&#40;hwnd, SW_SHOW&#41;;
         UpdateWindow&#40;hwnd&#41;;
     
     
     
       while &#40;GetMessage&#40;&msg, &#40;HWND&#41; NULL, 0, 0&#41;&#41; &#123; 
        if &#40;!TranslateMDISysAccel&#40;hwndMDIClient, &msg&#41;&#41;
    	&#123; 
            TranslateMessage&#40;&msg&#41;; 
            DispatchMessage&#40;&msg&#41;; 
        &#125; 
    &#125; 
     
    &#125;


    le "bug" est que la fenetre fille, lorsque je l'agrandi ou retreci, ne prend pas pour reference la fenetre mere : elle s'agrandie, par exemple, sur tout l'ecran au lieu de s'agrandir au maximum sur la taille de la fenetre mere....

    secondo, le texte "coucou" dessiné dans la fenetre fille est continuellement dessiné : il clignote (c'est pareil si je choisis de dessiner ce texte dans la fentre mere)

    tertio : cpossible de faire du MDI avec des boite de dialog ? comment ?
    OS : WinXP
    Outils : VC++ 8 (Visual Studio 2005)

  4. #4
    Bob
    Bob est déconnecté
    Membre éclairé
    Avatar de Bob
    Inscrit en
    Mars 2002
    Messages
    115
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 115
    Points : 866
    Points
    866
    Par défaut application MDI
    euh, pour faire du MDI avec des boites de dialogue, je c pas.
    Mais pour les autres bugs oui:
    -le texte qui clignote. Le traitemenht d'un mesasge WM_PAINT DOIT se faire comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    BeginPaint&#40;&#41;
    ...... // ton code
    EndPaint&#40;&#41;
    Il ne faut pas utiliser GetDC() ici. De plus qd tu utilise GetDC(), tu oublies le ReleaseDC().
    -ta fenetre client doit comporter le type WS_CHILD et elle ne le comporte pas, ca doit etre pour ca.
    Bob, Rédacteur C/C++ & PHP
    http://bob.developpez.com/

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Juin 2002
    Messages : 256
    Points : 121
    Points
    121
    Par défaut ......
    tu sais que je t'aime toi ??

    je suis comme ca :

    ca fait deux problemes majeures quetu me resouds, je ne peux pas rester sans rien faire.... mailo moi
    OS : WinXP
    Outils : VC++ 8 (Visual Studio 2005)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [html] zone de texte sans saisie possible
    Par Silvia12 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 01/08/2005, 17h37
  2. Réponses: 1
    Dernier message: 24/07/2005, 23h25
  3. Ré-installation (du systeme) sans formatage, possible ?
    Par __fabrice dans le forum Administration système
    Réponses: 11
    Dernier message: 11/04/2005, 13h32
  4. Réponses: 1
    Dernier message: 11/04/2005, 10h59
  5. [Sans MFC]Faire clignoter l'icone d'une application?
    Par Melchisedec dans le forum MFC
    Réponses: 4
    Dernier message: 16/07/2003, 13h14

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