วิธีการควบคุมลูกใน CDialogBar ที่ได้รับการกำหนดค่าเริ่มต้น

การแปลบทความ การแปลบทความ
หมายเลขบทความ (Article ID): 185672 - ผลิตภัณฑ์ที่เกี่ยวข้องในบทความนี้
ขยายทั้งหมด | ยุบทั้งหมด

สรุป

เมื่อคุณสร้าง CDialogBar ปกติ เช่นเดียวกับ CButtons เท่านั้นที่คล้ายกับตัวอย่างก่อนการพิมพ์ของ MFC คุณไม่จำเป็นในการสืบทอดมาจาก CDialogBar เนื่องจากวัตถุแม่ของ CControlBar ได้รับข้อความแจ้งเตือนจากตัวควบคุมลูก

อย่างไรก็ตาม ในกรณีของการซับซ้อนมาก CDialogBar ซึ่งอาจมีกล่องคำสั่งผสมหล่นลง treeview หรือตัวควบคุม activex อาจเป็นประโยชน์ในการสืบทอดมาจาก CDialogBar เพื่อให้มีการเตรียมใช้งานตัวควบคุมลูก

เนื่องจาก ClassWizard ไม่สนับสนุนการ deriving คลาสที่จาก CDialogBar บทความนี้แสดงขั้นตอนจำเป็นใน การสร้างคลาสที่จาก CDialog แล้ว "แปลง" คลา CDialogBar

ข้อมูลเพิ่มเติม

เมื่อต้องการเริ่มออก สร้างคลาสที่ CDialog กับตัวควบคุมลูกที่คุณต้องการใช้ คุณสามารถแปลงคลา CDialog ลงในคลาสที่ CDialogBar โดยใช้ขั้นตอนการ nine ต่อไปนี้:

  1. เปลี่ยนเป็นคลาสพื้นฐานจาก CDialog ไป CDialogBar ในประกาศคลาส อย่าลืมไปยัง เปลี่ยนคลาพื้นฐานใน BEGIN_MESSAGE_MAP ในแฟ้ม.cpp
  2. เปลี่ยนตัวสร้างในแบบ.h และแฟ้ม.cpp นอกจากนี้ยัง ทำการเปลี่ยนแปลง DoDataExchange() ต่อไปนี้เป็นสามรายการการเปลี่ยนแปลง

    การเปลี่ยนแปลงต่อไปนี้จาก
          CMyDlgBar (CWnd* pParent = NULL);   // standard constructor
    
          CMyDlgBar:: CMyDlgBar (CWnd* pParent /*=NULL*/)
             : CDialog(CMyDlgBar::IDD, pParent)
          {
             ...
    
          void CMyDlgBar::DoDataExchange(CDataExchange* pDX)
          {
             CDialog::DoDataExchange(pDX);
             ...
    					
    เมื่อต้องการต่อไปนี้:
          CMyDlgBar ();   // standard constructor
    
          CMyDlgBar:: CMyDlgBar ()
          {
             ...
    
          void CMyDlgBar::DoDataExchange(CDataExchange* pDX)
          {
             CDialogBar::DoDataExchange(pDX);
             ...
    					
    คีย์การแปลงที่ถูกแปลงฟังก์ชันของสมาชิก OnInitDialog() เสมือนกับวิธีข้อความที่ถูกแมป WM_INITDIALOG โดยการเปลี่ยนวิธีการ OnInitDialog และ โดยการเพิ่มตัวจัดการ ON_MESSAGE() คุณอาจไม่มีการแทนเป็นของ OnInitDialog() ถ้า ไม่ เพิ่มก่อนดำเนินการต่อ
  3. "เสมือน BOOL OnInitDialog() การเอาออกจากส่วนหัวของคลา และเพิ่ม" afx_msg เวลานาน OnInitDialog (UINT ความยาว); "ในตำแหน่งนั้น ตัวอย่าง::
          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()
          };
    						
    ขณะนี้ ในส่วนใช้งานคลา ทำการเปลี่ยนแปลงที่สอดคล้องกัน
  4. เพิ่ม "ON_MESSAGE (WM_INITDIALOG, OnInitDialog);" การแมปข้อความในแฟ้มใช้งาน.CPP ตัวอย่าง::
          BEGIN_MESSAGE_MAP(CMyDlgBar, CDialogBar)
    
             //{{AFX_MSG_MAP(CMyDlgBar)
             ...
             //}}AFX_MSG_MAP
             ON_MESSAGE(WM_INITDIALOG, OnInitDialog )    // <-- Add this line.
          END_MESSAGE_MAP()
    						
    ขณะนี้ แปลง OnInitDialog() ที่เสมือนเป็น OnInitDialog() แมปข้อความ
  5. ทำการแปลง OnInitDialog() เป็นดังนี้:
       Change the following:
    
          BOOL CMyDlgBar::OnInitDialog()
          {
             CDialog::OnInitDialog();   // <-- Replace this line:
                ...
    						
    เมื่อต้องการต่อไปนี้:
    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;
    						
    คลา CDialogBar ไม่มีการ OnInitDialog() เสมือน และดังนั้น กำลังเรียกอย่างใดอย่างหนึ่งไม่ทำงาน UpdateData ถูกเรียกเมื่อต้องการระดับชั้นย่อย หรือเตรียมใช้งานตัวควบคุมลูก
  6. ตรวจสอบให้แน่ใจว่าลักษณะทรัพยากรของกล่องโต้ตอบต่อไปนี้:
    ลักษณะ: ลูก
    boarder: ไม่มี
    มองเห็นได้: ไม่ได้ตรวจสอบ
    ณจุดนี้ ทุกอย่างที่ได้รับ reconnected เพื่อทำการแปลงจากคลาสที่ CDialog กับคลาสที่ CDialogBar ทำงานอย่างถูกต้อง ขณะนี้ สร้าง และใช้
  7. เพิ่มอินสแตนซ์ของ CDialogBar ที่ได้รับการคลามา CframeWnd (โดยปกติจะเรียกว่า CMainFrame) ตัวอย่าง::
          class CMainFrame : public CFrameWnd
          {
              ...
              CMyDlgBar m_myDlgBar;
              ...
          };
    					
  8. เรียกวิธีการสร้างสำหรับตัวแปร m_myDlgBar ในวิธี CFrameWnd::OnCreate() คล้ายกับข้อความต่อไปนี้:
          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. และสุดท้าย ถ้าคุณต้องการที่สนับสนุนการย้ายต่อเนื่องแบบไดนามิกและปรับขนาดของแบบ CDialogBar เพิ่มบรรทัดต่อไปนี้จุดสิ้นสุดของ 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;
          }

ข้อมูลอ้างอิง

สำหรับข้อมูลเพิ่มเติม ให้คลิกหมายเลขบทความต่อไปนี้ เพื่อดูบทความในฐานความรู้ของ Microsoft::
99161วิธีการสืบทอดมาจากคลาสที่ไม่อยู่ใน ClassWizard

คุณสมบัติ

หมายเลขบทความ (Article ID): 185672 - รีวิวครั้งสุดท้าย: 12 ตุลาคม 2553 - Revision: 2.0
ใช้กับ
  • Microsoft Foundation Class Library 4.2 เมื่อใช้กับ:
    • Microsoft Visual C++ 5.0 Enterprise Edition
    • Microsoft Visual C++ 5.0 Professional Edition
Keywords: 
kbhowto kbmfcctrlbar kbuidesign kbwizard kbmt KB185672 KbMtth
แปลโดยคอมพิวเตอร์
ข้อมูลสำคัญ: บทความนี้แปลโดยซอฟต์แวร์การแปลด้วยคอมพิวเตอร์ของ Microsoft แทนที่จะเป็นนักแปลที่เป็นบุคคล Microsoft มีบทความที่แปลโดยนักแปลและบทความที่แปลด้วยคอมพิวเตอร์ เพื่อให้คุณสามารถเข้าถึงบทความทั้งหมดในฐานความรู้ของเรา ในภาษาของคุณเอง อย่างไรก็ตาม บทความที่แปลด้วยคอมพิวเตอร์นั้นอาจมีข้อบกพร่อง โดยอาจมีข้อผิดพลาดในคำศัพท์ รูปแบบการใช้ภาษาและไวยากรณ์ เช่นเดียวกับกรณีที่ชาวต่างชาติพูดผิดเมื่อพูดภาษาของคุณ Microsoft ไม่มีส่วนรับผิดชอบต่อความคลาดเคลื่อน ความผิดพลาดหรือความเสียหายที่เกิดจากการแปลเนื้อหาผิดพลาด หรือการใช้บทแปลของลูกค้า และ Microsoft มีการปรับปรุงซอฟต์แวร์การแปลด้วยคอมพิวเตอร์อยู่เป็นประจำ
ต่อไปนี้เป็นฉบับภาษาอังกฤษของบทความนี้:185672

ให้ข้อเสนอแนะ

 

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