首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ Builder >

关于在DLL中添加菜单TMenuItem的有关问题

2012-05-24 
求助关于在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中插入的菜单如果是插在中间的,那么原来主程序中后面的菜单项的OnClick事件居然变成了DLL中的这个SubItemClick事件
其实把循环中改成TMenuItem *subitem = new TMenuItem(pMenu);
也是一样的

[解决办法]
探讨
不带包编译,Build with runtime package这个选项没勾

[解决办法]
我遇到了类似的问题?
我的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(...)
{

}

}

热点排行