本文基於C語言實現。
Windows和Linux下僞光標移動的實現
這是鄙人的第一篇博客,寫的不是很好,所以希望各位親們瀏覽時不要太苛刻,如果有什麼錯誤的話也希望各位能指出錯誤。
好的,現在進入正題,爲什麼我會突然寫這篇關於Windows與Linux下僞光標移動的實現呢,這主要源於這幾次做課程設計需要用到僞光標,所以學習了下僞光標移動的實現,希望能幫助到遇到僞光標移動的實現困難的小夥伴。
首先,爲什麼說是僞光標呢,請看下圖:
這兩幅圖光標符號()的移動就屬於僞光標的移動。
我是這樣認爲的,我們在C語言下做的“光標移動”只是刪了當前光標符號(上圖),重新移動到一個位置,在輸出光標符號的,也就是上圖僞光標移動的實現原理,但這不是不是真正意義的光標移動;真正意義上的光標移動應該是圖形位置的改變,直接將光標符號移過去。
介紹完這個也就要真正開始講僞光標(以下用光標代替)的顯示實現了。
Windows 下光標移動的實現
這是 Windows下光標移動的展示,圖爲將光標移到(6,6)這個位置(在第6行第6列),然後輸出Hello Windows!,具體代碼實現爲
CROOD就是這樣的一個玩意:
typedef struct _COORD {
SHORT X;
SHORT Y;
} COORD, *PCOORD
這個結構就是記錄座標位置的,
GetStdHandle()函數獲得標準輸入輸出的句柄,參數STD_OUTPUT_HANDLE是個宏,代表標準輸出,可以看作顯示器
SetConsoleCursorPosition(hout,coord); 根據函數名稱:(Set)設置(Console)控制檯(Cursor)光標(Position)座標,也就是設置控制檯光標座標,參數就是設備句柄,座標,那麼把標準輸出的句柄傳給函數,就可以把光標定位在對應的位置了(左上角位置是0,0然後向左 向下延伸)
Linux下的光標移動的實現
這是 Linux下光標移動的展示,圖爲將光標移到(6,6)這個位置(在第6行第6列),然後輸出Hello Linux!,具體代碼實現爲
initscr():初始化curses庫和ttty。(在開始curses編程之前,必須使用initscr()這個函數來開啓curses模式)
move(y,x): 將光標移動至 x,y 的位置.。
printw(format,str): 類似 printf() , 以一定的格式輸出。
endwin():關閉curses並重置tty。(結束curses編程時,最後調用的一個函數)。
當然在curses這個文件下還有其他函數可以控制輸出條件,有興趣的話可以百度一下。
還有一點要注意的是,在編譯時應加上鍊接語句-lcurses。
這就是我這次博客的全部內容了,希望這篇Windows和Linux下光標移動的實現文章可以對大家有所幫助!!!
——2015年5月9日
——小智