mfc單文檔獲取頂層菜單的菜單項文本,並設置響應菜單命令範圍

新建好一個單文檔工程,頂層菜單也在同時建好,在resource view中可以看到,頂層菜單的menu的ID爲IDR_MAINFRAME,打開IDR_MAINFRAME,如圖,怎麼獲取菜單下透明度中的子菜單項?(如:1.0,0.8...)

而且還存在另一個問題就是這幾個子菜單都是等價的,理想狀態是點擊任意一個菜單項都會響應同一個函數,傳統的方法,假如右鍵添加消息響應函數,需要寫5個完全一樣的函數,影響代碼效率與規範。這裏就需要設定響應命令範圍了,用到的方法是使用MFC 的 ON_COMMAND_RANGE宏。它將一組連續的命令ID映射爲一個公用處理程序。



所以,需要在消息映射中添加如下代碼:

BEGIN_MESSAGE_MAP(CxxView, CView)

	ON_COMMAND_RANGE(ID_32776,ID_32780,&CxxView::ONSetOpacityValue)

END_MESSAGE_MAP()

我的菜單中共有五個透明度的值,它們的ID號依次是ID_32776到ID_32780. ONSetOpacityValue是需要響應的消息函數,所以在這個函數中添加代碼即可。

void CxxView::ONSetOpacityValue(UINT uID)
{
	CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;
	C3DStomachView *p3DStomachView=(C3DStomachView *)pMain->Get3DStomachView();//最主要的是以下五行代碼
	CMenu *pMenu = new CMenu();
	pMenu->LoadMenuA(IDR_MAINFRAME);
	CMenu *pSubMenu = pMenu->GetSubMenu(5)->GetSubMenu(1);
	CString strTemp;
	pSubMenu->GetMenuString(uID-ID_32776,strTemp,MF_BYPOSITION);
	p3DStomachView->m_f3DModelOpacity = _tstof(strTemp);
}

這樣的話,我點擊的菜單項的文本就保存在了strTemp,中去了,然後用_tstof()將Cstring類型轉成Float類型




發佈了37 篇原創文章 · 獲贊 19 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章