tags:

views:

166

answers:

1

I have a Delphi project and the main form is a child window of another application. The parent application (a 3D game coded in C++) has two window states, windowed and full screen. In windowed mode the Delphi form floats on top of the parent application perfectly. It can be clicked on, dragged around, no problem (using params.Style := WS_POPUP; in the CreateParams procedure of my main form):

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;

However if the parent application is put into full screen mode (it uses DirectX 9/10) my Delphi form is hidden from view. It appears to still be on the screen as I can see if flashing occasionally, but is not being redrawn.

If I click on the window (or where it appears to be) it re-appears for a second and then dumps the game out of full screen mode and back into windowed mode. Clearly there is something it doesn't like about the form. The form used to appear in previous editions of this game, but perhaps due to changes in the DirectX version (my guess) it no longer appears.

The form doesn't display anything complicated like 3D graphics, just basic controls like buttons and list boxes. I have tried various Window styles and made it Doublebuffered, all to no avail. Perhaps there is someone out there who has been successful in getting a window to show in these circumstances using a particular function, Window style or header?

Is there some way to make a Delphi form appear correctly within a DirectX environment?

+2  A: 

I don't think this can be done.

When a DirectX Video window becomes full screen, then DirectX takes over the complete screen drawing (similar to when you make a Windows Media Player full screen: all other apps disappear, and sometimes even the resolution changes).

Jeroen Pluimers