我需要在C++ Builder中挂接到应用程序的OnDeactivate
事件。因此,我需要编写自己的函数以在OnDeactivate
事件为应用程序触发时运行,但我不知道在哪里或如何定义该函数。
理想情况下,我希望代码看起来像这样:
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
try
{
Application->Initialize();
Application->OnDeactivate = myFunction;
Application->Run();
}
后来:
void myFunction(TObject *Sender)
{
//Do Stuff
}
当我在
.cpp
文件中这样写时,它抱怨如果我更改函数以返回
TNotifyEvent
(无论如何都不应该工作),它会给我带来搞笑的错误因此,我应该如何编写一个函数以挂钩到我的Application属性?
最佳答案
您正在尝试分配一个独立的函数,该函数应使用非静态类方法。您有两种选择:
1)将事件处理程序移到帮助程序类中:
class Helper
{
public:
void __fastcall myFunction(TObject *Sender)
{
// ... do stuff
}
};
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
try
{
Application->Initialize();
Helper helper;
Application->OnDeactivate = &helper.myFunction;
...
}
...
}
2)将函数保留为非类函数,但给它一个额外的参数以接收编译器的
this
指针,然后使用TMethod
结构帮助您将其作为合适的TNotifyEvent
传递给事件:void __fastcall myFunction(void *pThis, TObject *Sender)
{
...
}
WINAPI _tWinMain(HINSTANCE, HINSTANCE, LPTSTR, int)
{
try
{
Application->Initialize();
TMethod m;
m.Data = NULL; // passed to the pThis parameter, can be whatever you want
m.Code = &myFunction;
Application->OnDeactivate = reinterpret_cast<TNotifyEvent&>(m);
...
}
...
}
话虽如此,如果未分配MainForm,则
TApplication::Run()
将立即退出,因此最简单的解决方案是将TApplicationEvents
组件放到MainForm上,然后可以在设计时为其分配OnDeactivate
事件处理程序。更新:或者,如果您的项目中有任何
TForm
或TDataModule
对象,则只需在其中一个对象上放置TApplicationEvents
组件,然后在设计时为其分配一个OnDeactivate
事件处理程序。然后它将为您连接到应用程序的OnDeactivate
事件。关于c++ - 在C++中创建TNotifyEvent以在应用程序级别使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7193174/