2010-04-11 3 views
5

Кто-нибудь знает, как перемещать видео поверхность вашего экрана SDL.net по экрану?движущаяся поверхность видео SDL

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); 

Я не могу найти какие-либо свойства в Surface или Video, которые делают работу, и FromHandle возвращается Null.

Окно инициализируется падением в нижней части экрана. alt text http://i42.tinypic.com/2mespe0.png

Любые идеи?

Update:

Я видел этот код, но не может работать в equivilent C# implimentation. Может ли кто-нибудь помочь?

#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); 
} 

В противном случае, сколько работы связано с включением некоторых C++ в мой проект C#?

Спасибо.

+0

примечания к себе: посмотрите на подсказки, когда вы вернетесь домой ... http://fixunix.com/xwindows/91816-coords-window-under-sdl.html, http://www.gamedev.net/ сообщества/форумы/topic.asp? topic_id = 328286 – gingerbreadboy

ответ

4

Вам нужны эти объявления:

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); 

Использование:

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

где х и у находятся в координатах экрана. Используйте Control.PointToScreen(), если необходимо.

3

Судя по коду C++, который вы нашли, вы можете выполнить P/Invoke функцию Win32 SetWindowPos и передать дескриптор Video.WindowHandle (а также параметры вашего размера и положения), поскольку не существует решения, предоставляемого .СЕТЬ.