|
Trouver une ressource
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)
Informations & options pour cette discussion
|
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
|
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
|
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
|
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 :)
|
|
|
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
Livres en rapport
|
Téléchargements
Logiciels à télécharger sur le même thème :
|