ncurses を使用してユーザー インターフェイスをコーディングしています。端末の幅または高さが 222 文字/行を超えている場合に問題が発生し、マウス座標が -33 値を返すため、222 文字を超えてクリックすると mouse_x = -33 222 行を超えてクリックすると mouse_y = -33
222 文字/行を超えるマウス イベントを停止しないように ncurses に指示することは可能でしょうか? このバグは vim でも発生し、:vs 分離バーを 222 文字を超えて移動すると、x=0 に戻ります。
たぶん、このバグはすでに修正されていますか?
1 #include <ncurses.h>
2
3 void treat_mouse(MEVENT* event);
4
5 int main(void)
6 {
7 bool run;
8 int key;
9 MEVENT event;
10
11 run = true;
12 initscr();
13 noecho();
14 keypad(stdscr, TRUE);
15 mousemask(BUTTON1_PRESSED, NULL);
16 while (run == true)
17 {
18 key = getch();
19 switch (key)
20 {
21 case 'q':
22 run = false;
23 break;
24 case KEY_MOUSE:
25 treat_mouse(&event);
26 break;
27 default:
28 break;
29 }
30 }
31 endwin();
32 return 0;
33 }
34
35 void treat_mouse(MEVENT* event)
36 {
37 if (getmouse(event) == OK)
38 mvwprintw(stdscr, 0, 0, "click: x = %d, y = %d\n", event->x, event->y);
39 }
.
.
======================== 編集 =======================
.
.
わかりました。
ここで ncurses コード ソースをダウンロードしましたhttp://ftp.gnu.org/pub/gnu/ncurses/
そして、私はこのリンクを取りましたncurses-5.9.tar.gz 04-Apr-2011 19:12 2.7M
getch()を検索しました。
getch()はwgetch( )を呼び出します。
wgetch()は_nc_wgetch ()を呼び出します。
_nc_wgetch()は_mouse_inline ()を呼び出します。
_mouse_inline()は、空の関数である _nc_mouse_inline ()またはno_mouse_inline()を呼び出す構造体画面の関数ポインターです(マウスがない場合)。
ncurses-5.9/ncurses/base/lib_mouse.cで_nc_mouse_inline()関数を確認できます
彼女はunsigned charを使用してマウスの座標を計算し、この小さな例を確認します。
821 static bool
822 _nc_mouse_inline(SCREEN *sp)
823 /* mouse report received in the keyboard stream -- parse its info */
824 {
.
.
.
832 unsigned char kbuf[4];
.
.
.
970 eventp->x = (kbuf[1] - ' ') - 1;
971 eventp->y = (kbuf[2] - ' ') - 1;
.
.
.
984 return (result);
985 }
最後はなんでもします。