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 :

création dynamique d'objet, projet win32


Sujet :

MFC

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    163
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 163
    Points : 80
    Points
    80
    Par défaut création dynamique d'objet, projet win32
    bonjour tout le monde
    je cherche un exemple de source qui créerai un bouton ou un composant quelconque dynamiquement.
    merci

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    Salut,

    tiens, un petit exemple vite fait pour illustrer quelques concepts (Fenetre, Menu, Edit, et Boutton).
    Ne réagissent que le menu quitter et le boutton, le reste est à faire...

    Si tu as besoins de précisions, n'hésite pas
    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
    #define ID_ABOUT   40000
    #define ID_AIDE    40001
    #define ID_QUIT    40002
    #define ID_EDIT    40003
    #define ID_BUTTON  40004
     
    HINSTANCE ghInstance;
     
    LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
    {
         HDC         hdc ;
    	 PAINTSTRUCT ps ;
    	 HMENU	hMenu;
    	 HWND edit, but;
     
         switch (message)
         {
    		 case WM_CREATE:
    			  hMenu = CreateMenu();
    			  AppendMenu (hMenu, MF_SEPARATOR, 0,           NULL) ;
    			  AppendMenu (hMenu, MF_STRING, ID_ABOUT,  TEXT ("À propos de...")) ;
     			  AppendMenu (hMenu, MF_STRING, ID_AIDE,   TEXT ("Aide...")) ;
    			  AppendMenu (hMenu, MF_STRING, ID_QUIT, TEXT ("Quitter")) ;
    			  SetMenu(hwnd,hMenu);
    			  edit = CreateWindowEx(0, "EDIT", "", WS_VISIBLE|WS_CHILD| WS_BORDER|ES_WANTRETURN|ES_MULTILINE|ES_AUTOHSCROLL|ES_AUTOVSCROLL,  20, 50, 200, 40, hwnd, (HMENU)ID_EDIT, ghInstance, NULL);
    			  but = CreateWindowEx(0, "BUTTON", "Appuyer ici", WS_VISIBLE|WS_CHILD| WS_BORDER, 20, 100, 200, 40, hwnd, (HMENU)ID_BUTTON, ghInstance, NULL);return 0 ;
    		 case WM_PAINT :
    			  hdc = BeginPaint (hwnd, &ps) ;
    			  TextOut (hdc, 20, 10, "test", 4);
    			  EndPaint (hwnd, &ps) ;
    			  return 0 ;
    		 case WM_DESTROY :
    			  PostQuitMessage (0) ;
    			  return 0 ;
    	     case WM_COMMAND:
    		      switch (LOWORD (wParam))
    			  {
    		          case ID_QUIT:
    						PostQuitMessage (0) ;
    						return 0 ;
    				  case ID_BUTTON :
    						if (HIWORD (wParam) == BN_CLICKED)
    							MessageBox(NULL,"Appuyé","",MB_ICONSTOP);
    						return 0;
    			  }
              break ;
     
         }
         return DefWindowProc (hwnd, message, wParam, lParam) ;
    }
     
     
    int APIENTRY WinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPSTR     lpCmdLine,
                         int       nCmdShow)
    {
    	 ghInstance = hInstance;
         static TCHAR nomApp[] = TEXT ("Démo") ;
         HWND         hwnd ;
         MSG          msg ;
         WNDCLASS     wndclass ;
     
         wndclass.style         = CS_HREDRAW | CS_VREDRAW ;
         wndclass.lpfnWndProc   = WndProc ;
         wndclass.cbClsExtra    = 0 ;
         wndclass.cbWndExtra    = 0 ;
         wndclass.hInstance     = hInstance ;
         wndclass.hIcon         = LoadIcon (NULL, IDI_APPLICATION) ;
         wndclass.hCursor       = LoadCursor (NULL, IDC_ARROW) ;
         wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
         wndclass.lpszMenuName  = NULL ;
         wndclass.lpszClassName = nomApp ;
     
         if (!RegisterClass (&wndclass))  
         {
              MessageBox (NULL, TEXT ("Nt ou supérieur uniquement"), nomApp, MB_ICONERROR) ;
              return 0 ;
         }
     
    	 hwnd = CreateWindowEx(WS_EX_TOPMOST | WS_EX_TOOLWINDOW, nomApp,"",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,CW_USEDEFAULT,250, 250, NULL,NULL,hInstance,NULL);
     
         ShowWindow (hwnd, nCmdShow) ;
         UpdateWindow (hwnd) ;
         while (GetMessage (&msg, NULL, 0, 0))
         {
              TranslateMessage (&msg) ;
              DispatchMessage (&msg) ;
         }
         return msg.wParam ;
    }

  3. #3
    Expert éminent sénior

    Homme Profil pro
    pdg
    Inscrit en
    Juin 2003
    Messages
    5 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : pdg

    Informations forums :
    Inscription : Juin 2003
    Messages : 5 752
    Points : 10 683
    Points
    10 683
    Billets dans le blog
    3

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 31
    Points : 14
    Points
    14
    Par défaut creation de boutons
    Bonjour,

    j'ai compris la technique, j'ai déjà une fenetre main avec des ressources comme menu qui est lancé avec un CreateWindow.
    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
     
    int APIENTRY WinMain(HINSTANCE hIns, HINSTANCE hPrevIns, LPSTR lpCmdLine, int nCmdShow)
    //	***********************************************************************************
    {
        WNDCLASS	wc;
        HWND	hWnd;
        MSG 	msg;
    	int		i;
     
        trace("WinMain(hIns=0x%x, hPrevIns=0x%x, lpCmdLine=\"%s\", nCmdShow=0x%x)\n", hIns, hPrevIns, lpCmdLine, nCmdShow);
     
        wc.style = 0;
        wc.lpfnWndProc = WinUraWinProc;
        wc.cbClsExtra = 0;
        wc.cbWndExtra = 0;
        wc.hInstance = hIns;
        wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
        wc.hCursor = LoadCursor(NULL, IDC_ARROW);
        wc.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
        wc.lpszMenuName = "WinUraMenu";
        wc.lpszClassName = "WinUraWC";
     
        if (!RegisterClass(&wc))
        {
    		Message("RegisterClass(\"WinUra\") impossible\n");
    		return 0;
        }
     
     
    	wc.style = 0;
    	wc.lpfnWndProc = WinPhotoProc;
    	wc.cbClsExtra = 0;
    	wc.cbWndExtra = 0;
    	wc.hInstance = hIns;
    	wc.hIcon = NULL;
    	wc.hCursor = LoadCursor(NULL, IDC_ARROW);
    	wc.hbrBackground = (HBRUSH)GetStockObject(GRAY_BRUSH);
    	wc.lpszMenuName = "";
    	wc.lpszClassName = "Photo";
     
    	if (!RegisterClass(&wc))
    		{
    		return 0;
    		}
        hInst = hIns;
     
        hWnd = CreateWindow("WinUraWC",
    						"WinUra",
    						WS_OVERLAPPEDWINDOW,
    						CW_USEDEFAULT,
    						CW_USEDEFAULT,
    						CW_USEDEFAULT,
    						CW_USEDEFAULT,
    						NULL,
    						NULL,
    						hIns,
    						NULL);
     
        ShowWindow(hWnd, nCmdShow);
        UpdateWindow(hWnd);
    	ForceClientAreaSize(hWnd, 720, 578);
    J'ai bien une ptite creer les boutons à partir de la procedure
    qui est appelé au démarrage WinPhotoProc
    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
     
    LRESULT CALLBACK WinPhotoProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) 
     
    { 
     
    static HDC	hDesktopCompatibleDC=NULL;
    static HDC	hDesktopDC=NULL;
    static HWND		hDesktopWnd=NULL;
    //PAINTSTRUCT    ps ;
    //HDC            hdc ;
    int i, j=0 ;
     
    for(i=0;i<4;i++) PhotoWnd[i].Display();
     
    switch( message ) 
    	{ 
    	  case WM_LBUTTONDOWN: 
     
    		 for (i=0; i<4; i++)
    			{
     
    			 PhotoWnd[i].Display();
    				//		 if (!PhotoWnd[i].bRunning){  ca fige les 4 photos sinon ca plante l'appli et le pc
    				//			 PhotoWnd[i].Set() ;}
     
    			 if (PhotoWnd[i].hWnd==hWnd)
    				 {
    					if (!PhotoWnd[i].bRunning) return 0;
     
    					//On test si un image est déja stockée dans le fenêtre
    					if(PhotoWnd[i].pBuf==0)
    					{
    						//Il n'y en a pas, on capture
                            trace("Terminaison\n"); 
    						UranieStopMonitoring(hUranie, hWnd); 
    						UranieTerm(hUranie);
    						PhotoWnd[i].Save(); 
    						PhotoWnd[i].bRunning=false;
     
    						//Active le monitoring sur la première fenêtre libre
    						i=-1;
    						do{i++;}while((PhotoWnd[i].pBuf!=0)&&(i<4));
                            PhotoWnd[i].Set();
    					}
    					else
    					{
    						//Il y en a une, on vide pBuf;
    						delete [] PhotoWnd[i].pBuf;
    						PhotoWnd[i].pBuf=0;
    						PhotoWnd[i].Set();                        
    					}
     
    				 }
    			}
    		 return 0; 
     
     
    /*		case WM_ACTIVATE: 
    			if (wParam == WA_CLICKACTIVE) 
    			{ 
    				for (i=0; i<4; i++) 
    				{ 
     
    					if (PhotoWnd[i].hWnd==(HWND)lParam) 
    					{ 
    						if (!PhotoWnd[i].bRunning) // fenetre non active 
    						{ 
    						hUranie = UranieInit(); 
    						UranieStartMonitoring(hUranie, hWnd); // je reactive 
    						} 
    					//alors c'est le handle de la fenetre activée 
    					} 
    				} 
    			} 
    		break;*/   /// G ESSAYE CA AUSSI
     
    	} 
     
    return DefWindowProc( hWnd, message, wParam, lParam ); 
    }
    une autre : à quoi correspond la valeur du #define ID_BUTTON 40004

    merci

  5. #5
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Points : 16 075
    Points
    16 075
    Par défaut
    le define permet d'affecter un identifiant à un controle

    pour créer les boutons, il faut le faire pour le message WM_CREATE de ta fenetre

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 31
    Points : 14
    Points
    14
    Par défaut creation de boutons
    Merci et à bientôt

Discussions similaires

  1. [GLScene] Création dynamique d'objet
    Par Matt2094 dans le forum Langage
    Réponses: 8
    Dernier message: 09/05/2010, 13h28
  2. Création dynamique d'objets
    Par Ensias dans le forum Langage
    Réponses: 4
    Dernier message: 01/03/2007, 21h48
  3. [C#] Création dynamique d'objets
    Par Gloups dans le forum Windows Forms
    Réponses: 7
    Dernier message: 16/08/2006, 01h52
  4. Création dynamique d'objets ?
    Par Arthur A. dans le forum C++
    Réponses: 6
    Dernier message: 15/06/2005, 23h55
  5. [Reflexivite]création dynamique d'objet et Héritage
    Par norkius dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 26/10/2004, 11h37

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