ncurses螢幕操作:getyx(),getparyx(),getmaxyx(),scr_dump(),scr_restore(),getwin(),putwin()

Koma_Wong發表於2018-06-22
  • Copyright(C) NCURSES Programming HOWTO

螢幕操作

在這一章我們將瞭解一些管理螢幕的函式。這些函式經常被用於編寫基於控制檯的遊戲。順便讓我們寫一些非常有意思的程式。

getyx()系列函式

getyx() 函式可以用來取得當前游標的位置。並把它儲存在傳遞給它的兩個變數中。getyx()是一個巨集,所以不能向它傳送變數的地址。你只能這樣呼叫它:

/* win: 視窗的指標
 * y, x: 游標座標的y, x 值將被賦到這兩個變數
 */
getyx(win, y, x);

getparyx()用於取得子視窗相對主視窗的起始座標,它在更新子視窗時經常使用。當設計一個多級選單時,如果用儲存選單座標方法來處理,就變得非常困難。然而使用getparyx()函式找到該選單的相對座標的方案就顯的比較簡單。getbegyx()函式和getmaxyx()函式用於以同樣的方式儲存當前視窗的起始和結束座標,可以高效地管理視窗和子視窗。

螢幕轉儲

開發遊戲的時候,通常儲存和恢復螢幕是十分必要的。scr_dump()函式可以把當前螢幕的內容存入指定檔案,即以檔名作為函式的引數(函式原型:scr_dump(const char *file) ——譯者注)。而通過scr_restore()函式呼叫螢幕資料檔案來恢復螢幕( 函式原型:scr_restore(constchar *file) ——譯者注)。在遊戲設計中這兩個函式可以用來快速切換遊戲場景。

視窗轉儲

視窗轉儲同螢幕轉儲的原理一樣。getwin()函式(函式原型:getwin(FILE * filep) ——譯者注)用來將視窗內容儲存到一個指定的檔案中。putwin()函式(函式原型:putwin(WINDOW*win, FILE * filep) ——譯者注)則呼叫相應的檔案來恢復視窗。copywin()可以將一個視窗拷貝到另一個視窗,即將源視窗矩形區域(由引數指定)中的內容複製到目標視窗指定的矩形區域(由引數指定)裡。而最後的引數用來選擇是否要覆蓋目的視窗:如果引數為TRUE,那麼就會覆蓋目標視窗的內容;如果引數為FLASE,那麼就會重寫目的視窗中的內容。以下為函式的原型:

int copywin(
    const WINDOW *src,  /* 源視窗指標*/
    WINDOW *dst,        /* 目的視窗指標*/
    int sminrow,        /* 源視窗所選矩形區域的最小行數*/
    int smincol,        /* 源視窗所選矩形區域的最小列數*/
    int dminrow,        /* 目的視窗所選矩形區域的最小行數*/
    int dmincol,        /* 目的視窗所選矩形區域的最小列數*/
    int dmaxrow,        /* 目的視窗所選矩形區域的最大行數*/
    int dmaxcol,        /* 目的視窗所選矩形區域的最大列數*/
    int over)           /* 是否覆蓋目的視窗*/

相關文章