begin process at 2012 05 28 13:17:55
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

API

 > 

Application MDI


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Application MDI

mercredi 6 juillet 2005 à 13:03:28 | Application MDI

LordBob

Membre Club
Bonjour a tous,
voila j'essaie de créé ma première application MDI, mais j'ai beaucoup de mal, surtout que je n'ai pas trouvé de tutorial sur le net, et que les quelques codes que j'ai vu ne m'ont pas trop aidé .
Bref j'ai donc ecrit ce code:

LRESULT CALLBACK ChildProc(HWND hWnd, UINT mes, WPARAM wParam, LPARAM lParam)
{
   switch(mes)
   {
      case WM_CREATE:
         CreateWindowEx(WS_EX_CLIENTEDGE, "EDIT", "", WS_CHILD|WS_VSCROLL|ES_MULTILINE|WS_VISIBLE|ES_AUTOVSCROLL|ES_WANTRETURN, 0, 0, 0, 0, hWnd, NULL, hInst, NULL);
         ShowWindow(hWnd, SW_SHOWNORMAL);
         SetFocus(hWnd);
         return TRUE;

      default:
         return DefWindowProc(hWnd, mes, wParam, lParam);
   }
}

// fonction de la fenetre
LRESULT CALLBACK MainProc(HWND hWnd, UINT mes, WPARAM wParam, LPARAM lParam)
{
   switch(mes)
   {
      // creation de la fenetre
      case WM_CREATE:
         // configuration fils
         CLIENTCREATESTRUCT ccs;
         ccs.hWindowMenu = NULL;
         ccs.idFirstChild = 200;
         clientHwnd = CreateWindowEx(0, "MDICLIENT", NULL, WS_CHILD|WS_CLIPCHILDREN|WS_VISIBLE|WS_HSCROLL|WS_VSCROLL, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, hWnd, (HMENU)NULL, hInst, (void*)&ccs);

         // definition classe du fils
         WNDCLASSEX clientWnd;
         clientWnd.cbClsExtra = 0;
         clientWnd.cbSize = sizeof(WNDCLASSEX);
         clientWnd.cbWndExtra = 0;
         clientWnd.hbrBackground = GetSysColorBrush(COLOR_BACKGROUND);
         clientWnd.hCursor = LoadCursor(NULL, IDC_ARROW);
         clientWnd.hIcon = LoadIcon(NULL, IDI_APPLICATION);
         clientWnd.hIconSm = clientWnd.hIcon;
         clientWnd.hInstance = hInst;
         clientWnd.lpfnWndProc = ChildProc;
         clientWnd.lpszClassName = "Editor";
         clientWnd.lpszMenuName = NULL;
         clientWnd.style = CS_DBLCLKS|CS_PARENTDC;
         RegisterClassEx(&clientWnd);
         return TRUE;

      // demande de fermeture application
      case WM_CLOSE:
         if(MessageBox(hWnd, "Etes-vous sur de vouloir quitter ?", "Quitter ?", MB_ICONINFORMATION|MB_YESNO) == IDYES)
            PostQuitMessage(0);
         return 0;

      // selection item
      case WM_COMMAND:
      {
         switch(wParam)
         {
            // Quitter
            case ID_MAIN_QUITTER:
               // demande confirmation
               if(MessageBox(hWnd, "Etes-vous sur de vouloir quitter le programme ?", "Quitter ?", MB_ICONINFORMATION|MB_YESNO) == IDYES)
                        PostQuitMessage(0); // fin du programme
               return TRUE;

            // ancien prog
            case ID_MAIN_OPEN:
               DialogBox(hInst, MAKEINTRESOURCE(IDD_MAIN), hWnd, OpenProc);
               return TRUE;

            // menu "A propos"
            case ID_MAIN_INFO:
               DialogBox(hInst, MAKEINTRESOURCE(IDD_INFO), hWnd, NULL);
               return TRUE;

            // nouveau projet
            case ID_MAIN_NEW:
               if(!CreateMDIWindow("Editor", "Untitled*", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, clientHwnd, hInst, NULL))
                  MessageBox(hWnd, "Erreur", "Erreur", MB_OK);
               return TRUE;
         }
      }

      default:
         return DefWindowProc(hWnd, mes, wParam, lParam);
   }
}

// fonction WinMain (point d'entrée du programme)
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
   // definition variable
   WNDCLASSEX fenetre; // class de notre fenetre
   HWND f_hWnd; // HWND de la fenetre
   MSG msg; // variable de message

   hInst = hInstance; // hinstance

   // definition de notre class fenetre
   fenetre.cbSize = sizeof(WNDCLASSEX);
   fenetre.style = CS_HREDRAW | CS_VREDRAW;
   fenetre.lpfnWndProc = MainProc;
   fenetre.cbClsExtra = 0;
   fenetre.cbWndExtra = 0;
   fenetre.hInstance = hInstance;
   fenetre.hIcon = LoadIcon(NULL, IDI_APPLICATION);
   fenetre.hCursor = LoadCursor(NULL, IDC_ARROW);
   fenetre.hbrBackground = reinterpret_cast<HBRUSH>(COLOR_WINDOW+2);
   fenetre.lpszMenuName = MAKEINTRESOURCE(IDR_MENU);
   fenetre.lpszClassName = "std";
   fenetre.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
   RegisterClassEx(&fenetre); // enregistrement de la class

   // creation de la fenetre
   f_hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, "std", "AccessGen", WS_OVERLAPPEDWINDOW, 0, 0, 800, 600, NULL, NULL, hInstance, NULL);
   ShowWindow(f_hWnd, SW_SHOW);

   SetFocus(f_hWnd); // donne focus

   // reception des messages
   while(GetMessage(&msg, NULL, 0, 0) == TRUE)
   {
      TranslateMessage(&msg);
      DispatchMessage(&msg);
   }

   return 0; // fin app
}

cela m'inidque que la fenetre fils est créé, mais je ne vois rien !
est-ce que quelqu'un peut me dire pourquoi?
Merci par avance
Bob...

"La chance accorde ses faveur aux esprits avertis..."
mercredi 6 juillet 2005 à 18:54:17 | Re : Application MDI

vecchio56

Administrateur CodeS-SourceS
Réponse acceptée !
Tu ne donne pas de taille pour clientHwnd, le système lui met sans doute 0. Ajoute ces lignes dans MainProc:
case WM_SIZE:
  SetWindowPos(clientHwnd, 0, 0, 0, LOWORD(lParam), HIWORD(lParam), SWP_NOMOVE);
  return 0;
(WM_SIZE est envoyé aussi à la création, donc ne change que ca)

Et puis ajoute le style WS_CLIPCHILDREN à ta fenêtre principale


mercredi 6 juillet 2005 à 19:21:26 | Re : Application MDI

LordBob

Membre Club
effectivement ca marche maintenant ! merci à toi.
par contre quand je met le style WS_CLIPCHILDREN bah la fenetre fils ne s'affiche pas !
Bob...

"La chance accorde ses faveur aux esprits avertis..."
mercredi 6 juillet 2005 à 19:33:18 | Re : Application MDI

vecchio56

Administrateur CodeS-SourceS
WS_CLIPCHILDREN pour la fenêtre principale (f_hWnd). Ca évitera juste le clignotement lors du redimentionnement
mercredi 6 juillet 2005 à 20:48:33 | Re : Application MDI

LordBob

Membre Club
oui mais ca me ne m'affiche pas le fils !
bref on s'en fou, vu que ta répondu a ma question et que tout marche comme je veux ! merci a toi !
Bob...

"La chance accorde ses faveur aux esprits avertis..."


Cette discussion est classée dans : fenetre, hwnd, ws, return, clientwnd


Répondre à ce message

Sujets en rapport avec ce message

Dll Visual Aide [ par TheMaster ] Salut!j'ai un probleme, j'ai créer un logiciel permettant de visualiser des images.Les images sont stocke en ressource dans un dll.Mais je n'arrive pa rafraichissement fenetre, ou creation de fenetre dans fenetre [ par kuruma ] Bonjour qq'un pourrait il m'indiquer comment créer une fenetre dans une autre fenetre, ou alors comment allouer une zone de ma fenetre principale, en Fenetre fille [ par mogwai93 ] Bonjour, je cherche à inserer dans une zone d'une fenetre, une autre fenetre avec scrollbar. sauf que, j'ai des resultats bizarres : --------- LRESU Ajout d'une fenetre supplémentaire en plus de la fenetre principale dans un programme en win32 [ par djin94 ] Bonjour à tous. Je butte actuellement sur un problème. Je souhaite en fait ajouter une fenetre transparente avec CreateWindowEx( ) pour créer une OSD Tabulation dans les champs d'une fenetre [ par billy5938 ] Bonjour,Je veux pouvoir parcourir les champs d'édition (ou même des checkBox) d'une fenetre. En utilisant la methode IsDialogMessage dans la boucle de Opacité d'une EditBox [ par Parmesan ] Bonjour,Voila j'ai un petit problème que je n'arrive pas à résoudre.Je travaille sur Dev c++ en Windows Applications, en utlisant les api win32Je poss Problème avec fichier manifest [ par Sceyllia ] Bonjour à tous, J'aurais besoin de l'avis de connaisseurs en c/c++ pour m'éclairer sur le soucis que j'ai depuis quelques semaines concernant ce morc TRANSPARENTE [ par kiki67100 ] Salut voila jai trouver un code mais une fenetre TRANSPARENTE http://files.codes-sources.com/fichier.aspx?id=9615&f=Main.cpp  mais le probleme se que Help Au secours [ par NAVIE ] Bonjour, j'écris ce message pour un problème que j'ai avec un de mes programmes. Je compile avec DevCpp Version 4.9.9.2 et j'ai crée deux fichiers sou Remplir un combobox win32 api [ par ssefyou ] Bonsoir , comment remplir un combobox sous winapi en c ? j'ai cree un combo en utilisant la fonction createWindowEx() mais je n'arrive pas à le rempl


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,295 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales