أنت غير متصل حاليًا، وفي انتظار الإنترنت الخاص بك ليقوم بإعادة الاتصال

كيفية تهيئة عناصر التحكم التابعة في CDialogBar المشتقة

هام: تمت ترجمة هذا المقال باستخدام برنامج ترجمة آلية لشركة مايكروسوفت بدلاً من الاستعانة بمترجم بشري. تقدم شركة مايكروسوفت كلاً من المقالات المترجمة بواسطة المترجمين البشر والمقالات المترجمة آليًا وبالتالي ستتمكن من الوصول إلى كل المقالات الموجودة في قاعدة المعرفة الخاصة بنا وباللغة الخاصة بك. بالرغم من ذلك، فإن المقالة المترجمة آليًا لا تكون دقيقة دائمًا وقد تحتوي على أخطاء إملائية أو لغوية أو نحوية، مثل تلك الأخطاء الصادرة عن متحدث أجنبي عندما يتحدث بلغتك. لا تتحمل شركة مايكروسوفت مسئولية عدم الدقة أو الأخطاء أو الضرر الناتج عن أية أخطاء في ترجمة المحتوى أو استخدامه من قبل عملائنا. تعمل شركة مايكروسوفت باستمرار على ترقية برنامج الترجمة الآلية

185672
الموجز
عند إنشاء CDialogBar بسيطة مثل ذات CButtons فقط مشابهاً الخاص بـ MFC المعاينة قبل الطباعة, من الضروري لا ينحدر من CDialogBar لأن الأصل CControlBar يتلقى رسائل الإعلام من أي عناصر التحكم التابعة.

ومع ذلك، في حالة التي CDialogBar أكثر تعقيداً قد يكون مربع التحرير والسرد المنسدلة أو treeview أو عنصر تحكم ActiveX قد يكون مفيداً ينحدر من CDialogBar لتوفير تهيئة عناصر التحكم التابعة.

بسبب عدم اعتماد ClassWizard اشتقاق فئة من CDialogBar ، يوضح هذا المقال الخطوات الضرورية إلى إنشاء فئة من CDialog ثم "تحويل" الفئة إلى CDialogBar.
معلومات أخرى
لبدء بإنشاء فئة CDialog مع عناصر التحكم التابعة التي تريد استخدامها. يمكنك تحويل فئة CDialog في فئة CDialogBar باستخدام الخطوات تسعة التالية:

  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. إزالة "OnInitDialog() منطقي الظاهري;" من رأس فئة وإضافة "afx_msg طويلة OnInitDialog (UINT ، طويلة);" في مكانها. على سبيل المثال:
          class CMyDlgBar : public CDialogBar      {         ...      // Implementation      protected:         // Generated message map functions         //<AngularNoBind>{{</AngularNoBind>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)         //<AngularNoBind>{{</AngularNoBind>AFX_MSG_MAP(CMyDlgBar)         ...         //<AngularNoBind>}}</AngularNoBind>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: بلا
    مرئي: مخزن
    إعادة عند هذه النقطة، كل شيء قد تم توصيل إجراء التحويل من فئة 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