كيفية تغيير مربع حوار MFC بلا تعديل ليكون طفل CVIEW في تطبيق MDI؟

StackOverflow https://stackoverflow.com/questions/2545517

  •  23-09-2019
  •  | 
  •  

سؤال

لدي تطبيق MFC وهو تنفيذ Doc/View/Frame. يتم تشغيل مربع حوار واحد كمربع حوار غير معدّل يظهر عند الطلب (من خيار القائمة). أنا أتطلع إلى إضافة مربع الحوار غير المعدل إلى عرض الطفل MDI. في الأساس ، أريد تحميل القالب من ملف المورد ، وأنشئه كطفل من CVIEW في الثلاثي الجديد (doc/view/frame) الذي أضيفه إلى قوائم القالب الخاصة بـ MDI.

لقد جربت بعض الأشياء في صفي CMYVIEW المشتق:

void CMyView::OnInitialUpdate()
{
  m_ListDialog = new Dialogs::CListDialog( m_config, this );
  m_ListDialog->Create( Dialogs::CListDialog::IDD, this );
  m_ListDialog->ShowWindow( SW_SHOW );
}

لقد حاولت استدعاء SetWindowPos ، ModifyStyle (WS_CHILD ، WS_VISIBLE ، DS_CONTROL). لقد حاولت تعديل ملف المورد لتعيين الطفل والتحكم يدويًا.

في كل مرة تتصل فيها ، يتم ترك M_HWND من ListDialog كـ 0. هذا يخبرني أنه لا يتم إنشاؤه بشكل صحيح. أي دعوة إلى setWindowpos () أو showwindow () تفشل لأن m_hwnd هو 0 (فشل تصحيح التصحيح).

ما الذي يجب علي فعله للحصول على مربع حوار غير معدّل ليتم بناؤه وإنشائه وظهره كطفل إلى CMYVIEW في تطبيق MDI الخاص بي؟

هل كانت مفيدة؟

المحلول

لا أعلم. لكن...
لديك العديد من الخيارات البديلة التي يمكن أن تكون مناسبة اعتمادًا على كيفية ظهور التطبيق الخاص بك.

1/باستخدام CFormView. إذا تم تخصيص عرضك لحوار الحوار ، فيمكنك استخلاص طريقة عرض من فئة MFC CformView. الغرض من هذا العرض هو عرض مربع حوار.

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

2/ باستخدام أ CSplitterWnd. عرض واحد كونه cformview والآخر cview الخاص بك الحالي.

3/ باستخدام CDialogBarإذا كان العرض الخاص بك يعرض شيئًا ما بالفعل ، فيمكنك إضافة مربع الحوار الخاص بك كبار أدوات باستخدام CDIALOGBAR CLASS.

نصائح أخرى

هذا يعمل في تطبيق MDI الخاص بي ...

void CGUIView::OnInitialUpdate()
{
    CView::OnInitialUpdate();

    p_Dlg = new CTestDlg;   // a CDialog derived class
    p_Dlg->Create(IDD_DIALOG1,this);
    p_Dlg->ShowWindow(SW_SHOW);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top