【发布时间】:2009-10-18 13:54:53
【问题描述】:
我有一个 Delphi 项目,主窗体是另一个应用程序的子窗口。父应用程序(用 C++ 编写的 3D 游戏)有两种窗口状态,windowed 和 full screen。在窗口模式下,Delphi 表单完美地漂浮在父应用程序之上。可以点击、拖拽,没问题(在我主窗体的CreateParams过程中使用params.Style := WS_POPUP;):
procedure TMyForm.CreateParams(var Params: TCreateParams);
begin
inherited CreateParams(Params);
HandleToTheOtherApp := FindWindow('THE_OTHER_APP', nil);
if HandleToTheOtherApp = 0 then
begin
ShowMessage('The parent app was not found');
exit;
end;
params.Style := WS_POPUP;
params.WndParent := HandleToTheOtherApp;
params.WinClassName := 'MyAppClassName';
end;
但是,如果将父应用程序置于 全屏 模式(它使用 DirectX 9/10),我的 Delphi 表单将从视图中隐藏。它似乎仍然在屏幕上,我可以看到是否偶尔闪烁,但没有被重绘。
如果我单击窗口(或它看起来所在的位置),它会重新出现一秒钟,然后将游戏从全屏模式转储到窗口模式。显然,它不喜欢这种形式。该表格使用出现在该游戏的先前版本中,但可能是由于 DirectX 版本的更改(我的猜测)它不再出现。
该表单不会显示任何复杂的 3D 图形,仅显示按钮和列表框等基本控件。我尝试了各种 Window 样式并将其设置为 Doublebuffered,但均无济于事。也许有人已经成功地让一个窗口在这些情况下使用特定的功能、窗口样式或标题显示?
有没有办法让 Delphi 表单在 DirectX 环境中正确显示?
【问题讨论】:
-
我不知道有任何全屏游戏能够与窗口应用程序共存。即使我在一台显示器上全屏运行并单击另一台显示器上的窗口应用程序,它也会在失去焦点时将游戏转出全屏。我认为这是 Windows 的限制。
标签: delphi