在c++中创建TNotifyEvent用于应用程序级别
Create TNotifyEvent in C++ for use at Application level
我需要在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
文件中这样写时,它会报错
无法将'void(*)(TObject *)'转换为'TNotifyEvent'
如果我更改函数以返回TNotifyEvent
(无论如何都不应该工作),它会给我
无法将'TNotifyEvent'转换为'TNotifyEvent'
那么,我应该如何去写一个函数挂钩到我的应用程序属性?
您正在尝试分配一个独立的函数,而期望使用非静态类方法。您有两个选择:
1)将事件处理程序移动到helper类中:
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
事件处理程序。
Update:或者,如果您的项目有任何TForm
或TDataModule
对象,您可以简单地在其中一个上放置TApplicationEvents
组件,并在设计时为其分配OnDeactivate
事件处理程序。然后,它将为您钩入应用程序的OnDeactivate
事件。
你差不多就是这样了。
我所做的是创建一个包含各种动作的TActionList。我用下面的代码创建了一个将在表单OnCreate事件上调用的动作:
void __fastcall TForm1::onCreateActionExecute(TObject *Sender)
{
Application->OnDeactivate = MyAppDeactivate;
}
,然后添加一个小测试函数到我的表单:
void __fastcall MyAppDeactivate(TObject *Sender) { ShowMessage("Deactivate"); };
- "string.h"在构建适用于iOS的qt应用程序中找不到消息
- 适用于 WebView2 旧版本的示例应用程序
- 适用于 macOS 的 Xcode 应用程序。这就是我设置从USB麦克风输入获取音频的方式。一年前工作,现在没有了。为什么
- 用于检索当前正在使用的应用程序的函数
- 适用于 macOS 的 Qt 5.9.1 的系统托盘应用程序
- 虽然循环不适用于数组应用程序
- 指定在用户固定我的应用程序时用于运行应用程序的命令参数
- 用于管理 CATIA 文件的 Web 应用程序
- QWebView 用于在桌面应用程序中运行 javascript (D3) - 当 HTML 更改时重新加载速度很慢
- C DLL通过C#UWP应用程序中的Win运行时组件适用于ARM,但对于X86/X64不适用于
- 是否有任何用于ConstexPR操作员 (INT)的应用程序(INT)
- 用于创建 Windows 应用程序的 MSDN 应用程序教程
- 拥有用于QT应用程序的Web用户界面的最佳方法
- 发送消息WM_SETTEXT不适用于 MFC 应用程序的另一个应用程序
- 在Visual Studio 2017上编译适用于Android的SDL2应用程序时缺少 libBox2D.so
- RabbitMQ vs NodeJS 插件,用于C++应用程序集成
- 用于创建使用XML中定义的GUI的C 本机应用程序的库
- QT 4.x/5.x和OpenGL用于桌面GUI应用程序:选择哪种模块
- 谷歌性能工具可以用于分析C应用程序吗?
- 语言选择:适用于Windows应用商店应用程序的C++或C#