我想添加一個菜單項,使得它就像一個複選標記,用戶可以選中/取消,其他類可以看到該菜單項的複選標記狀態。我收到了一個爲菜單選項創建類的建議(帶有一個彈出選項),但是,當我在Visual Studio 2005中的資源佈局編輯器中時,我無法爲菜單選項創建類。這將會很棒聽到關於創建菜單項的最簡單方法的建議,這些菜單項可以完成我所描述的任務。MFC菜單項的複選框的行爲
3
A
回答
1
我最終使用GetMenu()方法從大型機中檢索菜單,然後使用該菜單對象和ID號來調用具有正確標誌的CheckMenuItem()以及GetMenuState()函數。
8
您應該使用CCmdUI::SetCheck
函數將複選框添加到菜單項,通過ON_UPDATE_COMMAND_UI
處理程序函數和ON_COMMAND
處理程序更改複選框的狀態。此方法適用於您的應用程序的主菜單以及您可能創建的任何彈出式菜單。
假設你有一個MDI或SDI MFC應用程序,你應該先決定你要添加的處理功能,例如在應用程序中,主框架,文檔或視圖類。這取決於該標誌將用於:如果它控制應用程序範圍的行爲,將其放入應用程序類;如果它控制視圖特定的行爲,把它放在您的視圖類等
(另外,我建議你離開菜單項的經過屬性中設置爲假資源編輯器。)
下面是一個使用視圖類控制ID_MY_COMMAND
菜單項的複選框狀態的例子:
// MyView.h
class CMyView : public CView
{
private:
BOOL m_Flag;
afx_msg void OnMyCommand();
afx_msg void OnUpdateMyCommand(CCmdUI* pCmdUI);
DECLARE_MESSAGE_MAP()
};
// MyView.cpp
BEGIN_MESSAGE_MAP(CMyView, CView)
ON_COMMAND(ID_MY_COMMAND, OnMyCommand)
ON_UPDATE_COMMAND_UI(ID_MY_COMMAND, OnUpdateMyCommand)
END_MESSAGE_MAP()
void CMyView::OnMyCommand()
{
m_Flag = !m_Flag; // Toggle the flag
// Use the new flag value.
}
void CMyView::OnUpdateMyCommand(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(m_Flag);
}
你應該確保m_Flag
成員變量被初始化,例如,在CMyView
構造函數或OnInitialUpdate
函數。
我希望這有助於!
2
@ ChrisN的方法不適用於MFC對話框應用程序(pCmdUI->SetCheck(m_Flag);
沒有效果)。下面是對話的應用程序的解決方案:
// MyView.h
class CMyView : public CView
{
private:
BOOL m_Flag;
CMenu * m_menu;
virtual BOOL OnInitDialog();
afx_msg void OnMyCommand();
DECLARE_MESSAGE_MAP()
};
// MyView.cpp
BEGIN_MESSAGE_MAP(CMyView, CView)
ON_COMMAND(ID_MY_COMMAND, OnMyCommand)
END_MESSAGE_MAP()
BOOL CMyView::OnInitDialog()
{
m_menu = GetMenu();
}
void CMyView::OnMyCommand()
{
m_Flag = !m_Flag; // Toggle the flag
if (m_flag) {
m_menu->CheckMenuItem(ID_MENUITEM, MF_CHECKED | MF_BYCOMMAND);
} else {
m_menu->CheckMenuItem(ID_MENUITEM, MF_UNCHECKED | MF_BYCOMMAND);
}
}
參考文獻:
相關問題
- 1. C++複選框的行爲像單選按鈕WINAPI(沒有MFC)
- 2. MFC - 檢查/取消選中菜單項
- 3. 複選框菜單項不起作用
- 4. 色調菜單項複選框
- 5. 節目上。當用戶蜱複選框菜單項選擇複選框菜單項
- 6. 複選框菜單切換
- 7. treeview複選框菜單
- 8. 處理選項菜單中的複選框事件:Android
- 9. 只有CListCtrl中的單個選擇MFC中的複選框
- 10. 如何在具有子菜單項的菜單項上打上覆選標記。 (Visual Studio 2008 C++/MFC)
- 11. 單擊菜單時更改btn顏色複選框選項
- 12. MFC個性化菜單行爲
- 13. 隱藏MFC中的菜單項
- 14. 刪除複選框中的複選框全部在複選框菜單Primefaces
- 15. Android選項菜單 - 單行中的一個菜單項
- 16. 更改選項菜單項中已選中複選框的樣式
- 17. 菜單中的複選框Android
- 18. CakePhp:重複選項的下拉菜單
- 19. Android - 作爲選項卡的菜單項
- 20. 選項菜單在運行時爲空
- 21. 使用MFC中的複選框選擇全行
- 22. Drupal 6 - 展開沒有點擊複選框的菜單項
- 23. 複選框菜單項的解密JAVA GUI
- 24. 在ActionBar的菜單項上添加複選框
- 25. 多選複選框下拉菜單
- 26. 如何初始化選項菜單複選框
- 27. 命令行菜單選項
- 28. listview複選框選中的行項目
- 29. 刪除MFC中的菜單
- 30. MFC中的動態菜單