有人知道如何在程序上围绕屏幕移动我的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。
窗口正在初始化从屏幕底部掉下来。 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 ++会涉及多少工作?
感谢。
答案 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提供的解决方案。