перемещение видео поверхности SDL - PullRequest
5 голосов
/ 12 апреля 2010

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

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.

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

Есть идеи?

Обновление:

Я видел этот код, но не могу выработать эквивалентную имплиментацию C #. Кто-нибудь может помочь?

#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 #?

Спасибо.

Ответы [ 2 ]

4 голосов
/ 20 апреля 2010

Вам понадобятся следующие объявления:

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

где x и y в экранных координатах. При необходимости используйте Control.PointToScreen ().

3 голосов
/ 16 апреля 2010

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

...