Türetilmiş bir CDialogBar alt denetimlerde nasıl

Makale çevirileri Makale çevirileri
Makale numarası: 185672 - Bu makalenin geçerli olduğu ürünleri görün.
Hepsini aç | Hepsini kapa

Özet

Bir tek CButtons MFC'ın Baskı Önizleme'de benzer gibi bir basit CDialogBar oluştururken üst CControlBar herhangi bağımlı denetimleri bildirim iletileri alır, çünkü CDialogBar türetmek gerekli değildir.

Ancak, a?a?? aç?lan açılan kutu, ağaç görünümü veya ActiveX denetimi olabilir, bir daha karmaşık CDialogBar durumunda, alt denetimler için başlatma sağlamak için CDialogBar türetme yapıp yapmayacağınızı yararlı olabilir.

Bir sınıf CDialogBar türetmek ClassWizard desteklemediğinden, bu makalede, bir sınıf CDialog oluşturun ve "sınıfı için CDialogBar" için gereken adımlar gösterilmiştir.

Daha fazla bilgi

Başlatmak için <a0></a0>, kullanmak istediğiniz alt denetimleriyle CDialog sınıf oluşturun. CDialog sınıfı, dokuz aşağıdaki adımları kullanarak bir CDialogBar sınıf dönüştürebilirsiniz:

  1. Temel sınıfı, sınıf bildirimindeki CDialogBar için CDialog değiştirin. Ayrıca .cpp dosyasında BEGIN_MESSAGE_MAP bir taban sınıfta değiştirmek unutmay?n.
  2. .h ve .cpp dosyaları kurucusunu değiştirin. Aynı zamanda değişikliği için DoDataExchange() yapın. Aşağıda değiştirmek için üç öğelerdir.

    Aşağıdakini
          CMyDlgBar (CWnd* pParent = NULL);   // standard constructor
    
          CMyDlgBar:: CMyDlgBar (CWnd* pParent /*=NULL*/)
             : CDialog(CMyDlgBar::IDD, pParent)
          {
             ...
    
          void CMyDlgBar::DoDataExchange(CDataExchange* pDX)
          {
             CDialog::DoDataExchange(pDX);
             ...
    					
    aşağıdaki:
          CMyDlgBar ();   // standard constructor
    
          CMyDlgBar:: CMyDlgBar ()
          {
             ...
    
          void CMyDlgBar::DoDataExchange(CDataExchange* pDX)
          {
             CDialogBar::DoDataExchange(pDX);
             ...
    					
    dönüşümün WM_INITDIALOG eşlemeli ileti yöntemi sanal OnInitDialog() üye işlev dönüştürmeye OnInitDialog yöntemini değiştirerek ve ON_MESSAGE() işleyicisi ekleyerek anahtarıdır. Geçersiz kılma, OnInitDialog() sahip olmayabilirsiniz. Değilse, devam etmeden önce ekleyin.
  3. "Sanal BOOL OnInitDialog();"'ı kaldırın <a0>sınıf</a0> başlığındaki ve "afx_msg LONG OnInitDialog (UINT, LONG);" kendi yerinde. Örneğin:
          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()
          };
    						
    şimdi, sınıf uygulama bölümünde, karşılık gelen değişiklikleri yapın.
  4. "ON_MESSAGE (WM_INITDIALOG, OnInitDialog);" ekleme ileti eşlemesine .CPP uygulama dosyasında. Örneğin:
          BEGIN_MESSAGE_MAP(CMyDlgBar, CDialogBar)
    
             //{{AFX_MSG_MAP(CMyDlgBar)
             ...
             //}}AFX_MSG_MAP
             ON_MESSAGE(WM_INITDIALOG, OnInitDialog )    // <-- Add this line.
          END_MESSAGE_MAP()
    						
    şimdi, bu sanal OnInitDialog() için <a2>ileti eşlemeli</a2> OnInitDialog() dönüştürün.
  5. OnInitDialog() dönüştürme gibi olun:
       Change the following:
    
          BOOL CMyDlgBar::OnInitDialog()
          {
             CDialog::OnInitDialog();   // <-- Replace this line:
                ...
    						
    aşağıdaki:
    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 sınıfı, bir sanal OnInitDialog() yoktur ve bu nedenle, bir arama çalışmıyor. UpdateData için alt adlı veya herhangi bir alt denetimlerin başlatılamıyor.
  6. Iletişim kutusu kaynağın stilleri için aşağıdakilerden emin olun:
    Stil: alt
    Boarder: yok
    Görünür: denetlenmeyen
    Bu aşamada, her şey düzgün dönüşümün CDialog sınıfından CDialogBar sınıfına yapmak için yeniden. Şimdi oluşturun ve kullanın.
  7. Türetilmiş CDialogBar örneği (normalde CMainFrame de denir) CframeWnd türetilmiş sınıf ekleyin. Örneğin:
          class CMainFrame : public CFrameWnd
          {
              ...
              CMyDlgBar m_myDlgBar;
              ...
          };
    					
  8. CFrameWnd::OnCreate() yönteminde m_myDlgBar değişken için oluşturma yöntemi aşağıdakine benzer çağrı:
          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. Son olarak, dinamik olarak takma ve CDialogBar yeniden boyutlandırmasını isterseniz, CMainFrame::OnCreate() sonuna aşağıdaki satırları ekleyin:
          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;
          }

Referanslar

Daha fazla bilgi için, Microsoft Bilgi Bankası'ndaki makaleyi görüntülemek üzere aşağıdaki makale numarasını tıklatın:
99161Nasıl yapılır: ClassWizard listelenen Sınıf türetme yapıp yapmayacağınızı

Özellikler

Makale numarası: 185672 - Last Review: 21 Kasım 2006 Salı - Gözden geçirme: 3.1
Bu makaledeki bilginin uygulandığı durum:
  • Microsoft Foundation Class Library 4.2, Ne zaman ne ile kullanilir:
    • 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
Anahtar Kelimeler: 
kbmt kbhowto kbmfcctrlbar kbuidesign kbwizard KB185672 KbMttr
Machine-translated Article
ÖNEMLİ: Bu makale, bir kişi tarafından çevrilmek yerine, Microsoft makine-çevirisi yazılımı ile çevrilmiştir. Microsoft size hem kişiler tarafından çevrilmiş, hem de makine-çevrisi ile çevrilmiş makaleler sunar. Böylelikle, bilgi bankamızdaki tüm makalelere, kendi dilinizde ulaşmış olursunuz. Bununla birlikte, makine tarafından çevrilmiş makaleler mükemmel değildir. Bir yabancının sizin dilinizde konuşurken yapabileceği hatalar gibi, makale; kelime dağarcığı, söz dizim kuralları veya dil bilgisi açısından yanlışlar içerebilir. Microsoft, içeriğin yanlış çevrimi veya onun müşteri tarafından kullanımından doğan; kusur, hata veya zarardan sorumlu değildir. Microsoft ayrıca makine çevirisi yazılımını sıkça güncellemektedir.
Makalenin İngilizcesi aşağıdaki gibidir:185672

Geri Bildirim Ver

 

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