尝试在同一时间在任务栏上显示多个表单时,我遇到了一些问题。 我发现我需要使用以下内容:
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 *)
你知道其他任何替代方法吗? 如果你可以帮助我,从现在开始,感谢很多!
答案 0 :(得分:1)
您显示的代码段仅适用于VCL。
FireMonkey不允许您像VCL那样自定义Form的HWND的创建。 HWND创建隐藏在FireMonkey内部使用的私有接口(TPlatformWin.CreateWindow()
)后面。这就是FireMonkey中没有CreateParams
的原因。
但是,您仍然可以访问HWND,但只能在创建后才能访问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
另见: