高手请进来看看! 请教如何自定义菜单的一个事件(内详!)

kingfish 2002-10-18 08:26:43
1.BCB帮助中:MenuItem的OnAdvancedDraw (请注意:const)
typedef void __fastcall (__closure *TAdvancedMenuDrawItemEvent)(System::TObject* Sender, Graphics::TCanvas* ACanvas, const Windows::TRect &ARect, TOwnerDrawState State);


2.直接在Object Inspector中双击OnAdvancedDraw产生一下代码(无const)
void __fastcall TForm1::N1AdvancedDrawItem(TObject *Sender,
TCanvas *ACanvas, TRect &ARect, TOwnerDrawState State)
{

}


3.问题:如何自定义菜单项的OnAdvancedDrawItem事件???

由于我的菜单项是动态生成,必须在程序中指定OnAdvancedDrawItem

item->OnAdvancedDrawItem = myAdvancedDrawItem;
由于const的存在,此句编译自然通不过,即使强制转换类型也不行


void __fastcall TForm1::myAdvancedDrawItem(TObject *Sender,
TCanvas *ACanvas, TRect &ARect, TOwnerDrawState State)
{
//其中需要更改ARect
}


各位有什么转换方法或者其它办法?
...全文
205 7 打赏 收藏 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
kingfish 2002-10-18
  • 打赏
  • 举报
回复
用其它办法解决了,谢谢参与,散分!
hello_wyq 2002-10-18
  • 打赏
  • 举报
回复
这个还不简单,增加一个listener不就可以了。
比如:
void __fastcall TForm1::myAdvancedDrawItem(TObject *Sender,
TCanvas *ACanvas, TRect &ARect, TOwnerDrawState State)
{
//其他代码
。。。
yourHandlerForMenuItem(...);
}
kingfish 2002-10-18
  • 打赏
  • 举报
回复
To poplink(洋洋):

能否详细的说说?
poplink 2002-10-18
  • 打赏
  • 举报
回复
可以修改ARect的
我在这样用,没问题:
kingfish 2002-10-18
  • 打赏
  • 举报
回复
To bluebird97073(天道酬勤):
要自画菜单,必须要改ARect

UP,大家再看看
gfh21cn 2002-10-18
  • 打赏
  • 举报
回复
UP
如果说是你强制修改OnAdvancedDrawItem事件的参数类型
这样可以复制
但是不能修改ARect了

UP
bluebird97073 2002-10-18
  • 打赏
  • 举报
回复

public: // User declarations
__fastcall TForm1(TComponent* Owner);
void __fastcall myAdvancedDrawItem(System::TObject* Sender, Graphics::
TCanvas* ACanvas, const Types::TRect &ARect, TOwnerDrawState State);


void __fastcall TForm1::myAdvancedDrawItem(System::TObject* Sender, Graphics::
TCanvas* ACanvas, const Types::TRect &ARect, TOwnerDrawState State)

{
//其中需要更改ARect
}

13,871

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧