gpt4 book ai didi

调整窗口大小后无法正确检索鼠标坐标

转载 作者:太空狗 更新时间:2023-10-29 15:09:08 25 4
gpt4 key购买 nike

下面是显示我面临的问题的简化代码。

代码的目的是创建一个 512x512 窗口,并在检测到左键单击时将其顶层表面的 Y 尺寸更改为 512x(512+25)。当检测到另一次左键单击时,我们将尺寸恢复为 512x512。

当检测到左键单击事件或检测到 mouseMotionEvent 时,我们显示(使用 printf())鼠标坐标。

观察到的奇怪行为:

当我运行代码时,我左键单击一次,窗口的 Y 尺寸发生变化,但是当我将鼠标移到新创建的区域内时,显示的 Y 坐标固定为 511。

有时我没有得到这种奇怪的行为,然后 Y 坐标可能大于 511。要得到这种奇怪的行为,左键单击几次,快速移动鼠标。

编译(linux):

$ gcc -o test test.c `sdl-config --cflags --libs`

来源:(test.c)

#include <stdlib.h>
#include <stdio.h>
#include <SDL.h>

/* Prototypes */
void event_handler(void);

/* global variables declaration */
SDL_Surface *screen=NULL;


/***** MAIN FUNCTION *****/
int main(int argc, char** argv)
{
/* init SDL */
if (SDL_Init(SDL_INIT_VIDEO) < 0) {
fprintf(stderr, "Erreur à l'initialisation de la SDL : %s\n", SDL_GetError());
exit(EXIT_FAILURE);
}

if ((screen = SDL_SetVideoMode(512, 512, 32, SDL_SWSURFACE )) == NULL) {
fprintf(stderr, "Graphic mode could not be correctly initialized : %s\n", SDL_GetError());
exit(EXIT_FAILURE);
}
SDL_WM_SetCaption("my window", NULL);

/* handle event & wait until quit_event is raised */
event_handler();

/* quit & return */
SDL_Quit();
return EXIT_SUCCESS;
}


/*** Event handler ***/
void event_handler(void)
{
SDL_Event event;
int quit=0;
char message_is_displayed=0;
SDL_Rect mess_coord = {0,512,512,512+25}; //{x_start,y_start,width,height}

while(!quit)
{
SDL_WaitEvent(&event);
switch(event.type)
{
case SDL_QUIT:
quit = 1;
break;

case SDL_MOUSEBUTTONDOWN:
if (event.button.button == SDL_BUTTON_LEFT)
{
if(!message_is_displayed)
{
screen = SDL_SetVideoMode(512,512+25, 32, SDL_SWSURFACE); //change the screen size
SDL_FillRect(screen, &mess_coord, SDL_MapRGB(screen->format, 255, 255, 255)); // fill in white the bottom area
}
else
{
screen = SDL_SetVideoMode(512, 512, 32, SDL_SWSURFACE);
}
message_is_displayed = !message_is_displayed;
SDL_Flip(screen);
}
printf("mouse position: (%d,%d)\n",event.button.x, event.button.y);
break;

case SDL_MOUSEMOTION:
printf("mouse position: (%d,%d)\n",event.motion.x, event.motion.y);
break;
}
}
}

最佳答案

您可以尝试使用以下函数来获取变量 oldx 和 oldy 中的 x 和 y 坐标,如

int oldx,oldy;    
oldx=wherex();
oldy=wherey();

在 Windows 中工作。

关于调整窗口大小后无法正确检索鼠标坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10584479/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com