none
Game Overlay mit C# RRS feed

  • Frage

  • Hallo,

    ich versuche ein Overlay für ein Spiel zu schreiben. Soll heißen, ich habe ein Fullscreen-Game (DirectX/XNA) und möchte (möglichst mit WPF) noch ein Window darüberlegen.

    Sämtliche "Topmost" versuche sind natürlich nutzlos. Gibt es eine Möglichkeit ein WPF Window auf oder über ein Fullscreen-Object dieser Art zu rendern?

    Bin für jeden Ansätz dankbar.

     

    viele Grüße,

    Alex

    • Verschoben Robert BreitenhoferModerator Mittwoch, 16. Februar 2011 07:39 WPF (aus:Generelle Fragen zu MSDN Online Deutschland oder den MSDN Foren)
    Dienstag, 15. Februar 2011 21:36

Antworten

Alle Antworten

  • Hi Alex,

    soweit ich weiß, leider nein. Es handelt sich hierbei um das "Airspace"-Problem. Soweit ich gehört habe, soll es mit WPF v.Next angegangen werden.

    Gruß

    Jus

     

    Mittwoch, 16. Februar 2011 19:52
  • mmh ok. Wisst ihr ob das mit windows Forms möglich ist?
    Mittwoch, 16. Februar 2011 20:39
  • Hallo Ahn1,

    Schau Dir mal die folgenden Links an. Vielleicht findest Du etwas dass Dir weiter helfen kann.

    Hosting a WPF Control in a Windows Forms Application

    how to Launch WPF window from windows forms?

    Du kannst auch noch eine Application in eine Windows Forms Application „einbetten“ wie folgt:

    [C# Code]

        [DllImport("user32", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true)]
        public static extern IntPtr SetParent(IntPtr HWNDChild, IntPtr HWNDNewParent);
    
        [DllImport("user32.dll")]
        static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
    
        [DllImport("user32.dll")]
        [return: MarshalAs(UnmanagedType.Bool)]
        private static extern bool IsWindowVisible(IntPtr hWnd);
    
        private const int WM_SYSCOMMAND = 274;
        private const int SC_MAXIMIZE = 61488;
    
        private void button1_Click(object sender, EventArgs e)
        {
          Process proc = Process.Start(@"C:\Program Files (x86)\Microsoft Office\Office14\WINWORD.EXE");
          //proc.WaitForInputIdle();
          Thread.Sleep(500);
          SetParent(proc.MainWindowHandle, this.panel1.Handle);
          SendMessage(proc.MainWindowHandle, WM_SYSCOMMAND, SC_MAXIMIZE, 0);
    
        }
    

    Grüße,

    Robert

    Freitag, 18. März 2011 17:31
    Moderator