尝试同时在任务栏上显示多个表单时,我遇到了一个小问题。我发现我需要使用以下内容:
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一样自定义窗体的HWND的创建。HWND创建隐藏在FireMonkey内部使用的专用接口(TPlatformWin.CreateWindow()
)的后面。这就是为什么CreateParams
FireMonkey中没有。
但是,您仍然可以访问HWND,但只能在创建HWND之后。有一个WindowHandleToPlatform()
函数(代替旧的FmxHandleToHWND()
函数)和一个FormToHWND
函数(WindowHandleToPlatform()
内部使用)。所有这些功能都是特定于Windows的,因此,#ifdef
如果要编写在多个平台上运行的FireMonkey代码,则必须用来包装它们。
试试这个:
#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
另请参阅:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句