SDL2未接收到窗口事件
SDL2 not receiving window events
我已经在带有Xcode的Macbook上使用SDL2一段时间了,我很高兴。最近,我尝试接收一个失去焦点的事件,但它不起作用。经过一些修补,我发现没有收到任何窗口事件,除了一个类型为512的窗口事件,它以随机间隔每秒显示2-5次。WindowEventID
在枚举中,而不是十六进制格式,所以它不应该是某个十六进制数字。我在SDL2框架中搜索了512,但一无所获。其他事件,如SDL_QUIT
和SDL_KEYDOWN
也可以正常工作。有人知道发生了什么事吗?
这是我的事件循环:
SDL_Event event;
bool running = false;
while(running) {
while(SDL_PollEvent(&event)) {
if(event.type == SDL_QUIT)
running = false;
else if(event.type == SDL_KEYDOWN) {
cout << event.key.type << endl;
}
else if(event.type == SDL_WINDOWEVENT) {
cout << event.window.type << endl;
}
}
SDL_SetRenderDrawColor(renderer, 255, 255, 255, 255);
SDL_RenderClear(renderer);
SDL_RenderPresent(renderer);
}
您需要检查event.window.event
而不是event.window.type
,因为类型更通用,并且有一些其他用法(代码512与SDL_WINDOW_INPUT_FOCUS有关,每当您将光标移动到窗口或从窗口移动时,它都会触发)。所以你的代码可能是这样的:
while(SDL_PollEvent(&event)) {
switch(event.type)
{
case SDL_WINDOWEVENT:
switch(event.window.event)
{
case SDL_WINDOWEVENT_ENTER:
cout << "entered" << endl;
break;
case SDL_WINDOWEVENT_LEAVE:
cout << "left" << endl;
break;
}
break;
case SDL_KEYDOWN:
cout << "key pressed: " << event.key.keysym.sym << endl;
break;
}
}
相关文章:
- 处理闪烁窗口事件
- 等待 WaitForMultipleObjects 窗口中的事件数量可变
- Qt将鼠标移动事件转移到新窗口
- Wxwidgets - 如何添加调整大小事件处理程序以使"X"绘图随窗口调整大小?
- FLTK:窗口在 MacOS 上获得焦点时的事件
- C++ winAPI 无法处理子窗口事件
- 将输入事件发送到窗口
- 如何添加事件以退出窗口
- 无法从窗口获取 SDL2 事件
- XCB_POLL_FOR_EVENT未检测到关闭窗口的XCB_CLIENT_MESSAGE事件
- Xdamage:获取窗口内容更改的事件
- SFML FPS访问窗口事件的问题
- 捕获Linux/Ubuntu(屏幕捕获 鼠标/键盘事件)中的窗口事件
- 如何在从主窗口事件处理程序调用后在子窗口中创建按钮
- 哪些窗口事件会影响 MDIGetActive()?导致OnMDIActivate()的事件并不是唯一的事件
- 如何枚举和删除窗口事件
- SDL2未接收到窗口事件
- SDL_SetWindowSize是否触发一个窗口事件?
- 移动X11窗口上的窗口事件
- 窗口事件回调函数C++的问题