Jak inicializovat podřízené ovládací prvky v odvozené CDialogBar

Překlady článku Překlady článku
ID článku: 185672 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Souhrn

Při vytváření jednoduchého CDialogBar, například jedna s pouze CButtons podobné MFC jeho náhledu není nutné odvodit z CDialogBar, protože nadřazený CControlBar přijímá oznamovací zprávy z libovolné podřízené ovládací prvky.

Však z složitější CDialogBar, pravděpodobně rozevíracím seznamem, stromu nebo ovládací prvek ActiveX může být užitečné odvodit z CDialogBar poskytují inicializace podřízené ovládací prvky.

Protože ClassWizard nepodporuje odvození třídy z CDialogBar, Tento článek obsahuje kroky potřebné k vytvoření třídy z CDialog a pak "převést" Třída CDialogBar.

Další informace

Spustit vytvořit třídy CDialog s podřízené ovládací prvky, které chcete použít. Třída CDialog transformaci do třídy CDialogBar pomocí devíti následující kroky:

  1. Změnit základní třídy z CDialog CDialogBar v deklaraci třídy. Nezapomeňte také změnit základní třídy v souboru cpp BEGIN_MESSAGE_MAP.
  2. Změnit konstruktor v h a cpp soubory. Také provést změnu DoDataExchange(). Níže jsou uvedeny tři položky změnit.

    Změnit následující z
          CMyDlgBar (CWnd* pParent = NULL);   // standard constructor
    
          CMyDlgBar:: CMyDlgBar (CWnd* pParent /*=NULL*/)
             : CDialog(CMyDlgBar::IDD, pParent)
          {
             ...
    
          void CMyDlgBar::DoDataExchange(CDataExchange* pDX)
          {
             CDialog::DoDataExchange(pDX);
             ...
    					
    následující:
          CMyDlgBar ();   // standard constructor
    
          CMyDlgBar:: CMyDlgBar ()
          {
             ...
    
          void CMyDlgBar::DoDataExchange(CDataExchange* pDX)
          {
             CDialogBar::DoDataExchange(pDX);
             ...
    					
    klíč transformace je převod virtuální členské funkce OnInitDialog() metody zprávy mapovány WM_INITDIALOG změnou metody OnInitDialog a přidáním popisovač ON_MESSAGE(). Pravděpodobně nemáte přepsání OnInitDialog(). Pokud tomu tak není, přidejte jedno před pokračováním.
  3. Odebrat "virtuální BOOL OnInitDialog();" z hlavičky třída a přidání "afx_msg LONG OnInitDialog (UINT, LONG);" v jeho místo. Například:
          class CMyDlgBar : public CDialogBar
          {
             ...
          // Implementation
          protected:
    
             // Generated message map functions
             //{{AFX_MSG(CMyDlgBar)
             virtual BOOL OnInitDialog();                // <-Remove this line.
             //}}AFX_MSG
    
             afx_msg LONG OnInitDialog ( UINT, LONG );   // <-Add this line.
             DECLARE_MESSAGE_MAP()
          };
    						
    nyní, proveďte odpovídající změny v části implementace třídy.
  4. Přidat "ON_MESSAGE (WM_INITDIALOG, OnInitDialog);" mapy zpráva v souboru .CPP implementace. Například:
          BEGIN_MESSAGE_MAP(CMyDlgBar, CDialogBar)
    
             //{{AFX_MSG_MAP(CMyDlgBar)
             ...
             //}}AFX_MSG_MAP
             ON_MESSAGE(WM_INITDIALOG, OnInitDialog )    // <-- Add this line.
          END_MESSAGE_MAP()
    						
    nyní, převést virtuální OnInitDialog() OnInitDialog() mapované zprávu.
  5. Aby převod OnInitDialog() následovně:
       Change the following:
    
          BOOL CMyDlgBar::OnInitDialog()
          {
             CDialog::OnInitDialog();   // <-- Replace this line:
                ...
    						
    následující:
    LONG CMyDlgBar::OnInitDialog ( UINT wParam, LONG lParam)
             {
                              // <-- with these lines. -->
    
                BOOL bRet = HandleInitDialog(wParam, lParam);
    
                if (!UpdateData(FALSE))
                {
                   TRACE0("Warning: UpdateData failed during dialog init.\n");
                }
                ...
    
                return bRet;
    						
    the CDialogBar třídy nemá virtuální OnInitDialog() a volání proto nefunguje. UpdateData nazývá podtřídy nebo inicializovat žádné podřízené ovládací prvky.
  6. Přesvědčte se, zda dialogové okno pole prostředku styly následující:
    Styl: podřízené
    Boarder: žádný
    Viditelné: Nekontrolovaná
    Znovu v tomto okamžiku vše má byly připojeny k transformaci z třídy CDialog třídy CDialogBar pracovat správně. Nyní vytvořit a použít ji.
  7. Přidat instanci CDialogBar odvozené třídy odvozené CframeWnd (obvykle nazývá CMainFrame). Například:
          class CMainFrame : public CFrameWnd
          {
              ...
              CMyDlgBar m_myDlgBar;
              ...
          };
    					
  8. Volání metody vytvoření pro m_myDlgBar proměnnou v metodě CFrameWnd::OnCreate() podobná následující:
          int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
          {
             ...
             if (!m_myDlgBar.Create(this, IDD_DLGBAR1, CBRS_LEFT,
                IDD_DLGBAR1))
             {
                TRACE0("Failed to create dialog bar\n");
                return -1;      // fail to create
             }
             ...
          }
    					
  9. Nakonec, pokud chcete podporovat dynamické ukotvení a změna velikosti CDialogBar přidejte následující řádky na konec CMainFrame::OnCreate():
          int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
          {
             ...
             m_myDlgBar.SetBarStyle(m_wndToolBar.GetBarStyle() |
                CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC);
             m_myDlgBar.EnableDocking(CBRS_ALIGN_ANY);
             DockControlBar(&m_myDlgBar);
    
             return 0;
          }

Odkazy

Další informace naleznete následujícím článku znalostní databáze Microsoft Knowledge Base:
99161Jak odvozena od třídy není uveden v ClassWizard

Vlastnosti

ID článku: 185672 - Poslední aktualizace: 21. listopadu 2006 - Revize: 3.1
Informace v tomto článku jsou určeny pro produkt:
  • Microsoft Foundation Class Library 4.2 na těchto platformách
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 6.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
    • Microsoft Visual C++ 6.0 Professional Edition
    • Microsoft Visual C++, 32-bit Learning Edition 6.0
Klíčová slova: 
kbmt kbhowto kbmfcctrlbar kbuidesign kbwizard KB185672 KbMtcs
Strojově přeložený článek
Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.
Projděte si také anglickou verzi článku:185672

Dejte nám zpětnou vazbu

 

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