D
Voila, wen's interessiert :
//ApppendMenu fuegt ein existierendes Menue an
//ein anderes Menu an.
bool AppendMenu(HMENU hDestMenu, HMENU hSourceMenu)
{
//Anzahl der Menueeintraege des Quellmenues
int Source_Count = GetMenuItemCount(hSourceMenu);
//Aktuelle Anzahl der Eintraege im Zielmenue
int Dest_Count = GetMenuItemCount(hDestMenu);
if ((Source_Count == 0) || (hDestMenu == 0) || (hSourceMenu == 0))
return FALSE;
for (int i = 0; i < Source_Count;i++)
{
MENUITEMINFO info;
info.cbSize = sizeof(MENUITEMINFO);
info.fMask = MIIM_SUBMENU | MIIM_STRING | MIIM_CHECKMARKS | MIIM_DATA | MIIM_FTYPE | MIIM_ID | MIIM_STATE;
//Stringbehaelter muss NULL sein, um die Stringlaenge zu erhalten
info.dwTypeData = NULL;
//ermittelt Menueeintragsinfos
//muss zuerst aufgerufen werden, um die Laenge des
//Menutextes zu ermitteln. Steht in cch
GetMenuItemInfo(hSourceMenu,i, TRUE, &info);
//wenn es kein Seperator ist, muss der Text ermittelt werden
if ((info.fType != MFT_SEPARATOR))
{
//die Laenge des Strings muss erhoeht werden
info.cch++;
//Speicher fuer den String anlegen
info.dwTypeData = new char[info.cch];
memset(info.dwTypeData,0,info.cch);
//String und weitere Menuedaten ermitteln
GetMenuItemInfo(hSourceMenu,i, TRUE, &info);
}
//Menueitem unterhalb des letzten Eintrags einfuegen
InsertMenuItem(hDestMenu,Dest_Count + 1,TRUE,&info);
//Speicher loeschen
if (info.dwTypeData != NULL)
{
delete[] info.dwTypeData;
}
//Anzahl neu bestimmen
Dest_Count = GetMenuItemCount(hDestMenu);
}
return true;
}