Position de la souris par rapport à la fenêtre console [Résolu]

cs_TT22 22 Messages postés mercredi 4 avril 2012Date d'inscription 9 février 2013 Dernière intervention - 8 févr. 2013 à 10:52 - Dernière réponse : cptpingu 3794 Messages postés dimanche 12 décembre 2004Date d'inscription 10 juin 2018 Dernière intervention
- 9 févr. 2013 à 12:06
Bonjour à tous !

Dans un programme que je suis entrain de développer j'ai besoin d'obtenir la position de la souris dans la fenêtre console.
J'ai fais une fonction qui calcul la position de la souris moins la position de la fenêtre. Mais le problème c'est que le point (0,0) se trouve sur le point rouge (cf l'image en fin de message).
Je voudrais obtenir la position à partir du point vert.

Voici le script :
#include <windows.h>
#include 
POINT GetMousePos ( void );

int main ( int argc, char * argv [] )
{
while (true)
{
Sleep(100);
POINT MP = GetMousePos();
printf("%d	%d\n",MP.x,MP.y);
}
}

// Récupère la position de la souris dans la fenêtre...
POINT GetMousePos ( void )
{
// Prépare les variables...
POINT MousePos, Return;
HWND cHWND = GetConsoleWindow();
WINDOWPLACEMENT WinState;
RECT WinPos;

// Récupère la position de la souris...
GetCursorPos(&MousePos);

// Récupère la position de la fenêtre...
GetWindowPlacement ( cHWND, &WinState);
WinPos = WinState.rcNormalPosition;

// Calcul la position de la souris...
Return.x = MousePos.x - WinPos.left;
Return.y = MousePos.y - WinPos.top;

// Retourne le résultat...
return Return;
}



Voici l'image en question :


Voilà, merci d'avance à ceux qui m'aideront dans mon problème.
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 8 févr. 2013 à 17:14
3
Merci
Regarde si ScreenToClient() peut t'interesser.

ciao...

Merci BruNews 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 130 internautes ce mois-ci

Commenter la réponse de BruNews
cptpingu 3794 Messages postés dimanche 12 décembre 2004Date d'inscription 10 juin 2018 Dernière intervention - 8 févr. 2013 à 11:06
0
Merci
Bonjour.

Je connaît mal Windows, et ne saurait répondre à ta question, néanmoins, je me permets d'intervenir car sur le principe, je ne comprends pas ce que tu veux réaliser.

En effet, une console, par définition, permet d'afficher des données textuelles et n'est pas là pour avoir des interactions avec la souris. Si tu en nécessites, alors c'est que la console n'est pas ce que tu recherches.
Peux-tu décrire ce que tu cherches à faire ?

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Commenter la réponse de cptpingu
cs_TT22 22 Messages postés mercredi 4 avril 2012Date d'inscription 9 février 2013 Dernière intervention - 8 févr. 2013 à 13:10
0
Merci
[quote="CptPingu"]une console, par définition, permet d'afficher des données textuelles et n'est pas là pour avoir des interactions avec la souris. Si tu en nécessites, alors c'est que la console n'est pas ce que tu recherches./quote
Pourtant, c'est bien des interactions entre la fenêtre console et la souris dont j'ai besoin.
En effet, dans mon programme en console, j'ai besoin d'obtenir la positon de la souris par rapport à l'intérieur de la fenêtre console (en partant du point vert).
Commenter la réponse de cs_TT22
cptpingu 3794 Messages postés dimanche 12 décembre 2004Date d'inscription 10 juin 2018 Dernière intervention - 8 févr. 2013 à 18:16
0
Merci
Pourtant, c'est bien des interactions entre la fenêtre console et la souris dont j'ai besoin.
En effet, dans mon programme en console, j'ai besoin d'obtenir la positon de la souris par rapport à l'intérieur de la fenêtre console (en partant du point vert).

Quelles sont tes besoins fonctionnelles ? Que cherches-tu à faire ? Tu répètes avoir besoin d'une fonctionnalité, sans en expliquer la finalité.
Je ne te demande pas ça pour t'embêter, mais parce que très souvent, une présentation de la finalité, peut permettre à d'autres de mieux cerner ton problème, et alors te proposer des idées auxquelles tu n'aurais pas pensé.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Commenter la réponse de cptpingu
cs_TT22 22 Messages postés mercredi 4 avril 2012Date d'inscription 9 février 2013 Dernière intervention - 8 févr. 2013 à 18:39
0
Merci
[quote="CptPingu"]Quelles sont tes besoins fonctionnelles ? Que cherches-tu à faire ?/quote
Et bien, le but est de faire des zones cliquables dans la fenêtre DOS, d'où le besoin de connaitre la position de la souris

Et merci BruNews, ça fonctionne.
Voici le code :
#include <windows.h>
#include 
POINT GetMousePos ( void );

int main ( int argc, char * argv [] )
{
while (true)
{
Sleep(100);
POINT MP = GetMousePos();
printf("%d	%d\n",MP.x,MP.y);
}
}

// Récupère la position de la souris dans la fenêtre...
POINT GetMousePos ( void )
{
// Prépare les variables...
POINT MousePos, Return = {0,0};
HWND cHWND = GetConsoleWindow();

// Récupère la position de la souris...
GetCursorPos(&MousePos);

// Récupère la position de la fenêtre...
ScreenToClient ( cHWND, &Return);

// Calcul la position de la souris...
Return.x = MousePos.x + Return.x;
Return.y = MousePos.y + Return.y;

// Retourne le résultat...
return Return;
}
Commenter la réponse de cs_TT22
cptpingu 3794 Messages postés dimanche 12 décembre 2004Date d'inscription 10 juin 2018 Dernière intervention - 8 févr. 2013 à 19:01
0
Merci
le but est de faire des zones cliquables dans la fenêtre DOS

Ce n'est pas une finalité :(

Exemple, de détails techniques (non finales) sur un sujet donné:
- J'ai besoin de savoir comment passer la 3ème sur une voiture.
* Pourquoi ?
- Pour allez plus vite.
* Pourquoi ?
- Pour augmenter ma vitesse.
* Pourquoi ?
- Parce que ça va plus vite.
etc...

La finalité, c'est ton but final (excusez le superlatif). Ce que tu cherches à réaliser en fin de compte.
Pour reprendre mon exemple:
Finalité: Je cherche à aller à Marseille.


Si tu donnes directement la finalité, alors tu peux avoir comme réponse:
- On met la 3ème comme ceci.
ou/et
- Il est préférable de prendre le train, au lieu de perdre ton temps à tenter de passer la 3ème.

Des solutions plus globales peuvent alors t'être proposée (que tu retiendras ou non).

Quelle est donc ta finalité ?

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Commenter la réponse de cptpingu
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 8 févr. 2013 à 20:21
0
Merci
Bonjour,

On peut faire de très beaux et agréables programmes en console Win.
Je vous invite à taper : edit
sur le prompt d'une console win32.
Menus, dialogs... et tout en mode "texte".
Pour des zones cliquables, on peut utiliser ceci :

HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi;
ZeroMemory(&csbi, sizeof(CONSOLE_SCREEN_BUFFER_INFO));
GetConsoleScreenBufferInfo(hConsole, &CONSOLE_SCREEN_BUFFER_INFO);
//COORD coordCur = csbi.dwCursorPosition;


bye...
Commenter la réponse de yann_lo_san
BruNews 21054 Messages postés jeudi 23 janvier 2003Date d'inscription 7 novembre 2014 Dernière intervention - 9 févr. 2013 à 09:31
0
Merci
Si c'est un devoir scolaire, il n'y a plus rien a discuter.
Sinon pour autant qu'on rendra le prog console sexy, il sera toujours en retrait d'une galaxie par rapport au mode graphique qu'on pourrait obtenir.

ciao...
Commenter la réponse de BruNews
cs_TT22 22 Messages postés mercredi 4 avril 2012Date d'inscription 9 février 2013 Dernière intervention - 9 févr. 2013 à 11:17
0
Merci
[quote="CptPingu"]Ce n'est pas une finalité :( /quote
Et bien, en poussant ton raisonnement jusqu'au bout, je pourrais dire que ma finalité est de créer un programme
Mais en fait, je suis entrain de créer quelques petites fonctions qui permettent de créer des interfaces graphiques sous DOS. Et pour les bouton j'avais besoin de récupérer la position de la souris pour savoir si elle est sur un bouton lors d'un clic.

Voici une petite image de ce que j'arrive à obtenir pour le moment :


[quote="yann_lo_san"]On peut faire de très beaux et agréables programmes en console Win. /quote
Je suis tout à fait d'accord
Et c'est d'ailleurs ce que je cherche à faire.

[quote="BruNews"]Si c'est un devoir scolaire, il n'y a plus rien a discuter./quote
Non, même pas.

[quote="BruNews"]le prog consol [...] sera toujours en retrai [...] par rapport au mode graphique/quote
Oui, mais je ne cherche pas à faire un programme avec des graphismes impressionnants (sinon j'aurais utilisé les interfaces graphiques classiques). Ce que je cherche c'est justement de pouvoir créer des programmes avec un style un peut "ancien".


Voilà, j’espère avoir répondu à vos question et merci d'avoir répondu aux miennes.
Commenter la réponse de cs_TT22
cptpingu 3794 Messages postés dimanche 12 décembre 2004Date d'inscription 10 juin 2018 Dernière intervention - 9 févr. 2013 à 12:06
0
Merci
Et bien, en poussant ton raisonnement jusqu'au bout, je pourrais dire que ma finalité est de créer un programme

... et j'aurais alors demandé ta finalité, car ça n'en serait pas une :p (But de ton programe ?)

Je comprends mieux maintenant ton besoin, et pourquoi tu demandais ceci. Ce que tu cherches à réaliser existe déjà, et s'appelle "ncurses".

le prog consol [...] sera toujours en retrai [...] par rapport au mode graphique

Au niveau graphique peut être (quoi que c'est une question de goût), mais au niveau pratique, une console est parfois plus adaptée qu'une appli console. Quelques exemples d'applis consoles qui n'auraient aucune utilité à être en graphique: htop (surtout via ssh), cmake-config, le menu de zsh, screen, tmux, etc...

De plus une application console à plusieurs avantages sur une application fenêtrée:
- Possibilité d'être exécuté sans mode graphique (lorsque l'on installe un OS et que le serveur graphique n'existe pas encore)
- Possibilité d'être exécuté à distance en ssh (sans devoir forwarder les graphismes via la coûteuse option -X)
- Simplicité et rapidité. Très utilisé par de grandes compagnies pour l'ergonomie et la vitesse (ex: Nvidia utilise une appli console pour l'installation de ses drivers, Auchan utilise aussi ce genre d'application pour rentrer des informations produits et générer leurs rapports).

C'est donc tout à fait viable, et une solution tout à fait adaptée à certaines situations.

________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Commenter la réponse de cptpingu

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.