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

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.

111768
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
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.
Strumento di WM_SIZE CRect sulla barra di stato sulla barra degli strumenti della barra di stato barra di stato

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 111768 - Ultima revisione: 02/04/2014 09:41:23 - Revisione: 3.1

  • Microsoft Foundation Class Library 4.2
  • kbnosurvey kbarchive kbmt kbmfcctrlbar kbprb kbtoolbar kbuidesign KB111768 KbMtit
Feedback