我要做一个动态添加的菜单,就像VC6的[窗口]菜单一样,但是没有固定的菜单项,全是动态添加的.
本来很简单的事,资源里放个空菜单,运行时AppendMenu就行.
但是,VC6的资源编辑器,只要一保存,这个空菜单就变成一个菜单项.怎么搞的!
我只好在菜单中添加一个分隔符,运行时先删掉分隔符再添加新的菜单项.
问题虽然解决了,总是看着不爽.问问大家,怎么才能把空菜单加到资源里?
本来很简单的事,资源里放个空菜单,运行时AppendMenu就行.
但是,VC6的资源编辑器,只要一保存,这个空菜单就变成一个菜单项.怎么搞的!
我只好在菜单中添加一个分隔符,运行时先删掉分隔符再添加新的菜单项.
问题虽然解决了,总是看着不爽.问问大家,怎么才能把空菜单加到资源里?
{
...
CMenu menu;
...
}//从数据库中加载菜单
void CDynamicMenuDlg::LoadMenuFromDatabase()
{ CString sql;
sql.Format( "select * from tb_menuinfo where 上级菜单 is NULL");
m_pRecord = m_pCon->Execute((_bstr_t)sql,NULL,adCmdText);
CMenu m_menu;
CString c_menustr;
while (! m_pRecord->ADOEOF)
{
c_menustr = m_pRecord->GetCollect("菜单名称").bstrVal;
//menu.AppendMenu(MF_STRING,-1,c_menustr);
LoadSubMenu(&menu,c_menustr);
m_pRecord->MoveNext();
}
SetMenu(&menu);
}
CMenu MainTPMMenu;
CMenu MiscFruitMenu; MainTPMMenu.CreatePopupMenu();
MainTPMMenu.AppendMenu(MF_STRING | MF_ENABLED, 42, "Apples");
MainTPMMenu.AppendMenu(MF_STRING | MF_ENABLED, 43, "Pears");
MainTPMMenu.AppendMenu(MF_STRING | MF_ENABLED, 43, "Grapes");
MiscFruitMenu.CreatePopupMenu();
MiscFruitMenu.AppendMenu(MF_STRING | MF_ENABLED, 40, "Mangos");
MiscFruitMenu.AppendMenu(MF_STRING | MF_ENABLED, 41, "Tomatoes");
MainTPMMenu.AppendMenu(MF_STRING | MF_POPUP | MF_ENABLED,
(UINT)MiscFruitMenu.m_hMenu,
"Other Misc. Fruit");
MainTPMMenu.TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x,
pt.y, this, NULL);
我的资源里有一个菜单,其中有一个子菜单叫[设备],有没有可用的设备,有几个设备,是运行时才知道的,所以编辑菜单时应该[设备]底下是没有菜单项的,也就是个空的弹出菜单.但是VC6似乎不允许这种做法,他自作主张把[设备]改成一个菜单项.我就是要问,怎么样使[设备]这个弹出菜单原样保存在资源里?至于CreatePopupMenu拉,我不知道啊?就是嫌她烦.某个仁兄还整出了sql...你们费劲回答了半天,我的问题还是没解决,我该给不给你分呢?发点牢骚,莫怪.