作者 主題: 如何將游標隱藏???  (閱讀 5886 次)

0 會員 與 1 訪客 正在閱讀本文。

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
如何將游標隱藏???
« 於: 2007-09-05 16:27 »
在使用curses函數庫時可以利用clear()及refresh()將螢幕清空

這在需要在文字模式下寫一個選單程式是很好用的函數庫

不過現在有個小討厭>"<

那就是在螢幕清空後游標還是一直留在那裡,雖然可以把他移到其他位置

不過還是最好能將之隱藏起來,這樣在選單畫面中才不會給他有點奇怪

所以想請問一下如何將游標隱藏起來...謝謝

以下是清除營幕的代碼
代碼: [選擇]


main()

{
  lee_initscr();/*鍵盤,營幕顯示控制起始,清除營幕並將游標*/

getch();

  lee_closescr();/*鍵盤,營幕顯示控制終止*/
}


/*############################################################################
 初始化終端機營幕顯示色彩並清除營幕

 1-64=低亮度文字
 65-128=高亮度文字
 129-192=低亮度+文字閃爍  中文模式下無法閃爍(Xwindow的終端機視窗可以)
 193-256=高亮度+文字閃爍  中文模式下無法閃爍(Xwindow的終端機視窗可以)
#############################################################################*/
void lee_initscr(void)
{
  int color[8]={COLOR_BLACK,  /*黑*/
                COLOR_RED,    /*紅*/
                COLOR_GREEN,  /*綠*/
                COLOR_YELLOW, /*黃*/
                COLOR_BLUE,   /*藍*/
                COLOR_MAGENTA,/*紫*/
                COLOR_CYAN,   /*青*/
                COLOR_WHITE   /*灰*/
               };
  int i,f,b;

  initscr();/*營幕顯示控制起始化*/
  if(!has_colors() || start_color() != OK)
  {
    fprintf(stderr,"色彩起始失敗-> 函數 lee_initscr()..htart_color() start_color()\n");
    getchar();
    return;
  }
  /*清除營幕並將游標移至0,0*/
  clear();
  refresh();


  /*定義要被COLOR_PAIR()存取的屬性,其參數必須是連續的值,由i=1開始經迴路後共設64種基本組合*/
  i=1;
  for(b=0;b<=7;b++)/*背景共8色:每8種組合換1個背景色*/
    for(f=0;f<=7;f++,i++)/*前景共8色:每種組合換1前景色,換完8色後再從第1色開始*/
      init_pair(i,color[f],color[b]);

}

/*############################################################################
 營幕顯示控制結束
############################################################################*/
void lee_closescr(void)
{
  endwin();/*營幕顯示控制終止*/
}

程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

micmic3

  • 俺是博士!
  • *****
  • 文章數: 1692
    • 檢視個人資料
如何將游標隱藏???
« 回覆 #1 於: 2007-09-05 16:49 »
變成十字移到最左上角可行嗎?

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
如何將游標隱藏???
« 回覆 #2 於: 2007-09-05 17:12 »
引述: "micmic3"
變成十字移到最左上角可行嗎?


怎麼變成十字呢???

不過"必須"在"文字模式"下喔(本人只會寫文字模式下的東西啦)

因為是要在文字模式下控制鍵盤螢幕用的所以該游標存在時會變得有些礙眼

尤其是在移動主選單選項並顯示副選單後都會在副選單後面多出該游標

不過如果能控制游標的顯示狀態應該是一個可行方案吧

謝謝唷^^!
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
如何將游標隱藏???
« 回覆 #3 於: 2007-09-05 18:35 »
記得在古早以前有個 INT 10H 可以玩弄游標, 不知是還適用  :roll:

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
如何將游標隱藏???
« 回覆 #4 於: 2007-09-05 18:50 »
引述: "yamaka"
記得在古早以前有個 INT 10H 可以玩弄游標, 不知是還適用  :roll:


嗯INT 10H...以前用TurboC寫很像有個int86()還是intr()產生軟體岔斷的方法吧 :D

不過很像在Linux不允許軟體岔斷(忘記在哪裡看到的).....殘念  :cry:
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
如何將游標隱藏???
« 回覆 #5 於: 2007-09-05 19:36 »
那如果將游標設定到螢幕範圍外...不知會怎樣  :roll:

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
如何將游標隱藏???
« 回覆 #6 於: 2007-09-05 21:00 »
引述: "yamaka"
那如果將游標設定到螢幕範圍外...不知會怎樣  :roll:


不會被接受

比如

move(10,10);
refresh();
可正確到虛擬視窗的10,10

move(100,100);
refresh();
仍會在0,0的位置(螢幕左上角)

move(-1,-1);
refresh();
也是在左上角
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼

chyanlong

  • 可愛的小學生
  • *
  • 文章數: 19
    • 檢視個人資料
如何將游標隱藏???
« 回覆 #7 於: 2007-09-09 15:56 »

stlee

  • 鑽研的研究生
  • *****
  • 文章數: 817
    • 檢視個人資料
如何將游標隱藏???
« 回覆 #8 於: 2007-09-14 18:08 »
引述: "chyanlong"
用 curs_set() 試試看
參考網址
http://tldp.org/HOWTO/NCURSES-Programming-HOWTO/misc.html#CURSSET


搞定^^y

感恩,感謝
程式是人寫的,別讓工具的限制成為您想像力的極限
~程式中最重要的部份應該是註解而不是程式碼,這是因為解讀註解一定比解讀程式碼簡單
~程式寫好後約一個月就會忘的差不多了,所以花點時間把註解寫好至少能讓自己(或別人)看的懂當初在寫什麼