动态创建多列下拉(弹出式)菜单
2009-10-15 01:28
162 查看
如下的代码片段用于实现多列的动态菜单.代码片段中的菜单为三列
多列菜单是依靠,MF_BYPOSITION|MF_STRING|MF_MENUBARBREAK这个flag来实现的.
// 增加消息映射,菜单消息响应函数:OnSelectChemCodeID
// ON_COMMAND_RANGE(ID_MY_MENU_START,ID_MY_MENU_START+100,OnSelectChemCodeID)
// ID_MY_MENU_START 为定义的MenuID的起始值.这些值将用于处理菜单消息
void CXXXDlg::OnBnClickedButton1()
{
//弹出菜单
CMenu oMenu;
oMenu.LoadMenu(IDR_MENU1);
CMenu *pSubMenu = oMenu.GetSubMenu(0);
if(pSubMenu==NULL)
return ;
// 资源文件中本菜单上只有一行内容(是一个分割符号),这里将其清除
pSubMenu->DeleteMenu(0,MF_BYPOSITION);
CString strMenu;
int nCodeID(0);
// 动态插入23个新的菜单.这些菜单将分为3列显示
for(int n=1;n<23;n++){
strMenu.Format("MenuID(%d)",n);
if((n%10)==1 && n>1){
// 插入分页符号,使得菜单显示为多列
pSubMenu->InsertMenu(n,MF_BYPOSITION|MF_STRING|MF_MENUBARBREAK, ID_MY_MENU_START + n, strMenu);
}else{
pSubMenu->InsertMenu(n,MF_BYPOSITION|MF_STRING , ID_MY_MENU_START + n, strMenu);
}
}
CPoint p;
::GetCursorPos(&p);
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_TOPALIGN,p.x ,p.y+10,this);
}
//测试项目ID为ID-ID_MENU_CHEMCODE_START
//菜单资源中保留32800到32899作为处理测试项目使用
void CXXXDlg::OnSelectChemCodeID(UINT nID)
{
CString strMenuID;
strMenuID.Format("MenuID=%d,Index=%d",nID,nID-ID_MY_MENU_START);
MessageBox(strMenuID);
}
多列菜单是依靠,MF_BYPOSITION|MF_STRING|MF_MENUBARBREAK这个flag来实现的.
// 增加消息映射,菜单消息响应函数:OnSelectChemCodeID
// ON_COMMAND_RANGE(ID_MY_MENU_START,ID_MY_MENU_START+100,OnSelectChemCodeID)
// ID_MY_MENU_START 为定义的MenuID的起始值.这些值将用于处理菜单消息
void CXXXDlg::OnBnClickedButton1()
{
//弹出菜单
CMenu oMenu;
oMenu.LoadMenu(IDR_MENU1);
CMenu *pSubMenu = oMenu.GetSubMenu(0);
if(pSubMenu==NULL)
return ;
// 资源文件中本菜单上只有一行内容(是一个分割符号),这里将其清除
pSubMenu->DeleteMenu(0,MF_BYPOSITION);
CString strMenu;
int nCodeID(0);
// 动态插入23个新的菜单.这些菜单将分为3列显示
for(int n=1;n<23;n++){
strMenu.Format("MenuID(%d)",n);
if((n%10)==1 && n>1){
// 插入分页符号,使得菜单显示为多列
pSubMenu->InsertMenu(n,MF_BYPOSITION|MF_STRING|MF_MENUBARBREAK, ID_MY_MENU_START + n, strMenu);
}else{
pSubMenu->InsertMenu(n,MF_BYPOSITION|MF_STRING , ID_MY_MENU_START + n, strMenu);
}
}
CPoint p;
::GetCursorPos(&p);
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_TOPALIGN,p.x ,p.y+10,this);
}
//测试项目ID为ID-ID_MENU_CHEMCODE_START
//菜单资源中保留32800到32899作为处理测试项目使用
void CXXXDlg::OnSelectChemCodeID(UINT nID)
{
CString strMenuID;
strMenuID.Format("MenuID=%d,Index=%d",nID,nID-ID_MY_MENU_START);
MessageBox(strMenuID);
}
相关文章推荐
- 动态创建菜单,添加菜单,执行自己的菜单事件
- javascript dom 动态创建省市纵向列表菜单
- JavaScript创建水平导航下拉菜单
- 动态创建菜单时出错 afxwin1.inl 1023
- 动态创建菜单添加响应函数
- 动态创建菜单
- 用C#替换宏,实现动态创建Excel下拉框及批注
- 动态创建菜单
- 菜单学习和动态创建菜单
- ajax+js动态创建四级联动菜单
- 【MFC】VS2013 动态创建快捷菜单(右键菜单)
- 动态创建button并显示菜单
- 动态创建菜单
- JS操作select下拉框动态变动(创建/删除/获取)
- JS操作select下拉框动态变动(创建/删除/获取)
- CMFCMenuBar动态删除菜单和创建新菜单
- 动态创建菜单和动态关联菜单项事件
- 用C#与XML创建动态分层菜单
- C#入门学习-----菜单应用(添加剂快捷方式、设置菜单项是否可用、修改菜单字体、创建级联菜单、级联菜单的动态合并)
- 动态创建级联菜单