Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Koordynaty klikniętej pozycji w obrębie konsoli


Rekomendowane odpowiedzi

Opublikowano

Witam. Czy byłby w stanie mi ktoś podać jakąś funkcję, dzięki której po kliknięciu na okno konsoli, w określonych miejscach, zostają mi zwrócone konsolowe (nie "ekranowe" ;_; ) koordynaty miejsca, w którym nastąpiło kliknięcie? Thank you in advance :v

jw19e8.png

Opublikowano

NIe jestem misterzem Windowsa ale coś w tym stylu powinno dać radę:

 

POINT ScreenToConsole(int x, int y){

  RECT r;

  POINT p;

  GetWindowRect(GetConsoleWindow(),&r);

  p.x = x-r.left;

  p.y = y-r.top;

  return p;

}

 

Wrzuć tam swoje ekranowe koordynaty i w rezultacie otrzymasz koordynaty konsolowe.

Ale jest pewnie lepsza metoda tylko jej nie znam.

Linux pozwoli wycisnąć ostatnią łzę z twojego procesora.

Opublikowano

@anakonda119

 

Napisałem coś takiego:

#include <windows.h>
#include <iostream>

using namespace std;

POINT ScreenToConsole(int x, int y){
  RECT r;
  POINT p;
  GetWindowRect(GetConsoleWindow(),&r);
  p.x = x-r.left;
  p.y = y-r.top;
  return p;
}

int main()
{
	POINT pos;
	GetCursorPos( & pos );
	POINT ost = ScreenToConsole(pos.x, pos.y);
	cout<<ost.x<<endl<<ost.y<<endl;
}

ale niestety, koordynaty wciąż są podawane w postaci ekranowej :c

Chodzi mi o to, że gdy np. kliknę na trzecią linię w konsoli, na np. pierwszy znak, to żeby mi zwróciło koordynaty: 3, 1 do jakichś zmiennych

jw19e8.png

Opublikowano

1. odczytujesz pozycje wskaźnika

2. odczytujesz pozycję okna

3. jeżeli wskaźnik jest wewnątrz tego okna to:

4. dzielisz szerokość okna konsoli przez ilość kolumn

5. dzielisz wysokość okna konsoli przez ilość wierszy

6. dostajesz w ten sposób przedziały po x i y pixeli wysokości

7. sprawdzasz w którym z przedziałów znajduje się wskaźnik

RAsfepN.png
Opublikowano

@anakonda119

 

Napisałem coś takiego:

#include <windows.h>
#include <iostream>

using namespace std;

POINT ScreenToConsole(int x, int y){
  RECT r;
  POINT p;
  GetWindowRect(GetConsoleWindow(),&r);
  p.x = x-r.left;
  p.y = y-r.top;
  return p;
}

int main()
{
	POINT pos;
	GetCursorPos( & pos );
	POINT ost = ScreenToConsole(pos.x, pos.y);
	cout<<ost.x<<endl<<ost.y<<endl;
}

ale niestety, koordynaty wciąż są podawane w postaci ekranowej :c

Chodzi mi o to, że gdy np. kliknę na trzecią linię w konsoli, na np. pierwszy znak, to żeby mi zwróciło koordynaty: 3, 1 do jakichś zmiennych

wykorzystaj wielkość fonta w cmd:

CONSOLE_SCREEN_BUFFER_INFO x;
CONSOLE_FONT_INFO y;
GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &x);
GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &y);
COORD fontSize = GetConsoleFontSize(GetStdHandle(STD_OUTPUT_HANDLE), y.nFont);

Skończ proszę się kompromitować. Jesteś nikim.

Opublikowano

ReadConsoleInput

https://msdn.microsoft.com/pl-pl/library/windows/desktop/ms685035%28v=vs.85%29.aspx

Struktura MOUSE_EVENT_RECORD ma pozycję myszki jako kolumna (X) i wiersz (Y). Warto też ustawić rozmiar bufora konsoli, w szczególności ilość wierszy, gdyż standardowo scrolluje i może przez to pokazać nieoczekiwane wartości dla pozycji wiersza (np. 280).

YOU MUST DIE

- Ganon, Koridai

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...