移动SDL视频表面

时间:2010-04-11 20:54:25

标签: c# winapi sdl sdl.net

有人知道如何在程序上围绕屏幕移动我的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);

我在SurfaceVideo找不到任何可以执行此任务的属性,而FromHandle正在返回Null。

窗口正在初始化从屏幕底部掉下来。 alt text http://i42.tinypic.com/2mespe0.png

有什么想法吗?

更新

我已经看过这段代码,但无法解决一个等效的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 ++会涉及多少工作?

感谢。

2 个答案:

答案 0 :(得分: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);

其中x和y在屏幕坐标中。如有必要,请使用Control.PointToScreen()。

答案 1 :(得分:3)

根据您找到的C ++代码判断,您可以P / Invoke Win32 SetWindowPos函数并传递Video.WindowHandle句柄(以及您的大小和位置参数),因为没有似乎是.NET提供的解决方案。