gpt4 book ai didi

c++ - 如何使用 FMX C++ 在任务栏上显示辅助表单?

转载 作者:行者123 更新时间:2023-11-28 06:23:32 35 4
gpt4 key购买 nike

我在尝试同时在任务栏上显示多个表单时遇到了一个小问题。我发现我需要使用以下内容:

WS_EX_APPWINDOW

所以我搜索了一下,然后找到了它:

class TForm2 : public TForm
{
__published: // IDE-managed Components
private: // User declarations
public: // User declarations
__fastcall TForm2(TComponent* Owner);
void __fastcall CreateParams(Controls::TCreateParams &Params);

};

void __fastcall TForm2::CreateParams(Controls::TCreateParams &Params)
{
TForm::CreateParams(Params);
Params.ExStyle = Params.ExStyle | WS_EX_APPWINDOW;
Params.WndParent = ParentWindow;
}

但是该函数仅适用于 VCL(TCreateParams 不是 Fmx::Controls 的成员)。

所以,我又搜索了一下,找到了(这个函数在OnCreate表单函数中):

SetWindowLong(Handle, GWL_EXSTYLE, WS_EX_APPWINDOW); 

但是我说了以下错误:

[bcc32 Error] Codigo.cpp(19): E2034 Cannot convert 'TWindowHandle * const' to 'HWND__ *'
Full parser context
Codigo.cpp(18): parsing: void _fastcall TfrmCodigo::FormCreate(TObject *)
[bcc32 Error] Codigo.cpp(19): E2342 Type mismatch in parameter 'hWnd' (wanted 'HWND__ *', got 'TWindowHandle *')
Full parser context
Codigo.cpp(18): parsing: void _fastcall TfrmCodigo::FormCreate(TObject *)

您知道其他替代方法吗? 不管你能不能帮我,从现在开始,非常感谢!

最佳答案

您显示的代码片段仅适用于 VCL。

FireMonkey 不允许您像 VCL 那样自定义创建 Form 的 HWND。 HWND 创建隐藏在 FireMonkey 内部使用的私有(private)接口(interface)后面 (TPlatformWin.CreateWindow())。这就是为什么 FireMonkey 中没有 CreateParams 的原因。

但是,您仍然可以访问 HWND,但只能在它创建之后。有一个 WindowHandleToPlatform()函数(它取代了旧的 FmxHandleToHWND() 函数)和一个 FormToHWND函数(在内部使用 WindowHandleToPlatform())。所有这些函数都是特定于 Windows 的,因此如果您要编写在多个平台上运行的 FireMonkey 代码,则必须用 #ifdef 将它们包装起来。

试试这个:

#ifdef _Windows
#include <FMX.Platform.Win.hpp>
#endif

...

#ifdef _Windows
//HWND hWnd = FmxHandleToHWND(Form2->Handle);
//HWND hWnd = WindowHandleToPlatform(Form2->Handle)->Wnd;
HWND hWnd = FormToHWND(Form2);
if (hWnd != NULL)
{
LONG Style = GetWindowLong(hWnd, GWL_EXSTYLE); // <-- don't forget this step!
SetWindowLong(hWnd, GWL_EXSTYLE, Style | WS_EX_APPWINDOW);
}
#endif

另见:

example of embarcadero WindowHandleToPlatform c++

关于c++ - 如何使用 FMX C++ 在任务栏上显示辅助表单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28929163/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com