Wie kann ich Menüs dynamisch erweitern?
-
Hi Frenzy!
Habe das Problem so gelöst gefällt mir zwar noch nicht 100% aber egal
also in den Popup menu in den die Einträge dynamisch erzeugt werden sollen habe ich ein dummy menupunkt eingefügt damit der zeiger nicht ins leer bzw ungültige adresse zeigt. diesen dummy eintrag lösche ich dann dynamisch wieder raus nach dem ich die einträge eingetragen habe. habe in meinen dialog feld ne m_variable von typ cmenu erstellt. bei oninitial
m_Menu.LoadMenu(IDR_MENU1) und gebe dies Recource nicht wie üblich mit m_Menu.Detach(); wieder frei. da nach gehts hier der code:
BOOL CCdromDlg::OnInitDialog()
{....m_Menu.LoadMenu(IDR_MENU1);
}
dann erzeuge ich es mit
void CCdromDlg::CreatePopUpMenu()
{
CMenu *submenu, *smenu;
submenu=m_Menu.GetSubMenu(0);
smenu=submenu->GetSubMenu(0);
for (UINT i = 0; i < m_iAnzLaufwerke; i++)
{
smenu->InsertMenu(0,MF_BYCOMMAND,pStart[i].n_ID,pStart[i].Laufwerk);
}
smenu->DeleteMenu(0,MF_BYPOSITION);
smenu=submenu->GetSubMenu(1);
for (i = 0; i < m_iAnzLaufwerke; i++)
{
smenu->InsertMenu(0,MF_BYCOMMAND,pStart[i].n_ID+26,pStart[i].Laufwerk);
}
smenu->DeleteMenu(0,MF_BYPOSITION);
//m_Menu.Detach();//Recource wieder freigeben
}hoffe das hilft weiter
-
Hi!
So hatte ich das ja auch schon gelöst, aber es sollte ja auch ne feinere Methode geben, oder?
Der sonstige Weg war ja in der FAQ sehr schön beschrieben, aber nen Dummy Eintrag über den RessourcenEditor zu generieren und dann wieder zu löschen, kann eigentlich nicht die endgültige Lösung sein.
-
Sorry aber ne bessere Idee hatte ich noch nicht falls du eine finden solltes kannst du die ja hier Posten
-
Macht ja nix.
Es klappt so, auch wenn es in meinen Augen net so die feine Art ist. Irgendwie muß es ja auch anders gehen.
Sobald ich was habe poste ich es hier.
-
*böses doppelpost*
-
So hab mal Lösung falls es dich noch interessiert....
CMenu *submenu;
submenu=m_Menu.GetSubMenu(0);
CMenu *pMenu = new CMenu;
pMenu->CreatePopupMenu();
submenu->InsertMenu(0, MF_BYPOSITION | MF_POPUP, (UINT)pMenu->m_hMenu, pStart[i].Laufwerk);
pMenu->InsertMenu(0,MF_BYPOSITION , pStart[i].n_ID, "Öffnen");damit klappt es
musst du halt noch so anpassen wie du es bei dir brauchst
-
Vielen Dank.
Ich habe es jetzt schon über die Version mit dem Dummy-Eintrag gelöst, aber Deine Lösung werde ich mir auch nochmal ansehen.
Vielleicht mache ich ja doch nochmal eine Änderung.
-
das ist doch recht simpel. ihr habt doch im prinzip nur menü eingebaut. aber was ist mit den click events?
das macht mich zu schaffen. menüs dynamisch einbauen ist ja ok, aber ich muss ja nun jedem menüpunkt ein click event geben, also was passieren soll wenn einer von den dynmischen menüs ein click ausgelöst wurde.
oder habt ihr das schon irgendwie gemacht? würd mich interessieren.
-
Vielleicht mal etwas ganz interessantes http://www.codeproject.com/dll/plugin.asp
-
Edenus schrieb:
das ist doch recht simpel. ihr habt doch im prinzip nur menü eingebaut. aber was ist mit den click events?
das macht mich zu schaffen. menüs dynamisch einbauen ist ja ok, aber ich muss ja nun jedem menüpunkt ein click event geben, also was passieren soll wenn einer von den dynmischen menüs ein click ausgelöst wurde.
oder habt ihr das schon irgendwie gemacht? würd mich interessieren.
Das mit den Klick Events steht auch in der FAQ.
Du musst jedem Menu eine eindeutige ID geben, und das dann
in der OnCommand entsprechend filtern.Devil