MFC动态添加菜单并响应,优缺点(响应函数不能动态添加)
来源:互联网 发布:淘宝钓鱼望远镜 编辑:程序博客网 时间:2024/05/29 15:04
方案一:在视类中处理
头文件部分(不全)
public:
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags);
private:
// 用来记录当前是第几次按下回车键
int m_nIndex;
// 为视类增加一个CMenu 类成员变量,用于动态创建新的子菜单
CMenu m_menu;
// 用于保存输入的字符
CString m_strLine;
public:
// 用来保存所有的字符串,即输入的所有联系方式
CStringArray m_strArray;
afx_msg void OnPhone1();
afx_msg void OnPhone2();
afx_msg void OnPhone3();
afx_msg void OnPhone4();
映射管理:
ON_COMMAND(ID_32771, &CMFC_PhoneBookView::OnPhone1)
ON_COMMAND(ID_32772, &CMFC_PhoneBookView::OnPhone2)
ON_COMMAND(ID_32773, &CMFC_PhoneBookView::OnPhone3)
ON_COMMAND(ID_32774, &CMFC_PhoneBookView::OnPhone4)
字符响应函数(动态添加菜单项):
void CMFC_PhoneBookView::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{// TODO: Add your message handler code here and/or call default
CClientDC dc(this);
if (0x0d==nChar)
{
if (0==++m_nIndex)
{
m_menu.CreatePopupMenu();
GetParent()->GetMenu()->AppendMenu(MF_POPUP,(UINT)m_menu.m_hMenu,_T("通讯录(P)"));
GetParent()->DrawMenuBar();
MessageBox(_T("通讯录"));
}
//动态添加子菜单
m_menu.AppendMenu(MF_STRING,32771+m_nIndex,m_strLine.Left(m_strLine.Find(_T(" "))));
m_strArray.Add(m_strLine);
m_strLine.Empty();
//更新窗口,让窗口的客户区无效
Invalidate();
}
else
{
// CFont font;
// font.CreatePointFont(300,_T("华文行楷"),NULL);
// CFont *pOldFont=dc.SelectObject(&font);
m_strLine+=char(nChar);
dc.TextOut(0,0,m_strLine);
// dc.SelectObject(pOldFont);
}
// dc.TextOut(0,20,_T("0123456789"));
CView::OnChar(nChar, nRepCnt, nFlags);
}
方案二:在框架类窗口中截获菜单命令消息(OnCommand函数是重写父类的虚函数,体现了C++的多态性),如果有错误出现,一般是框架类头文件没有添加视类头文件,视类头文件也应该添加Doc类头文件
BOOL CMainFrame::OnCommand(WPARAM wParam, LPARAM lParam){
int MenuCmdID=LOWORD(wParam);
CMFC_PhoneBookView *pView=(CMFC_PhoneBookView*)GetActiveView();
if (MenuCmdID>=ID_32771&&MenuCmdID<ID_32771+pView->m_strArray.GetSize())
{
MessageBox(_T("Test"));
CClientDC dc(pView);
dc.TextOut(0,0,pView->m_strArray.GetAt(MenuCmdID-ID_32771));
return TRUE;
}
return 0;
}
void CMFC_PhoneBookView::OnPhone1()
{
// TODO: Add your command handler code here
CClientDC dc(this);
dc.TextOut(0,0,m_strArray.GetAt(0));
}
void CMFC_PhoneBookView::OnPhone2()
{
// TODO: Add your command handler code here
CClientDC dc(this);
dc.TextOut(0,0,m_strArray.GetAt(1));
}
void CMFC_PhoneBookView::OnPhone3()
{
// TODO: Add your command handler code here
CClientDC dc(this);
dc.TextOut(0,0,m_strArray.GetAt(2));
}
void CMFC_PhoneBookView::OnPhone4()
{
// TODO: Add your command handler code here
CClientDC dc(this);
dc.TextOut(0,0,m_strArray.GetAt(3));
}
- MFC动态添加菜单并响应,优缺点(响应函数不能动态添加)
- 动态创建菜单添加响应函数
- MFC右键弹出菜单,并添加响应函数
- vc动态添加弹出菜单和响应函数
- vc动态添加弹出菜单和响应函数
- MFC动态添加控件及响应函数
- MFC 添加动态菜单
- MFC中动态添加菜单项和响应菜单事件
- MFC中动态添加菜单项和响应菜单事件
- 动态添加子菜单的菜单项响应函数
- MFC中菜单项的动态添加、删除与响应
- MFC中菜单项的动态添加、删除与响应
- VC中动态添加菜单及其命令响应函数
- VC中动态添加菜单及其命令响应函数
- MFC 动态创建控件及添加消息响应函数
- MFC动态创建创建的按钮添加响应函数
- mfc 给菜单添加相应的响应函数
- 三、MFC中给子菜单添加位图,并添加响应函数
- Eclipse添加代码行数统计插件步骤及应用
- Linux下 ftp 命令的使用
- 十月上旬百度,阿里巴巴,迅雷搜狗最新面试七十题(第201-270题)
- java中hashcode和equals的区别
- 决定我去留的关键时刻倒计时开始了
- MFC动态添加菜单并响应,优缺点(响应函数不能动态添加)
- 其他应用跳转到Settings指定设置子项流程分析
- #import 指令 (C++)
- 面试经典问题
- ExtJS至propertyGrid 自动排序及设置editor
- java作业:两个数字的最大公约数和最小公倍数
- textView
- Linux目录详解
- 使用ffmpeg解码音频文件到PCM格式