質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

1回答

1611閲覧

ncursesライブラリ マウス座標常時取得したい。

退会済みユーザー

退会済みユーザー

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2021/09/10 09:04

編集2021/09/10 13:14

###やりたいこと
マウス座標をクリックしていない時でも取得してほしいです。

###質問内容
提示コードの//マウス コメント部ですがこれはマウスがクリックしている間マウスの座標を取得するのですがマウスのキーを押していないときも常時マウスの座標を取得したいのですがその場合どうやって取得すればいいのでしょうか?

###参考サイト
参考サイト: https://ja.osdn.net/projects/drdeamon64/wiki/12.%E3%83%9E%E3%82%A6%E3%82%B9%E6%93%8D%E4%BD%9C

cpp

1#include <string.h> 2#include <iostream> 3#include <fstream> 4#include "../lib/ncurses/include/curses.h" 5 6int main() 7{ 8 initscr(); //初期化 9 10 int x = 0, y = 0, w, h; 11 //char str[20]="Hello World"; 12 int key; 13 std::string str; 14 bool exit = false; 15 std::ofstream file("log.txt"); 16 17 18 noecho(); //入力した文字を非表示 19 cbreak(); //Enterキー不要のキー入力 20 keypad(stdscr,TRUE); // 特殊キーを有効化 21 22 23 24 mousemask(ALL_MOUSE_EVENTS | REPORT_MOUSE_POSITION,NULL); // マウスイベントを取得 25 MEVENT event; 26 27 28 while (true) 29 { 30 erase(); //画面削除 31 move(y, x); //移動 32 addstr(str.c_str()); //文字表示 33 refresh(); //画面再表示 34 35 key = 0; 36 37 key = getch(); 38 39 switch(key) 40 { 41 case KEY_UP: 42 { 43 y--; 44 } 45 break; 46 47 case KEY_DOWN: 48 { 49 y++; 50 } 51 break; 52 53 case KEY_LEFT: 54 { 55 x--; 56 } 57 break; 58 59 case KEY_RIGHT: 60 { 61 x++; 62 } 63 break; 64 65 66 case 'q': 67 { 68// std::cout<<"a"<<std::endl; 69 exit = true; 70 break; 71 72 } 73 break; 74 } 75 76 if(getmouse(&event) == OK) 77 { 78 if(event.bstate & REPORT_MOUSE_POSITION) 79 { 80 file<<"mouse position: "<< event.x<<" , " << event.y<<std::endl; 81 } 82 } 83 84 85 86 87 //マウス座標 88 if(key == KEY_MOUSE) 89 { 90 91 92 } 93 94 //終了処理 95 if(exit == true) 96 { 97 file.close(); 98 99 break; 100 } 101 } 102 103 endwin(); //終了  104 return 0; 105}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まずプログラムの開始あたりのどこかで printf("\033[?1003h\n"); を実行してください。 これはターミナルに対して「マウス移動のイベントをよこせ」という意味のエスケープシーケンスです。 また、終了前には printf("\033[?1003l\n"); を実行してそれを無効にするべきです。

ちなみにターミナルによってはサポートされません。

投稿2021/09/10 16:07

SaitoAtsushi

総合スコア5684

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/09/11 00:44

自分のターミナル環境ではサポートされてました。
退会済みユーザー

退会済みユーザー

2021/09/12 01:05 編集

誤字です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問