Position de la souris par rapport à la fenêtre console

Résolu
cs_TT22 Messages postés 22 Date d'inscription mercredi 4 avril 2012 Statut Membre Dernière intervention 9 février 2013 - 8 févr. 2013 à 10:52
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 - 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.

10 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
8 févr. 2013 à 17:14
Regarde si ScreenToClient() peut t'interesser.

ciao...
3
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
8 févr. 2013 à 11:06
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
0
cs_TT22 Messages postés 22 Date d'inscription mercredi 4 avril 2012 Statut Membre Dernière intervention 9 février 2013
8 févr. 2013 à 13:10
[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).
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
8 févr. 2013 à 18:16
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_TT22 Messages postés 22 Date d'inscription mercredi 4 avril 2012 Statut Membre Dernière intervention 9 février 2013
8 févr. 2013 à 18:39
[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;
}
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
8 févr. 2013 à 19:01
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
0
yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
8 févr. 2013 à 20:21
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...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
9 févr. 2013 à 09:31
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...
0
cs_TT22 Messages postés 22 Date d'inscription mercredi 4 avril 2012 Statut Membre Dernière intervention 9 février 2013
9 févr. 2013 à 11:17
[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.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
9 févr. 2013 à 12:06
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
0
Rejoignez-nous