Aracılığıyla paylaş


MFC İletişim Kutusu Olarak Windows Formu Kullanıcı Denetimi Barındırma

MFC, bir Windows Forms kullanıcı denetimini (UserControl) kalıcı veya modsuz MFC iletişim kutusunda barındırabilmeniz için CWinFormsDialog şablon sınıfını sağlar. CWinFormsDialog MFC sınıfı CDialog'dan türetilir, bu nedenle iletişim kutusu kalıcı veya modsuz olarak başlatılabilir.

Kullanıcı denetimini barındırmak için kullanılan işlemCWinFormsDialog, MFC İletişim Kutusunda Windows Form Kullanıcı Denetimi Barındırma bölümünde açıklanana benzer. Ancak, CWinFormsDialog el ile programlanması gerekmemesi için kullanıcı denetiminin başlatılmasını ve barındırılması yönetilebilir.

MFC konak uygulamasını oluşturmak için

  1. MFC Uygulaması projesi oluşturma.

    Dosya menüsünde Yeni'yi seçin ve proje'ye tıklayın. Visual C++ klasöründe MFC Uygulaması'nı seçin.

    Ad kutusuna Çözüm ayarını girin MFC03 ve Çözüme Ekle olarak değiştirin. Tamam'a tıklayın.

    MFC Uygulama Sihirbazı'nda tüm varsayılan değerleri kabul edin ve son'a tıklayın. Bu, Birden Çok Belge Arabirimine sahip bir MFC uygulaması oluşturur.

  2. Projeyi yapılandırın.

    Çözüm Gezgini'da MFC03 proje düğümüne sağ tıklayın ve Özellikler'i seçin. Özellik Sayfaları iletişim kutusu görüntülenir.

    Özellik Sayfaları iletişim kutusunda Yapılandırma Özellikleri Genel'i> seçin. Proje Varsayılanları bölümünde Ortak Dil Çalışma Zamanı desteği'niOrtak Dil Çalışma Zamanı Desteği (/clr) olarak ayarlayın. Tamam'ı seçin.

  3. .NET denetimine bir başvuru ekleyin.

    Çözüm Gezgini MFC03 proje düğümüne sağ tıklayın ve Ekle, Başvurular'ı seçin. Özellik Sayfasında Yeni Başvuru Ekle'ye tıklayın, WindowsControlLibrary1'i seçin (Projeler sekmesinin altında) ve Tamam'a tıklayın. Bu, programın derlenecek şekilde /FU derleyici seçeneği biçiminde bir başvuru ekler; ayrıca programın çalışması için WindowsControlLibrary1.dll dosyasını proje dizinine MFC03 kopyalar.

  4. Mevcut deyimlerin sonuna pch.h (Visual Studio 2017 ve önceki sürümlerde stdafx.h) ekleyin #include <afxwinforms.h>#include.

  5. alt sınıflarına CDialogsahip yeni bir sınıf ekleyin.

    Proje adına sağ tıklayın ve alt sınıflara CDialogsahip bir MFC sınıfı (CHostForWinForm olarak adlandırılır) ekleyin. İletişim kutusu kaynağına ihtiyacınız olmadığından kaynak kimliğini silebilirsiniz (Kaynak Görünümü'nü seçin, İletişim kutusu klasörünü genişletin ve kaynağı silinIDD_HOSTFORWINFORM. Ardından, koddaki kimlik başvurularını kaldırın.).

  6. CHostForWinForm.h ve CHostForWinForm.cpp dosyalarını ile CWinFormsDialog<WindowsControlLibrary1::UserControl1>değiştirinCDialog.

  7. CHostForWinForm sınıfında DoModal'ı çağırın.

    MFC03.cpp dosyasında ekleyin #include "HostForWinForm.h".

    CMFC03App::InitInstance tanımındaki return deyiminden önce şunları ekleyin:

    CHostForWinForm m_HostForWinForm;
    m_HostForWinForm.DoModal();
    
  8. Projeyi derleyin ve çalıştırın.

    Yapı menüsünde Yapı Çözümü’ne tıklayın.

    Hata Ayıklamenüsünde Hata ayıklamadan başlat'a tıklayın.

    Ardından, MFC uygulamasından Windows Forms'da bir denetimin durumunu izlemek için kod ekleyeceksiniz.

  9. OnInitDialog için bir işleyici ekleyin.

    Özellikler penceresini (F4) görüntüleyin. Sınıf Görünümü'nde CHostForWinForm öğesini seçin. Özellikler penceresinde geçersiz kılmalar'ı seçin ve OnInitDialog satırında sol sütuna tıklayın ve Ekle'yi >seçin<. Bu, CHostForWinForm.h'ye aşağıdaki satırı ekler:

    virtual BOOL OnInitDialog();
    
  10. OnInitDialog'ı (CHostForWinForm.cpp içinde) aşağıdaki gibi tanımlayın:

    BOOL CHostForWinForm::OnInitDialog() {
       CWinFormsDialog<WindowsControlLibrary1::UserControl1>::OnInitDialog();
       GetControl()->button1->Click += MAKE_DELEGATE(System::EventHandler, OnButton1);
       return TRUE;
    }
    
  11. Ardından OnButton1 işleyicisini ekleyin. CHostForWinForm.h dosyasındaki CHostForWinForm sınıfının genel bölümüne aşağıdaki satırları ekleyin:

    virtual void OnButton1( System::Object^ sender, System::EventArgs^ e );
    
    BEGIN_DELEGATE_MAP( CHostForWinForm )
       EVENT_DELEGATE_ENTRY( OnButton1, System::Object^, System::EventArgs^ );
    END_DELEGATE_MAP()
    

    CHostForWinForm.cpp dosyasında şu tanımı ekleyin:

    void CHostForWinForm::OnButton1( System::Object^ sender, System::EventArgs^ e )
    {
       System::Windows::Forms::MessageBox::Show("test");
    }
    
  12. Projeyi derleyin ve çalıştırın. Windows Formundaki düğmeye tıkladığınızda, MFC uygulamasındaki kod çalışır.

    Ardından, MFC kodundan Windows Formu'ndaki metin kutusundaki değeri görüntülemek için kod ekleyebilirsiniz.

  13. CHostForWinForm.h içindeki CHostForWinForm sınıfının genel bölümüne aşağıdaki bildirimi ekleyin:

    CString m_sEditBoxOnWinForm;
    
  14. CHostForWinForm.cpp dosyasındaki DoDataExchange tanımına işlevin sonuna aşağıdaki üç satırı ekleyin:

    if (pDX->m_bSaveAndValidate)
       m_sEditBoxOnWinForm = CString( GetControl()->textBox1->Text);
    else
       GetControl()->textBox1->Text = gcnew System::String(m_sEditBoxOnWinForm);
    
  15. CHostForWinForm.cpp dosyasındaki OnButton1 tanımına, işlevin sonuna aşağıdaki üç satırı ekleyin:

    this->UpdateData(TRUE);
    System::String ^ z = gcnew System::String(m_sEditBoxOnWinForm);
    System::Windows::Forms::MessageBox::Show(z);
    
  16. Projeyi derleyin ve çalıştırın.

Ayrıca bkz.

System.Windows.Forms.UserControlMFC içinde Windows Formu Kullanıcı Denetimi Kullanma