Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698

    [WIN32/C] Creare controlli a runtime

    Ogni tanto mi incasino con le interfacce in windows -.-'

    Ho un dialog che è in parte definito in un file di risorse, ed in parte deve essere costruito runtime. La parte risorse è ok, la parte runtime non riesco a visualizzarla. Ho ridotto all'osso il codice

    codice:
    //...
    DialogBox(TheInstance,MAKEINTRESOURCE(IDD_DIALOG1),0,guiDialogProc);
    //...
    
    BOOL CALLBACK guiDialogProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
    {
    	switch (uMsg)
    	{
    		case WM_INITDIALOG:
    		
    		return TRUE;	
    		break;
    
    		case WM_CREATE:
    		{
    			int i;
    			HANDLE hWndStatus;
    		
    			hWndStatus = CreateWindowEx( 
    
    						0L,                              
    						"EDIT",                 
    						"safa",                             
    						WS_CHILD | WS_BORDER | WS_VISIBLE,  
    						300, 300, 100, 100,              
    						hwnd,                            
    						NULL,                      
    						TheInstance,                           
    						NULL);                                    
    
    			if (hWndStatus == NULL)
    
    				MessageBox (NULL, "Status Bar not created!", NULL, MB_OK );
    
    			return TRUE;
    		}
    		break;
    
    		case WM_DESTROY:
    
    			DestroyWindow(hwnd);
    			PostQuitMessage(0);
    			return TRUE;
    			break;
    
    		case WM_CLOSE:
    			EndDialog(hwnd,0);
    			return TRUE;
    			break;
    
    		default: return FALSE;
    	}	
    	
    	return FALSE;
    }
    Nel dialog vengono visualizzati i controlli definiti nel resource e basta. Forse mi manca un passaggio. Io presumo che il link tra controllo creato e finestra che deve contenerlo avvenga tramite il passaggio di hwnd..ma probabilmente sbaglio. Cosa mi manca?

  2. #2
    Mi pare che tu debba anche mostrare il controllo appena creato con ShowWindow.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    Mm ho provato ma pare che non dipenda da quello

    Ho anche controllato un'altra cosa: ho lanciato il programma e sono andato a controllare cosa c'era dentro la finestra con spy++. Ci sono solo i controlli definiti nel resource.

  4. #4
    Attenzione,

    devi mettere il codice per la creazione del controllo nel messaggio WM_INITDIALOG e non in WM_CREATE:

    codice:
    ...
    ...
    #define ID_MYEDIT 101
    ...
    ...
    BOOL CALLBACK DlgProc (HWND hDlg, UINT message, 
                                WPARAM wParam, LPARAM lParam)
    {
    	static HANDLE hWndStatus;
        HINSTANCE hInstance;
    
         switch (message)
         {
    	 case WM_CREATE:
    
            hInstance = ((LPCREATESTRUCT) lParam)->hInstance;
    		 return TRUE;
    
         case WM_INITDIALOG :
    		hWndStatus = CreateWindowEx( 
    						0L,                              
    						TEXT("EDIT"),                 
    						TEXT(""),                             
    						WS_CHILD | WS_VISIBLE | WS_BORDER,  
    						0,0,50,50,
    						hDlg,                            
    						(HMENU)ID_MYEDIT,                      
    						NULL, /*hInstance,*/                           
    						NULL); 
    
              return TRUE ;
             
         case WM_COMMAND :
              switch (LOWORD (wParam))
              {
              case IDOK :
              case IDCANCEL :
                   EndDialog (hDlg, 0) ;
                   return TRUE ;
              }
              break ;
         }
         return FALSE ;
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2003
    Messaggi
    698
    Grazie Vincenzo il problema era proprio quello

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.