在C++Builder中动态创建控件并处理添加事件处理
2003-09-17 08:52
721 查看
主页:http://www.maxss.net
邮件:maxchou@163.com
当开发类似解释程序或实现可视化操作功能等一类的应用程序时,都需要动态地创建控件(对象),而且还要为这些控件添加适当的事件处理程序,下面将介绍在C++Builder中如何实现基本的实现框架。
动态创建控件的一般过程:
TButton *btn = new TButton(this);
btn->Caption = "Button1";
btn->Parent = this;
btn->Show();
下面结合一个动态生成菜单的例子来实践如何动态创建控件并处理添加事件处理。
先编写一个函数用向一个已存在的菜单对象中插入菜单项:
void __fastcall TForm1::AddContextMenuItem(TPopupMenu *pMenu,
AnsiString caption, unsigned int tag, TNotifyEvent notifyEvent)
参数:
pMenu: 已存在的TPopupMenu对象指针
caption: 菜单项的标题
tag: 菜单项的tag值,用于标识不同的TMenuItem对象
notifyEvent: 该菜单项的事件处理函数
函数实现:
然后编写调用AddContextMenuItem(...)的函数CreateContextMenu(),定义如下:
FContextMenu是TForm1的成员变量,UpdateContextMenuItem()是用于在FContextMenu的Popup事件中更新菜单项。
MenuItemClick与NullNotifyEvent都是TForm1中成员函数,是动态创建的控件的事件处理函数,格式为:
void __fastcall TForm1::MenuItemClick(TObject *Sender)
void __fastcall TForm1::NullNotifyEvent(TObject *Sender)
上面是我自己的一点心得,希望可以与大学继续交流程序设计的经验。
邮件:maxchou@163.com
当开发类似解释程序或实现可视化操作功能等一类的应用程序时,都需要动态地创建控件(对象),而且还要为这些控件添加适当的事件处理程序,下面将介绍在C++Builder中如何实现基本的实现框架。
动态创建控件的一般过程:
TButton *btn = new TButton(this);
btn->Caption = "Button1";
btn->Parent = this;
btn->Show();
下面结合一个动态生成菜单的例子来实践如何动态创建控件并处理添加事件处理。
先编写一个函数用向一个已存在的菜单对象中插入菜单项:
void __fastcall TForm1::AddContextMenuItem(TPopupMenu *pMenu,
AnsiString caption, unsigned int tag, TNotifyEvent notifyEvent)
参数:
pMenu: 已存在的TPopupMenu对象指针
caption: 菜单项的标题
tag: 菜单项的tag值,用于标识不同的TMenuItem对象
notifyEvent: 该菜单项的事件处理函数
函数实现:
TMenuItem *mnuItem = new TMenuItem(pMenu); // Create new item pMenu->Items->Add(mnuItem); // Add it to pMenu mnuItem->Name = "CM_" + IntToStr(tag); mnuItem->Caption = caption; mnuItem->ImageIndex = imgIndex; mnuItem->Tag = tag; mnuItem->OnClick = notifyEvent; // Assign it an event handler |
void __fastcall TForm1::CreateContextMenu(void) { FTagInc = 0; FContextMenu = new TPopupMenu(this); FContextMenu->AutoHotkeys = maManual; FContextMenu->OnPopup = UpdateContextMenuItem; AddContextMenuItem(FContextMenu, "菜单项 1", FTagInc++, MenuItemClick); AddContextMenuItem(FContextMenu, "菜单项 2", FTagInc++, MenuItemClick); AddContextMenuItem(FContextMenu, "-", FTagInc++, NullNotifyEvent); AddContextMenuItem(FContextMenu, "菜单项 3", FTagInc++, MenuItemClick); } |
MenuItemClick与NullNotifyEvent都是TForm1中成员函数,是动态创建的控件的事件处理函数,格式为:
void __fastcall TForm1::MenuItemClick(TObject *Sender)
void __fastcall TForm1::NullNotifyEvent(TObject *Sender)
上面是我自己的一点心得,希望可以与大学继续交流程序设计的经验。
相关文章推荐
- 在C++Builder中实现遍历并载入指定目录
- 用C++Builder实现任务栏图标动画效果
- 用C++Builder开发具有历史记录功能的编辑控件
- 善用C++Builder中的快捷键来提高编码和开发的效率
- C++基本功:全面掌握const、volatile和mutable关键字
- 洗牌的一个C++类!
- 学习C++(一) 我现在理解的C++
- 难道C++程序员不也是人吗?
- Thinking again in C++(五)深入认识对象初始化
- 异常处理方法
- 数据封装在vc中的应用
- C++ Builder 初学问与答 (十二)
- C++ Builder 初学问与答 (十一)
- C++ Builder 初学问与答 (十)
- C++ Builder 初学问与答 (九)
- 怎样在VC++下调试COM对象
- C++中的文件输入/输出(5):二进制文件的处理
- C++中的文件输入/输出(4):检测输入/输出的状态标志
- C++ Builder 初学问与答(八)
- C++中的文件输入/输出(3):掌握输入/输出流