在SDL2 C#包装器中检测窗口事件

时间:2016-11-09 10:40:20

标签: c# sdl sdl-2

我使用SDL2 C# wrapper通过FNA,我需要能够检测窗口何时调整大小,最小化/最大化等等。从我发现的内容看来,我应该使用SDL_EventFilter代表和SDL_WindowEventID枚举。我尝试使用SDL_AddEventWatchSDL_SetEventFilter方法附加此类活动,但我没有收到与窗口管理相关的任何事件。

如何正确使用C#包装器中的SDL窗口事件?

1 个答案:

答案 0 :(得分:2)

在您的事件轮询循环中添加SDL_WINDOWEVENT的案例:

SDL_Event event;
while (SDL_PollEvent(out sdlEvent) == 1) {
     switch(sdlEvent.type) {
         case SDL_EventType.SDL_WINDOWEVENT:
             HandleWindowEvent(sdlEvent.window);
             break;

         // other events here ...
     }

     Thread.Sleep(1);
}

然后你可以有一个处理这些事件的方法:

HandleWindowEvents(SDL_WindowEvent wEvent) {
    switch(wEvent.windowEvent) {
        case SDL_WindowEventID.SDL_WINDOWEVENT_RESIZED:
            Console.WriteLine($"Window resized: {wEvent.data1}x{wEvent.data2}");
            break;

        // more window events here ...
    }
}
  

所有窗口事件都在the Wiki中列出。