MFC MDI GetActiveView() 為空

TheDeaf發表於2014-12-16

今天寫了一個多文件的應用程式,要響應選單訊息。

訊息是在MainFrame中響應的。然後對當前的活動視窗進行修改。

結果我直接呼叫GetActiveView()返回的一直是空。

我上網搜了一下沒有找到解決辦法,後來查了一下MSDN才發現對應多文件(MDI)下這麼用是不行的。需要先獲得CMDIChildWnd然後在通過CMDIChildWnd獲得view才行。

程式碼如下;


        CMDIChildWnd *pChild = static_cast<CMDIChildWnd *>(GetActiveFrame());
	if (pChild)
	{
		CYourView *pView = NULL;
		pView = static_cast<CYourView*>(pChild->GetActiveView());
		if (pView)
		{
			//do something
		}
	}

另外還有個問題,就是我新增的選單一開始預設沒有顯示,需要在點選一次才能顯示。

解決的辦法是在MainFrame的create函式裡面的下面部分

// 啟用選單個性化(最近使用的命令)
// TODO: 定義您自己的基本命令,確保每個下拉選單至少有一個基本命令。
CList<UINT, UINT> lstBasicCommands;

裡面加上預設要顯示的選單命令ID:

lstBasicCommands.AddTail(ID_YOURID);



相關文章