HOW TO:新增命令傳送至 Windows Form 控制項
CWinFormsView 傳送命令並更新命令 UI 訊息至使用者控制項,以允許該控制項處理 MFC 命令 (例如,框架功能表項目和工具列按鈕)。
使用者控制項使用 ICommandTarget::Initialize 來儲存參考至 m_CmdSrc 中的命令來源物件,如下列範例所示。 若要使用 ICommandTarget,您需要加入對 mfcmifc80.dll 的參考。
CWinFormsView 會將數個常見的 MFC 檢視告知轉寄至管理的使用者控制項,藉此來處理它們。 這些告知包含 IView Interface 的 OnInitialUpdate、OnUpdate 和 OnActivateView 方法。
本主題假設您先前已完成 HOW TO:建立使用者控制項並裝載至對話方塊中和 HOW TO:建立使用者控制項並裝載 MDI 檢視。
若要建立 MFC 主應用程式
開啟您在 HOW TO:建立使用者控制項並裝載至對話方塊中建立的 Windows Form 控制項程式庫。
加入對 mfcmifc80.dll 的參考,其方式是以滑鼠右鍵按一下 [方案總管] 中的專案節點,並選取 [加入參考],然後瀏覽至 Microsoft Visual Studio 10.0\VC\atlmfc\lib。
開啟 UserControl1.Designer.cs,並加入下列 using 陳述式:
using Microsoft.VisualC.MFC;
此外,也在 UserControl1.Designer.cs 中將這一行:
partial class UserControl1
變更為:
partial class UserControl1 : System.Windows.Forms.UserControl, ICommandTarget
將這一行加入到 UserControl1 之類別定義的第一行:
private ICommandSource m_CmdSrc;
將下列方法定義加入到 UserControl1 (將會在下一個步驟中建立 MFC 控制項的 ID):
public void Initialize (ICommandSource cmdSrc) { m_CmdSrc = cmdSrc; // need ID of control in MFC dialog and callback function m_CmdSrc.AddCommandHandler(32771, new CommandHandler (singleMenuHandler)); } private void singleMenuHandler (uint cmdUI) { // User command handler code System.Windows.Forms.MessageBox.Show("Custom menu option was clicked."); }
開啟您在 HOW TO:建立使用者控制項並裝載 MDI 檢視建立的 MFC 應用程式。
加入一個將叫用 singleMenuHandler 的功能表選項。
移至 [資源檢視] (CTRL+SHIFT+E),並展開 [功能表] 資料夾,然後按兩下 [IDR_MFC02TYPE], 如此即會顯示功能表編輯器。
在 [檢視] 功能表的底端加入功能表選項, 請記下 [屬性] 視窗中的功能表選項 ID。 儲存檔案。
在 [方案總管] 中開啟 Resource.h 檔,並複製您剛加入的功能表選項 ID 值,然後貼上該值,當做 C# 專案的 Initialize 方法中 m_CmdSrc.AddCommandHandler 呼叫的第一個參數 (請視需要取代 32771)。
建置及執行專案。
在 [建置] 功能表上,按一下 [建置方案]。
在 [偵錯] 功能表上,按一下 [啟動但不偵錯]。
選取您加入的功能表選項; 請注意,會呼叫此 .dll 中的方法。