如何:建立使用者控制項並裝載至對話方塊中
本文中的步驟假設您正在建立以對話方塊為基礎的 [CDialog 類別 ] Microsoft Foundation Classes ( MFC) 專案,但您也可以將 Windows Forms 控制項的支援新增至現有的 MFC 對話方塊。
若要建立 .NET 使用者控制項
建立名為
WindowsFormsControlLibrary1
的 Visual C# Windows Forms 控制項程式庫專案。在 [檔案] 功能表上,按一下 [新增],然後按一下 [專案]。 在 Visual C# 資料夾中,選取 [Windows Forms 控制項程式庫 ]。
按一下 [ 確定 ] 以
WindowsFormsControlLibrary1
接受專案名稱。根據預設,.NET 控制項的名稱會是
UserControl1
。將子控制項新增至
UserControl1
。在 [工具箱] 中 ,開啟 [ 所有 Windows Forms] 清單。 將 按鈕 控制項拖曳至
UserControl1
設計介面。同時新增 TextBox 控制項。
在 方案總管 中,按兩下 UserControl1.Designer.cs 將其開啟以進行編輯。 將 TextBox 和 Button 的宣告從
private
變更為public
。組建專案。
在 [建置] 功能表上,按一下 [建置方案]。
建立 MFC 主應用程式
建立 MFC 應用程式專案。
在 [檔案] 功能表上,按一下 [新增],然後按一下 [專案]。 在 [ Visual C++] 資料夾中,選取 [MFC 應用程式 ]。
在 [名稱] 方塊中,輸入
MFC01
。 將 [方案] 設定變更為 [新增至方案 ]。 按一下 [確定]。在 [MFC 應用程式精靈] 中 ,針對 [應用程式類型],選取 [以對話方塊為基礎的 ]。 接受其餘的預設設定,然後按一下 [ 完成 ]。 這會建立具有 MFC 對話方塊的 MFC 應用程式。
將預留位置控制項新增至 [MFC] 對話方塊。
在 [ 檢視] 功能表上,按一下 [ 資源檢視 ]。 在 [資源檢視 ] 中 ,展開 [對話方塊 ] 資料夾,然後按兩下
IDD_MFC01_DIALOG
。 對話方塊資源會出現在資源編輯器 中 。在 [工具箱 ] 中 ,開啟 [對話方塊編輯器] 清單。 將 靜態文字 控制項拖曳至對話方塊資源。 靜態 文字 控制項將做為 .NET Windows Forms 控制項的預留位置。 將其大小調整為大約是 Windows Forms 控制項的大小。
在 [ 屬性 ] 視窗中,將 [靜態文字 ] 控制項的 識別碼 變更 為
IDC_CTRL1
,並將 TabStop 屬性變更 為 True 。設定 Common Language Runtime (CLR) 支援的專案。
在 方案總管 中,以滑鼠右鍵按一下 MFC01 專案節點,然後按一下 [ 屬性 ]。
在 [ 屬性頁] 對話方塊的 [組態屬性 ] 底下 ,選取 [ 一般 ]。 在 [ 專案預設值] 區 段中,將 Common Language Runtime 支援 設定 為 Common Language Runtime 支援 (/clr) 。
在 [組態屬性] 底下 ,展開 [C/C++ ],然後選取 [ 一般 ] 節點。 將 [偵錯資訊格式 ] 設定 為 [程式資料庫] (/Zi) 。
選取 [ 程式碼產生] 節點。 將 [啟用最小重建 ] 設定 為 [否] (/Gm-) 。 同時將 [基本執行時間檢查 ] 設定 為 [預設值 ]。
按一下 [ 確定 ] 以套用變更。
新增 .NET 控制項的參考。
在 方案總管 中,以滑鼠右鍵按一下 MFC01 專案節點,然後按一下 [新增 ]、 [ 參考 ]。 在 [屬性頁 ] 上,按一下 [ 新增參考 ],選取 [WindowsFormsControlLibrary1 ] (在 [專案 ] 索引標籤下),然後按一下 [ 確定 ]。 這會以 /FU 編譯器選項的形式 新增參考,讓程式能夠編譯。 它也會將 WindowsFormsControlLibrary1.dll 的複本放在 \MFC01\ 專案資料夾中,讓程式執行。
在 Stdafx.h 中,尋找這一行:
#endif // _AFX_NO_AFXCMN_SUPPORT
在上面新增下列幾行:
#include <afxwinforms.h> // MFC Windows Forms support
新增程式碼以建立 Managed 控制項。
首先,宣告 Managed 控制項。 在 MFC01Dlg.h 中,移至對話方塊類別的宣告,並在 Protected 範圍中新增使用者控制項的資料成員,如下所示。
class CMFC01Dlg : public CDialog { // ... // Data member for the .NET User Control: CWinFormsControl<WindowsFormsControlLibrary1::UserControl1> m_ctrl1;
接下來,提供 Managed 控制項的實作。 在 MFC01Dlg.cpp 中,于 MFC 應用程式精靈所產生的對話方塊覆寫
CMFC01Dlg::DoDataExchange
中,新增CAboutDlg::DoDataExchange
下列程式碼來建立 Managed 控制項,並將它與靜態位置持有者產生關聯IDC_CTRL1。void CMFC01Dlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_ManagedControl(pDX, IDC_CTRL1, m_ctrl1); }
建置並執行專案。
在 方案總管 中,以滑鼠右鍵按一下 [MFC01 ],然後按一下 [ 設定為啟始專案 ]。
在 [建置] 功能表上,按一下 [建置方案]。
在 [偵錯] 功能表上,按一下 [ 開始但不偵錯 ]。 [MFC] 對話方塊應該會顯示 Windows Form 控制項。
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應