生活札記 首頁 生活札記
提供一個可以讓大家無拘無束的討論園地
 
相簿相簿   常見問題常見問題   搜尋搜尋   會員註冊會員註冊 
 個人資料個人資料   登入檢查您的私人訊息登入檢查您的私人訊息   登入登入 


curses函式庫系列課程 NO.2 curses函式庫螢幕顯示基本函式

 
發表新主題   回覆主題    生活札記 首頁 -> C/C++
上一篇主題 :: 下一篇主題  
發表人 內容
luckyhoo



註冊時間: 2006-07-19
文章: 447

發表發表於: 星期五 九月 01, 2006 4:53 am    文章主題: curses函式庫系列課程 NO.2 curses函式庫螢幕顯示基本函式 引言回覆

WINDOW *initscr(void);
代碼:
功能:
所有用curses函式庫完成的程式,最先開始要呼叫的起始函式。
傳入引數:
無。
說明:
initscr( )函式在每個程式裡只能被呼叫一次,若是呼叫失敗,就會顯示出為何失敗的訊息,並中斷程式的執行。


int endwin(void);
代碼:
功能:
所有用curses函式庫完成的程式,最後要呼叫的結束函式。
傳入引數:
無。
傳回值:
資料型態:int
若是執行成功,會傳回OK;若是執行失敗,則會傳回ERR。


int move(int y, int x);
代碼:
功能:將游標移到螢幕上座標為(y,x)的位置上,move函式在使用上,對於
螢幕或是座標的表示方法恰與一般我們在使用上的習慣(X,Y)相反。
傳入引數:
1.y
資料型態 - int
說明 - 就是之前提到的Y座標值。
2.x
資料型態 - int
說明 - 就是之前提到的X座標值。
傳回值:
資料型態 - int。
若是執行成功,會傳回OK;若是執行失敗,則會傳回ERR。


int printw(char *format, [, args] …);
代碼:
功能:於目前游標在螢幕上的位置顯示所設定的字串。
傳入引數:
看了一下這個函式在宣告上的表示方式,實在是不太容易懂,其實它輸出字串的格式在用法上就跟printf( )函式是一樣的。
傳回值:
資料型態 - int。
若是執行成功,會傳回OK;若是執行失敗,則會傳回ERR。


int refresh(void);
代碼:
功能:更新螢幕。
傳入引數:無。
傳回值:
傳回值:
資料型態 - int。
若是執行成功,會傳回OK;若是執行失敗,則會傳回ERR。
說明 - 在做了許多螢幕輸出顯示的工作後,如用printw( )函式做了顯示字串的
動作,就要呼叫refresh( )函式來更新螢幕,這才能看到我們辛苦所做工
作的結果。


int clear(void);
代碼:
功能:清除螢幕上所有顯示的東西,可能是視窗,也可能是字串。
傳入引數:無
傳回值:
資料型態 - int。
若是執行成功,會傳回OK;若是執行失敗,則會傳回ERR。


接下來以二個範例程式screen.c與hello.c來講解剛剛所提到一些函式的用法。
有一點必須注意的,若是有使用curses函式庫的話,程式必須加上以下的標頭檔案:
代碼:
#include <curses.h>

同時在編譯的時候也必須將curses函式庫連結進來,也就是最末必須加上以下參數:
代碼:
-lcurses



程式名稱:screen.c
在這個程式裡,一開始會由最左上角開始,由左至右依序顯示0-9的字元直到最右上角;接下來呢,同樣是由最左上角開始,由上至下依序顯示0-9的字元直到最左下角。
這個程式最大的目的在於讓大家了解到在文字模式下,螢幕的解析度為何,包括由左至右最多可以放置多少個字元,由上至下最多可以放置多少個字元,這都是必須了解的課題,如此接下來再處理與螢幕輸出相關的顯示功能時,才能更加得心應手。
原始程式碼:
代碼:
01 #include <curses.h>
02
03 main(void)
04 {
05  int Count=0;
06 
07  initscr();
08 
09  for(Count=0; Count<80; Count++)
10     {
11      move(0, Count);
12      printw("%d", Count%10);     
13     }
14  for(Count=0; Count<25; Count++)
15     {
16      move(Count, 0);
17      printw("%d", Count%10);     
18     }
19 
20  refresh();
21  getch();
22
23  endwin();
24 }

程式編譯與執行:
代碼:
gcc -o screen screen.c -lcurses
./screen

執行結果:
由程式執行的結果我們可以知道,文字模式下的解析度是80×25。
原始程式碼說明:
07 initscr();
使用curses函式庫前先做相關的初始化動作。
09 for(Count=0; Count<80; Count++)
10 {
11 move(0, Count);
12 printw("%d", Count%10);
13 }

由左至右顯示0-9的字元,依序輪流顯示。
14 for(Count=0; Count<25; Count++)
15 {
16 move(Count, 0);
17 printw("%d", Count%10);
18 }

由上到下顯示0-9的字元,依序輪流顯示。
20 refresh();
更新顯示結果。
23 endwin();
結束curses函式庫的使用。
執行結果:
代碼:
01234567890123456789012345678901234567890123456789012345678901234567890123456789
1
2
3
4
5
6
7
8
9
0
1
2
3
4
5
6
7
8
9
0
1
2
34



程式名稱:hello.c
一般程式語言最初的一個程式都是「Hello World!!」,當然我們也不能免俗地要跟世界說聲「Hello World!!」,不過在程式做點小小變動,說個三遍「Hello World!!」。
原始程式碼:
代碼:
01 #include <curses.h>
02
03 main(void)
04 {
05  int Count=0;
06  initscr();
07
08  for(Count=0; Count<3; Count++)
09     {
10      move(5*Count, 10);
11      printw("Hello World!!");
12      refresh();
13    }
14 
15  getch();
16  endwin();
17 }

程式編譯與執行:
代碼:
gcc -o hello hello.c -lcurses
./hello

執行結果:
代碼:

          Hello World!!




          Hello World!!




          Hello World!!




回頂端
檢視會員個人資料 發送私人訊息
從之前的文章開始顯示:   
發表新主題   回覆主題    生活札記 首頁 -> C/C++ 所有的時間均為 台灣時間 (GMT + 8 小時)
1頁(共1頁)

 
前往:  
無法 在這個版面發表文章
無法 在這個版面回覆文章
無法 在這個版面編輯文章
無法 在這個版面刪除文章
無法 在這個版面進行投票


Powered by phpBB © 2001, 2005 phpBB Group
正體中文語系由 phpbb-tw 維護製作