• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

NuGuN

[C++] Coordenadas Cursor

8 mensagens neste tópico

Boas...

Gostava de saber como é que posso ler as coordenadas do cursor do rato em C++ ou C (tanto faz). Andei a procurar na net mas obtive muito poucos resultados... o que encontrava era para aplicações na consola, ou então nem tinha nada a ver com o que procurava, talvez não esteja a procurar da forma correcta. Por isso, pedia ao pessoal do C/C++ se me podiam ajudar, com links, ou até mesmo com exemplos  ;)

Já agora... dava geito que funciona-se tanto em windows como em linux. Eu em VB6 costumo utilizar uma API (GetCursorPos), mas em linux não me safo com isso  ;)

Obrigado!

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Vai mesmo depender se estás a programar para Windows ou Linux. Em Linux podes usar as APIs do server gráfico X.org.

Estive aqui a brincar um bocadinho, e cheguei a este código:

x11.c:

#include <stdio.h>
#include <X11/Xlib.h>
#include <assert.h>

static Display *dpy = NULL;

void GetMousePos( int* x, int* y )
{
    XMotionEvent xev;
    Window root, child;
    XQueryPointer((Display*) dpy,
                  DefaultRootWindow((Display*) dpy),
                  &root, &child,
                  &(xev.x_root), &(xev.y_root),
                  &(xev.x),      &(xev.y),
                  &(xev.state));
    *x = xev.x_root;
    *y = xev.y_root;
};

int main(void)
{
int x, y;

dpy = XOpenDisplay(0);
assert(dpy != NULL);
GetMousePos(&x, &y);

printf("%d %d\n", x, y);

return 0;
}

Para compilar:

gcc `pkg-config --cflags --libs x11` -o x11 x11.c

Teste:

triton@wella:~/MousePos$ ./x11

632 1049

Em Windows vais ter de ser tu a descobrir já que não tenho um sistema onde testar (se não conseguires eu tento com o Wine).

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas...

Obrigado pessoal. Pensava que existia alguma forma de fazer isso para as duas plataformas, talvez com GTK+ ou algo do genero...

Sendo assim não tenho outra alternativa se não criar uma versão para windows e outra para linux, certo?

Já agora... Triton, quando fazes isto:

XQueryPointer((Display*) dpy,...

O que é que faz esta parte ->  (Display*) dpy

Estou farto de ver noutros códigos fonte, mas não percebo o que é que isso faz ou qual o objectivo.

Cumps

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Obrigado pessoal. Pensava que existia alguma forma de fazer isso para as duas plataformas, talvez com GTK+ ou algo do genero...

Sendo assim não tenho outra alternativa se não criar uma versão para windows e outra para linux, certo?

Sim, esse código até foi baseado no wxWidgets, também deves encontrar o equivalente para o Windows. GTK+ também deve ter código do género.

Já agora... Triton, quando fazes isto:

XQueryPointer((Display*) dpy,...

O que é que faz esta parte ->  (Display*) dpy

Estou farto de ver noutros códigos fonte, mas não percebo o que é que isso faz ou qual o objectivo.

Isso é um casting de variável. Neste caso nem é necessário, mas quando usares ponteiros do tipo void * ou noutros casos pode ser necessário.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora