求助关于在DLL中添加菜单TMenuItem的问题我编写了一个DLL,把主程序的Popup菜单的指针传到这个DLL中,然后在
求助关于在DLL中添加菜单TMenuItem的问题
我编写了一个DLL,把主程序的Popup菜单的指针传到这个DLL中,然后在DLL中添加子菜单,菜单能添加成功,但是菜单的OnClick事件只能在前3个子菜单中触发,非常奇怪,如下示例:
这是一个DLL中的函数:
void __stdcall AddSubMenu(LPVOID popMenu)
{
TPopupMenu *pMenu = (TPopupMenu *)popMenu;
TMenuItem *item = new TMenuItem(item);
item->Caption = "NewItem";
pMenu->Add(item);
//下在增加子菜单,SubItemClick是菜单单击事件函数
for(int i=0;i<10;i++)
{
TMenuItem *subitem = new TMenuItem(item);
subitem->Caption = "SubItem"+String(i);
subitem->OnClick = SubItemClick;
item->Add(subitem);
}
}
以后函数能添加菜单成功,但只是前面3个SubItem能触发OnClick事件,后面的不触发,不知为什么,请高手指教?
[解决办法]
[解决办法][解决办法]我遇到了类似的问题?
我的dll中插入宿主程序的菜单是TMainMenu;
我暂时的解决方法是:将TMainMenu先保存下拉 清除后,重新加载;
void AddMainMenuItem(TMainMenu * mMainMenu)
{
TMenuItem * mniNodeInfoIO = NULL;
mniNodeInfoIO = new TMenuItem(mMainMenu);
mniNodeInfoIO->Caption = "";
mniNodeInfoIO->OnClick = MenuClick_Event->OnClick;
SaveMenuToAnOther(mmNew,mMainMenu);
mMainMenu->Items->Clear();
SaveMenuToAnOther(mMainMenu,mmNew);
mMainMenu->Items->Add(mniNodeInfoIO );
}
void __fastcall SaveMenuToAnOther(const TMainMenu *mmuDec,const TMainMenu *const mmuSrc)
{
TMenuItem * newMenuStemp = NULL;
for(int i=0;i < mmuSrc->Items->Count; i++)
{
try
{
TMenuItem * oldMenuStemp = mmuSrc->Items->Items[i];
newMenuStemp = new TMenuItem(mmuSrc->Owner);
newMenuStemp->Caption = oldMenuStemp->Caption;
newMenuStemp->OnClick = oldMenuStemp->OnClick;
mmuDec->Items->Add(newMenuStemp);
for( int j=0;j< oldMenuStemp->Count;j++)
{
TMenuItem * SubMenuStemp = new TMenuItem(mmuSrc->Owner);
SubMenuStemp->Caption = oldMenuStemp->Items[j]->Caption;
SubMenuStemp->OnClick = oldMenuStemp->Items[j]->OnClick;
newMenuStemp->Add(SubMenuStemp);
}
}catch(...)
{
}
}
}