在我的SDL程序启动时,在没有按下物理鼠标左键的情况下注册了鼠标左键事件。按下下一个物理左按钮未注册。所有其他键和按钮正常工作。单击.exe时,鼠标不在窗口的位置。
以下是该事件的规范(取自SDL_Event结构):
type=1025 (SDL_MOUSEBUTTONDOWN)
timestamp=24
windowID=1
which=0
button=1 (SDL_BUTTON_LEFT)
state=1
clicks=1
x=0
y=0
我在使用MinGW(gcc版本4.8.1)进行Windows 8.1编译。
我有SDL版本2.0.3
这是我的源代码:
#include <stdio.h>
#include <SDL.h>
int main(int argc, char* argv[])
{
SDL_Window* window = NULL;
SDL_Surface* screen = NULL;
SDL_Event ev;
SDL_Init(SDL_INIT_EVERYTHING);
window = SDL_CreateWindow("SDL", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 800, 600, 0);
screen = SDL_GetWindowSurface(window);
while (1) {
while (SDL_PollEvent(&ev)) {
if (ev.type == SDL_QUIT)
return 0;
else {
if (ev.type == SDL_MOUSEBUTTONDOWN) {
if (ev.button.button == SDL_BUTTON_LEFT) {
printf("MOUSE DOWN\n");
printf("type=%d\n", ev.button.type);
printf("timestamp=%d\n", ev.button.timestamp);
printf("windowID=%d\n", ev.button.windowID);
printf("which=%d\n", ev.button.which);
printf("button=%d\n", ev.button.button);
printf("state=%d\n", ev.button.state);
printf("clicks=%d\n", ev.button.clicks);
printf("x=%d\n", ev.button.x);
printf("y=%d\n\n", ev.button.y);
}
}
}
}
SDL_UpdateWindowSurface(window);
SDL_Delay(5);
}
SDL_FreeSurface(screen);
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
我试图通过调用SDL_PumpEvents()和SDL_FlushEvents()来解决它,虽然这删除了第一个(错误的)事件,但第二次按下仍未注册。
我注意到一些奇怪的事情是,当我通过右键单击然后按下&#39;打开&#39;打开程序.exe时,它按预期工作。
如果有人能够阐明这个问题,我们将非常感激。