2010-04-11 7 views
5

Kann jemand meine SDL.net Videooberfläche programmatisch um den Bildschirm bewegen?SDL-Videooberfläche bewegen

Surface videoContext = Video.SetVideoMode(1024, 768, 32, false, false, false, true, true); 

var a = System.Windows.Forms.Control.FromHandle(Video.WindowHandle); 
var b = System.Windows.Forms.NativeWindow.FromHandle(Video.WindowHandle); 

Ich kann keine Objekte in Surface oder Video finden, die die Arbeit machen, und FromHandle zurückkehren Null.

Das Fenster wird initialisiert und fällt vom unteren Bildschirmrand ab. alt text http://i42.tinypic.com/2mespe0.png

Irgendwelche Ideen?

Update:

ich diesen Code gesehen habe, aber kann keine equivilent C# implimentation trainieren. Kann jemand helfen?

#ifdef WIN32 
#include <SDL_syswm.h> 
SDL_SysWMinfo i; 
SDL_VERSION(&i.version); 
if (SDL_GetWMInfo (&i)) { 
    HWND hwnd = i.window; 
    SetWindowPos(hwnd, HWND_TOP, x, y, width, height, flags); 
} 

Fehlgeschlagen, wie viel Arbeit ist in einigen C++ in meinem C# Projekt beteiligt?

Danke.

+0

Notizen zu sich selbst: Suchen Sie hier nach Hinweisen, wenn Sie nach Hause kommen ... http://fixunix.com/xwindows/91816-coords-window-under-sdl.html, http://www.gamedev.net/ Community/Foren/topic.asp? topic_id = 328286 – gingerbreadboy

Antwort

4

Sie werden diese Erklärungen benötigen:

private static IntPtr HWND_TOP = IntPtr.Zero; 
    private static int SWP_FLAGS = 0x004 | 0x0010; 
    [System.Runtime.InteropServices.DllImport("user32.dll")] 
    private static extern bool SetWindowPos(IntPtr hWnd, IntPtr after, int x, int y, int width, int height, int flags); 

Verbrauch:

SetWindowPos(Video.WindowHandle, HWND_TOP, x, y, width, height, SWP_FLAGS); 

wobei x und y in Bildschirmkoordinaten sind. Verwenden Sie ggf. Control.PointToScreen().

3

Nach dem C++ - Code, den Sie gefunden haben, können Sie die Win32 SetWindowPos Funktion aufrufen und die Video.WindowHandle Handle (sowie Ihre Größe und Position Parameter) übergeben, da es scheint nicht eine Lösung von bereitgestellt werden .NETZ.