PRB: Creazione di barre di controllo non è visibile dopo la chiamata

Traduzione articoli Traduzione articoli
Identificativo articolo: 111768 - Visualizza i prodotti a cui si riferisce l?articolo.
Questo articolo è stato archiviato. L?articolo, quindi, viene offerto ?così come è? e non verrà più aggiornato.
Espandi tutto | Chiudi tutto

In questa pagina

Sintomi

Una barra di controllo non è immediatamente visibile dopo una chiamata a create. La barra di controllo diventa visibile solo quando viene ridimensionata la finestra padre (o minimized\maximized). Questo comportamento è true per tutte le classi framework incorporati derivate da CControlBar:
   CDialogBar
   CToolBar
   CStatusBar
				

Cause

Una barra di controllo viene inizialmente inserita nella posizione (0,0) con dimensioni (0,0) in modo che il frame principale può controllare le dimensioni e posizione. Le dimensioni e posizione vengono ricalcolate quando viene effettuata una chiamata a RecalcLayout. Se una chiamata viene effettuata da creare, quindi la barra di controllo non sarà visibile fino a quando RecalcLayout viene chiamato per la finestra cornice padre. La barra di controllo diventa visibile quando viene ridimensionata la finestra cornice principale, poiché CFrameWnd dispone di un gestore WM_SIZE chiama RecalcLayout.

Risoluzione

Per risolvere questo problema, utilizzare uno dei seguenti:

  • Se la barra di controllo è sempre intende essere collegata quando si crea la finestra cornice, quindi creare la barra di controllo una volta in OnCreate il gestore messaggi per la finestra cornice. Questo potrebbe applicare alla finestra cornice principale di un'applicazione MDI (CMDIFrameWnd) o di SDI (CFrameWnd) o a una finestra del figlio MDI (CMDIChildWnd).
  • Se il controllo deve essere creato dinamicamente (per esempio, una barra degli strumenti che estrazioni remota solo in determinate circostanze), effettuare una chiamata a RecalcLayout della finestra cornice padre affinché la barra di controllo per essere ridimensionate correttamente e disegnato.

Informazioni

Esistono due segmenti di codice riportato di seguito che illustrano come creare un CDialogBar collegato a un oggetto CMDIChildWnd. Il primo esempio creato un CDialogBar non appena viene creata la finestra figlio (che significa, la finestra figlio sempre avrà barra della finestra di dialogo). Nel secondo esempio viene illustrata una funzione che verrà correttamente creare e visualizzare una barra di finestra di dialogo in qualsiasi momento.

Codice di esempio

   /* Compile options needed: None
      Sample 1 - Override OnCreate.
   
      Note that the dialog template is called IDD_CHILDBAR
      and that CMyMDIChild has a member variable declaration:
      CDialogBar m_dlgbar;
   */ 
   int CMyMDIChild::OnCreate(LPCREATESTRUCT lpCreateStruct)
   {
        if (CMDIChildWnd::OnCreate(lpCreateStruct) == -1)
             return -1;
   
       m_dlgbar.Create(this,IDD_CHILDBAR,CBRS_TOP,115);
   
        return 0;
   }
   
   /*
     Sample 2 - Creating a dialog bar at any time.
     Note that the dialog template is called IDD_CHILDBAR
     and that CMyMDIChildWnd has a member variable declaration:
     CDialogBar *m_pdlgbar;
   */ 
   void CMyMDIChild::CreateDialogBar()
   {
       m_pDlgBar = new CDialogBar();
       m_pDlgBar->Create(this,IDD_CHILDBAR,CBRS_TOP,115);
       RecalcLayout();
   }
				
Poiché si assegnano un oggetto CDialogBar, è necessario chiamare m_pDlgBar eliminazione quando si chiude l'applicazione o non vi sarà una perdita di memoria.

Proprietà

Identificativo articolo: 111768 - Ultima modifica: martedì 4 febbraio 2014 - Revisione: 3.1
Le informazioni in questo articolo si applicano a:
  • Microsoft Foundation Class Library 4.2 alle seguenti piattaforme
    • Microsoft Visual C++ 1.0 Professional Edition
    • Microsoft Visual C++ 1.5 Professional Edition
    • Microsoft Visual C++ 1.51
    • Microsoft Visual C++ 1.52 Professional Edition
    • Microsoft Visual C++ 2.0 Professional Edition
    • Microsoft Visual C++ 2.1
    • Microsoft Visual C++ 4.0 Standard Edition
Chiavi: 
kbnosurvey kbarchive kbmt kbmfcctrlbar kbprb kbtoolbar kbuidesign KB111768 KbMtit
Traduzione automatica articoli
Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell?utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell?utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.
Clicca qui per visualizzare la versione originale in inglese dell?articolo: 111768
LE INFORMAZIONI CONTENUTE NELLA MICROSOFT KNOWLEDGE BASE SONO FORNITE SENZA GARANZIA DI ALCUN TIPO, IMPLICITA OD ESPLICITA, COMPRESA QUELLA RIGUARDO ALLA COMMERCIALIZZAZIONE E/O COMPATIBILITA' IN IMPIEGHI PARTICOLARI. L'UTENTE SI ASSUME L'INTERA RESPONSABILITA' PER L'UTILIZZO DI QUESTE INFORMAZIONI. IN NESSUN CASO MICROSOFT CORPORATION E I SUOI FORNITORI SI RENDONO RESPONSABILI PER DANNI DIRETTI, INDIRETTI O ACCIDENTALI CHE POSSANO PROVOCARE PERDITA DI DENARO O DI DATI, ANCHE SE MICROSOFT O I SUOI FORNITORI FOSSERO STATI AVVISATI. IL DOCUMENTO PUO' ESSERE COPIATO E DISTRIBUITO ALLE SEGUENTI CONDIZIONI: 1) IL TESTO DEVE ESSERE COPIATO INTEGRALMENTE E TUTTE LE PAGINE DEVONO ESSERE INCLUSE. 2) I PROGRAMMI SE PRESENTI, DEVONO ESSERE COPIATI SENZA MODIFICHE, 3) IL DOCUMENTO DEVE ESSERE DISTRIBUITO INTERAMENTE IN OGNI SUA PARTE. 4) IL DOCUMENTO NON PUO' ESSERE DISTRIBUITO A SCOPO DI LUCRO.

Invia suggerimenti

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com