1. 程式人生 > >CMFCTabCtrl控制元件的一些訊息處理

CMFCTabCtrl控制元件的一些訊息處理

    1. 首先我從CMFCTabCtrl派生了自己的類CMyMFCTabCtrl,在create完成後設定去掉選中頁的關閉按鈕屬性EnableActiveTabCloseButton(FALSE); 當前選中的Page是不會帶關閉按鈕的只有在最右側才會出現,可以看下圖樣式:


    這時候如果去點選關閉按鈕'x',是不會有響應的,所以需要重寫OnCommand(WPARAM wParam, LPARAM lParam)

BOOL CMyMFCTabCtrl::OnCommand(WPARAM wParam, LPARAM lParam)
{
	// TODO: Add your specialized code here and/or call the base class

	//關閉當前Tab
	//請注意這句話一定要新增,否則雖然實現了關閉按鈕的功能但是卻缺少了向左向右滾動的功能
	if ((HWND)lParam == m_btnClose.GetSafeHwnd())
	{
		gpView_->OnFileClose();
		return TRUE;
	}	

	return CMFCTabCtrl::OnCommand(wParam, lParam);
}   

2.  如果你想去掉右鍵選單你只需要重寫函式而不需要做其他處理OnContextMenu(CWnd* pWnd, CPoint point)

如果你想在去掉右鍵選單的同時再需要右鍵啟用選項卡可以做以下處理:

//去掉右鍵彈出選單以及右鍵啟用選項卡
void CMyMFCTabCtrl::OnContextMenu(CWnd* pWnd, CPoint point)
{
	// TODO: Add your message handler code here

	//point為全域性座標需要轉成當前視窗座標
	ScreenToClient(&point);
	int iTab = this->GetTabFromPoint(point);	//從右鍵座標得到當前座標底下的Tab頁
	if (iTab < 0) return;				    //非Tab頁位置不作處理

	this->SetActiveTab(iTab);			    //右鍵時設定當前頁為活動頁

	CMFCTabCtrl::OnContextMenu(pWnd, point);	
}    

3.  如果你想修改CMFCTabCtrl中Page頁面的標籤高度可以新增一個函式:

void SetTabsHeight(int iHeight) { m_nTabsHeight = iHeight; }

    4. 如果你喜歡你還可以設定屬性,當CMFCTabCtrl的Page頁面為空時會自動隱藏CMFCTabCtrl控制元件:

HideNoTabs();	//當關閉所有Page頁面時隱藏Table控制元件