Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Les MDI , c'est que pour les documents text? (NO MFC !!!) [ Windows / Autre ] (rompelstilchen)

mercredi 12 juillet 2006 à 10:11:36 | Les MDI , c'est que pour les documents text? (NO MFC !!!)

rompelstilchen

J'essaye de creer une MDI (sans MFC) mais quant je crée un boutton dans la fenetre enfant, il n'apparait pas
si je change le wnd handle vers celui de la fenetre parent, ça marche

les fenetres enfants ne peuvent pas etre modifiees?
on ne peut pas coller de composants dessus???

merci pour votre aide

PS : win32 api sans MFC, merci. oui je sais je deteste les MFC :) et puis ça sert à kedale :)

mercredi 12 juillet 2006 à 20:52:11 | Re : Les MDI , c'est que pour les documents text? (NO MFC !!!)

gagah1

Membre Club
Montre nous le code pour voir où ne va pas.

mercredi 12 juillet 2006 à 23:48:23 | Re : Les MDI , c'est que pour les documents text? (NO MFC !!!)

rompelstilchen

ok no worries, j'ai fini par trouver un exemple sur le web qui fonctionne
pas facile la win32 api, surtout sans exemple qui marchent
et pour peu que l'on se trouve dans un cas particulier, ou que l'on oublie un schnol...
j'ai beau comparer avec ma premiere methode, je ne comprends pas ce qui ne fonctionnait pas

[CODE]
#include <windows.h> // Obliger pour les fenêtres
#include <commctrl.h>
#include <stdio.h>
#include <stdlib.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <math.h>
#include <time.h>
// Procédure traitant les messages de la fenêtre principale
LRESULT CALLBACK FrameProc(HWND hFrame,UINT Message,WPARAM wParam,LPARAM lParam);
// Procédure traitant les messages de la fenêtre fille
LRESULT CALLBACK ChildProc(HWND hChild,UINT Message,WPARAM wParam,LPARAM lParam);

HINSTANCE hInst;
HWND hMDIFrame; // Handle de la fenêtre principale
HWND hMDIClient; // Handle de la zone client
HWND hMDIChild; // Handle de la fenêtre fille

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nSowhCmd)
{
 hInst = hInstance; // Globalise l'instante
 WNDCLASSEX wc; // Classe pour fenêtre
 InitCommonControls();
/** Classe pour la fenêtre principale **/
 wc.cbSize=sizeof(wc);
 wc.cbClsExtra=0;
 wc.cbWndExtra=0;
 wc.style=0;
 wc.hInstance=hInst;
 wc.hCursor=LoadCursor(NULL,IDC_ARROW);
 wc.hIcon=LoadIcon(NULL,IDI_APPLICATION);
 wc.hIconSm=LoadIcon(NULL,IDI_APPLICATION);
 wc.lpfnWndProc=(WNDPROC)FrameProc;
 wc.lpszMenuName=NULL;
 wc.lpszClassName="MDI Frame";
 wc.hbrBackground=(HBRUSH) (COLOR_APPWORKSPACE+1);
 if( !RegisterClassEx(&wc) )
  return 0;

/** Classe pour les fenêtre fille **/
/* wc.hbrBackground=(HBRUSH) (COLOR_BTNFACE+1);
 wc.lpfnWndProc=(WNDPROC)ChildProc;
 wc.lpszClassName="MDI Child";*/
    wc.cbSize = sizeof(WNDCLASSEX);
    wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC | CS_DBLCLKS;
    wc.lpfnWndProc = (WNDPROC)ChildProc;
    wc.cbClsExtra = 0;
    wc.cbWndExtra = 0;
    wc.hInstance = hInstance;
    wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    wc.hbrBackground = (HBRUSH)(COLOR_3DSHADOW+1);    // Background color (Only seen if OGL fails)
    wc.lpszMenuName = NULL;
    wc.lpszClassName = "MDI Child";
    if( !RegisterClassEx(&wc) )
  return 0;

/** Création de la fenêtre mère (principale) **/
 hMDIFrame = CreateWindowEx(
  WS_EX_CLIENTEDGE,
  "MDI Frame",
  "RobotSim",
  WS_VISIBLE|WS_CLIPCHILDREN | WS_OVERLAPPEDWINDOW,
  CW_USEDEFAULT,
  CW_USEDEFAULT,
  500,
  400,
  NULL,
  NULL,
  hInst,
  0);

/** Création de la fenêtre fille **/
/* hMDIChild = CreateWindowEx(
   WS_EX_TOOLWINDOW,
   "MDI Child",
   "Tools",
   WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW, // Ne pas oublier le WS_CHILD
   0,
   0,
   200,
   150,
   hMDIClient,
   NULL,
   hInst,
   0);*/

                    CREATESTRUCT cs;
                    ZeroMemory(&cs, sizeof(CREATESTRUCT));

                    hMDIChild= CreateWindowEx(
                    WS_EX_MDICHILD,
                    "MDI Child",
                    "Tools",
                    WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW,
                    CW_USEDEFAULT,
                    CW_USEDEFAULT,
                    CW_USEDEFAULT,
                    CW_USEDEFAULT,
                    hMDIClient,
                    NULL,
                    hInst,
                    &cs
                    );

                    PIXELFORMATDESCRIPTOR pfd;
                    ZeroMemory(&pfd, sizeof(pfd));
                    pfd.nSize = sizeof(pfd);
                    pfd.nVersion = 1;
                    pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER;
                    pfd.iPixelType = PFD_TYPE_RGBA;
                    pfd.cColorBits = 24;
                    pfd.cDepthBits = 16;
                    pfd.iLayerType = PFD_MAIN_PLANE;
                    int iFormat = ChoosePixelFormat(GetDC(hMDIFrame), &pfd);
                    SetPixelFormat(GetDC(hMDIFrame), iFormat, &pfd);               // Set pixel format for this child
                    HGLRC hRC = wglCreateContext(GetDC(hMDIFrame));  // Set childs rendering context
                    wglMakeCurrent(GetDC(hMDIFrame), hRC);
    glCullFace(GL_BACK);
    glEnable(GL_CULL_FACE);
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glClearDepth(1.0);
    glDepthFunc(GL_LESS);
    glEnable(GL_DEPTH_TEST);
    glShadeModel(GL_SMOOTH);
    glEnable(GL_NORMALIZE);
    float fMatAmbient[] = {0.8, 0.8, 0.8, 1.0};
    float fMatDiffuse[] = {0.8, 0.8, 0.8, 1.0};
    float fMatSpecular[] = {0.9, 0.9, 0.9, 1.0};
    float fMatEmmision[] = {0.0, 0.0, 0.0, 1.0};
    float fMatShininess[] = {100.0};
    glMaterialfv(GL_FRONT, GL_AMBIENT, fMatAmbient);
    glMaterialfv(GL_FRONT, GL_DIFFUSE, fMatDiffuse);
    glMaterialfv(GL_FRONT, GL_SPECULAR, fMatSpecular);
    glMaterialfv(GL_FRONT, GL_EMISSION, fMatEmmision);
    glMaterialfv(GL_FRONT, GL_SHININESS, fMatShininess);
    float fLightAmbient[] = {0.2, 0.2, 0.2, 1.0};
    glLightfv(GL_LIGHT0, GL_AMBIENT, fLightAmbient);
    float fLightPosition[] = {200.0, 0.0, 0.0, 1.0};
    glLightfv(GL_LIGHT0, GL_POSITION, fLightPosition);
    glEnable(GL_LIGHTING);
    glEnable(GL_LIGHT0);
    glEnable(GL_TEXTURE_2D);

 ShowWindow(hMDIChild,SW_SHOW);
 SetFocus(hMDIChild);

 MSG msg;
 while( GetMessage(&msg,NULL,0,0) != NULL )
 {
  TranslateMessage(&msg);
  DispatchMessage(&msg);
 }

 return 0;
}

LRESULT CALLBACK FrameProc(HWND hFrame,UINT Message,WPARAM wParam,LPARAM lParam)
{
 switch(Message)
 {
        case WM_PAINT:
        {
            int iThisChild;
            PAINTSTRUCT ps;
            BeginPaint(hFrame, &ps);
            SwapBuffers(GetDC(hFrame));
            EndPaint(hFrame, &ps);
        }
        break;
 case WM_CREATE:
/****** Quand la fenêtre principale se créée, il faut créer la zone client pour y mettre les fenêtre fille ******/
  CLIENTCREATESTRUCT css; // Inconvénient : je ne sais toujours pas à quoi sert cette structure !
  css.hWindowMenu=NULL;
  css.idFirstChild=0;
/****** Création de la zone client ******/
  hMDIClient = CreateWindowEx(WS_EX_CLIENTEDGE,
   "MDICLIENT",
   (LPCSTR)NULL,
   WS_CHILD | WS_CLIPCHILDREN | WS_CLIPSIBLINGS, // Ne pas oubliez le WS_CHILD
   CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
   hFrame,
   NULL,
   hInst,
   (LPSTR)&css);
  ShowWindow(hMDIClient,SW_SHOW);
  return 0;
 case WM_DESTROY:
  PostQuitMessage(0);
  return 0;
 default:
  return DefFrameProc(hFrame,hMDIClient,Message,wParam,lParam);
 }
}

LRESULT CALLBACK ChildProc(HWND hChild,UINT Message,WPARAM wParam,LPARAM lParam)
{
 switch(Message)
 {
/* case WM_CREATE:
  {
   HWND button = CreateWindow(
           "BUTTON", "Class Options",
           BS_LEFT|BS_PUSHBUTTON| WS_VISIBLE| WS_CHILD,
           10, 10, 105, 100,
           hMDIChild, NULL, hInst, NULL);
/*             HWND hstatic = CreateWindow("STATIC", "MyPicture",
                                    WS_CHILD | WS_VISIBLE,
                                         10, 10, 100, 100, hMDIChild, NULL, hInst, NULL);
*/
/*  return 0;
  }
*/ case WM_CLOSE: // C'est juste une petite touche d'intéractivité
  MessageBox(hMDIFrame,"Ben pourquoi la femer ???\nElle est bien là !","Bah pourquoi ???",MB_OK|MB_ICONEXCLAMATION);
  return 0;
 case WM_DESTROY:
  PostQuitMessage(0);
  return 0;
 default:
  return DefMDIChildProc(hChild,Message,wParam,lParam);
 }
}
[/CODE]


mercredi 12 juillet 2006 à 23:49:41 | Re : Les MDI , c'est que pour les documents text? (NO MFC !!!)

rompelstilchen

bon la c la derniere version, mais pas moyen de faire apparaitre le pushbutton dans la mdi


jeudi 13 juillet 2006 à 11:21:40 | Re : Les MDI , c'est que pour les documents text? (NO MFC !!!)

gagah1

Membre Club
Réponse acceptée !

C'est en desordre total. Voici le code simplifié. Essaie d'adapter à ce que tu veux. Là je vois des en-têtes OpenGL., je sais pas ce que tu veux avec.

#include <windows.h>

/*****************************************************************
* Declaration des fonctions globales
*
*****************************************************************/

// Procédure traitant les messages de la fenêtre principale
LRESULT CALLBACK FrameProc(HWND hFrame,UINT Message,WPARAM wParam,LPARAM lParam);
// Procédure traitant les messages de la fenêtre fille
LRESULT CALLBACK ChildProc(HWND hChild,UINT Message,WPARAM wParam,LPARAM lParam);

/*****************************************************************
* Declaration des variables globales
*
*****************************************************************/

HINSTANCE hInst;
HWND hMDIFrame; // Handle de la fenêtre principale
HWND hMDIClient; // Handle de la zone client
HWND hMDIChild; // Handle de la fenêtre fille

/*****************************************************************
* Point d'entrée de l'application
*
*****************************************************************/

int WINAPI WinMain (HINSTANCE hThisInstance, HINSTANCE hPrevInstance,
                    LPSTR lpszArgument, int nFunsterStil)
{
    HWND hwnd;
    MSG messages;
    WNDCLASSEX wincl;   
    hInst = hThisInstance;

    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = "MDI_Frame";
    wincl.lpfnWndProc = FrameProc;
    wincl.style = CS_DBLCLKS;
    wincl.cbSize = sizeof (WNDCLASSEX);
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;
    wincl.cbClsExtra = 0;
    wincl.cbWndExtra = 0;
    wincl.hbrBackground = GetSysColorBrush(COLOR_BACKGROUND);
   
    if (!RegisterClassEx (&wincl))
        return 0;
   
    wincl.lpszClassName = "MDI_Child";
    wincl.lpfnWndProc = ChildProc;
    wincl.style = CS_DBLCLKS;
    wincl.hbrBackground = GetSysColorBrush(COLOR_BTNFACE);
   
    if (!RegisterClassEx (&wincl))
        return 0;
   
    hMDIFrame = CreateWindowEx (0, "MDI_Frame", "RobotSim",
           WS_OVERLAPPEDWINDOW|WS_CLIPCHILDREN,
           CW_USEDEFAULT, CW_USEDEFAULT, 544, 375,
           HWND_DESKTOP, NULL, hThisInstance, NULL);

    ShowWindow (hMDIFrame, nFunsterStil);
    UpdateWindow(hMDIFrame);

    while (GetMessage(&messages, NULL, 0, 0))
    {
        TranslateMessage(&messages);
        DispatchMessage(&messages);
    }

    return messages.wParam;
}


/************************************************************************************
* Traitement des messages de la fenêtre principale
*
************************************************************************************/

LRESULT CALLBACK FrameProc(HWND hFrame, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch (message)
    {
        case WM_CREATE:
            CLIENTCREATESTRUCT ccs;
            MDICREATESTRUCT mcs;
           
            ccs.hWindowMenu  = NULL;
            ccs.idFirstChild = 0;
            hMDIClient = CreateWindowEx(WS_EX_CLIENTEDGE, "mdiclient", NULL,
            WS_CHILD|WS_CLIPCHILDREN|WS_VISIBLE,
            CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT,
            hFrame, NULL, hInst, (LPVOID)&ccs);

            mcs.szTitle = "Nom de fenetre fille";
            mcs.szClass = "MDI_Child";
            mcs.hOwner  = hInst;
            mcs.x = mcs.y = CW_USEDEFAULT;
            mcs.cx = mcs.cy = 300;
            mcs.style = MDIS_ALLCHILDSTYLES;

            hMDIChild = (HWND)SendMessage(hMDIClient, WM_MDICREATE, 0, (LONG)&mcs);
            break;
        case WM_SIZE:
            MoveWindow(hMDIClient, 0, 0, LOWORD(lParam), HIWORD(lParam), TRUE);
            break;
        case WM_DESTROY:
            PostQuitMessage (0);
            break;
        default:
            return DefFrameProc(hFrame, hMDIClient, message, wParam, lParam);
    }
    return 0;
}

/************************************************************************************
* Traitement des messages de la fenêtre fille
*
************************************************************************************/

LRESULT CALLBACK ChildProc(HWND hChild, UINT Message, WPARAM wParam, LPARAM lParam)
{
   HWND button;
   switch(Message)
   {
      case WM_CREATE:
          button = CreateWindow(
          "BUTTON", "Class Options",
          BS_LEFT|BS_PUSHBUTTON| WS_VISIBLE| WS_CHILD,
          10, 10, 105, 100,
          hChild, NULL, hInst, NULL);

          break;
      case WM_CLOSE:
          MessageBox(hChild,"Ben pourquoi la femer ???\nElle est bien là !","Bah pourquoi ???",
              MB_OK|MB_ICONEXCLAMATION);
          DestroyWindow(hChild);
          break;
   }
   return DefMDIChildProc(hChild, Message, wParam, lParam);
}


jeudi 13 juillet 2006 à 17:43:49 | Re : Les MDI , c'est que pour les documents text? (NO MFC !!!)

rompelstilchen

super merci
je voulais faire des mdi opengl(entre autres)

jeudi 13 juillet 2006 à 23:45:22 | Re : Les MDI , c'est que pour les documents text? (NO MFC !!!)

rompelstilchen

juste une question

je ne comprends toujours pas ce qui ne fonctionnait pas dans mon code??



(en tout cas merci, je ne savais pas que certains avait le courage de se tapper le code de qqun d'autre pour le faire fonctionner
un grand merci Gaga ;)   )

vendredi 14 juillet 2006 à 10:01:29 | Re : Les MDI , c'est que pour les documents text? (NO MFC !!!)

gagah1

Membre Club
Comme je viens de dire, ton code est en desordre. Essaie de proceder étape par étape. Ce que tu as oublié le plus essentiel c'est la création de la fenetre MDI :
hMDIChild = (HWND)SendMessage(hMDIClient, WM_MDICREATE, 0, (LONG)&mcs);

vendredi 14 juillet 2006 à 11:28:14 | Re : Les MDI , c'est que pour les documents text? (NO MFC !!!)

rompelstilchen

mais j'utilise : /* hMDIChild = CreateWindowEx( WS_EX_TOOLWINDOW, "MDI Child", "Tools", WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW, // Ne pas oublier le WS_CHILD 0, 0, 200, 150, hMDIClient, NULL, hInst, 0);*/ c'est en commentaire, mais même sans commentaires, ça ne le fait pas, il cree le child mais le push button (décommenté ;) ) n'apparaisait pas.j'imagine qu'il faut d'office faire un send message. merci p ton aide :)

vendredi 14 juillet 2006 à 11:28:15 | Re : Les MDI , c'est que pour les documents text? (NO MFC !!!)

rompelstilchen

mais j'utilise : /* hMDIChild = CreateWindowEx( WS_EX_TOOLWINDOW, "MDI Child", "Tools", WS_CHILD | WS_VISIBLE | WS_OVERLAPPEDWINDOW, // Ne pas oublier le WS_CHILD 0, 0, 200, 150, hMDIClient, NULL, hInst, 0);*/ c'est en commentaire, mais même sans commentaires, ça ne le fait pas, il cree le child mais le push button (décommenté ;) ) n'apparaisait pas.j'imagine qu'il faut d'office faire un send message. merci p ton aide :)


1 2

Cette discussion est classé dans : text, fenetre, mfc, mdi, documents


Répondre à ce message

Sujets en rapport avec ce message

taille et position fenetre mfc mdi visual c++ [ par sofbboy ] Bonjour à tous, Je suis en train de faire une appli mdi mfc. Je cherche à changer la taille et la position des fentres que je crée. Je crée en fait 2 [sans MFC] detruire fenetre fille [ par sacksith ] Bonjour,Après avoir déclaré une nouvelle classe, WINDCLASSEX, je crée une fenêtre HWND FentreFille=CreateWindowEx(avec la nouvelle classe)ok tout va b mdi menu contextuel [ par agora_13 ] Bonjour,J'ai une application contenant une fenetre mere et 2 fenetres filles (childframe). J'ai un probleme au niveau de l'affichage des clics droits. MDI avec MFC [ par sebthieti ] J'aimerais tout simplement savoir quelle fonction utiliser pour ouvrir une fenetre fille.Merci Iconifier ou minimiser une fenetre en VC++ (Avec MFC de preference) [ par JayJay91 ] Bonjour a tous !!J'ai une petite question je voudrais savoir comment minimiser une fenetre en icone à coté de l'horloge .. exemple d'application : MSN Prog Win32 sans MFC affichant plusieurs feuilles non MDI [ par LaPatoshe ] SalutJ'ai créé un programme de base affichant une feuille sans utiliser les MFC. J'ai donc 2 Procédures:_ La principale: int WINAPI WinMain (HINSTANCE Fenetre Mediaplayer [ par aghrora ] @ghor@Quelqu'un sait-il comment les petits bilous font pour faire une fenetre comme celle de media player:- Est-ce du flash dans une fenetre mfc- Que MFC, SetWindowRgn... [ par nobpn ] Bonjour a tous,Actuellement etudiant, j'ai un projet à developper sous Visual C++ en utilisant les MFC.Existe il un moyen pour changer la forme des fe Graph sous MFC [ par 69lion69 ] Salut c un petit soucis la dessus :j'utilise ce morceau de code pour afficher un pixel pour afficher parla suite des lignes mais le prob n'est pas le debutant mfc [ par orj ] Je voudrais creer une fenetre a partir dune autre fenetre, pour cela le veux utiliser la fonction create de la classe CWindow mais pour cela il me fau


Nos sponsors

Sondage...

CalendriCode

Décembre 2008
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,328 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.