1. 程式人生 > >c語言游標移動

c語言游標移動

1在控制檯中,完成了一個又一個程式。漸漸發現控制檯不方便了。控制檯貌似只能,從上到下,從左到右的進行輸出。如果進行頁面設計就會發現,想在游標所處位置的上方新增一些內容,該怎麼辦呢
2.解決方案能否解決這類問題呢?
直接新增如下的自定義函式。然後再需要游標移動時,直接呼叫就可以實現游標的移動。

 void goto_xy(int x, int y)//定位游標位置到指定座標
 {       HANDLE hOut;  
   hOut = GetStdHandle(STD_OUTPUT_HANDLE);   
  COORD pos = { x,y };   
   SetConsoleCursorPosition(hOut, pos);}

ps 1:新增這個自定義函式,必須要宣告Windows.h的標頭檔案
ps 2:使用時把它當做一個自定義函式,可以直接呼叫,傳入的引數為相應的座標
ps 3:使用這個函式時,不會清除螢幕中相關的內容
ps 4:游標移動後,再次輸入時,如果原來位置有文字,會被覆蓋掉

3.淺析游標移動函式的原理a.控制代碼(HANDLE)在Windows程式中,有各種各樣的資源(視窗、圖示、游標等),系統在建立這些資源時會為它們分配記憶體,並返回標示這些資源的標示號,即控制代碼。
控制代碼指的是一個物件在某一個程序中的唯一索引,而不是指標。由於地址空間的限制,控制代碼所標識的內容對程序是不可見的,只能由作業系統通過程序控制代碼列表來進行維護。在示例程式中HANDLE就是控制代碼資料型別。可以把物件的控制代碼賦給它。

b.API函式作業系統除了協調應用程式的執行、記憶體分配、系統資源管理外,同時也是一個很大的服務中心,呼叫這個服務中心的各種服務(每一種服務是一個函式)。這些服務可以幫助應用程式達到開啟視窗、描繪圖形、使用周邊裝置的目的,由於這些函式服務的物件是應用程式(Application),所以稱之為Application Programming Interface,簡稱API函式。

Ps :日常使用API的機率很小,所以API不用系統的去學,在需要的時候去查API幫助就足夠了。->在示例程式中GetStdHandle()就是一個API函式。 它的作用是從一個特定的標準裝置(標準輸入、標準輸出或標準錯誤)中取得一個控制代碼 這裡的控制代碼也可以理解為指游標停留位置的資訊。

值含義STD_INPUT_HANDLE標準輸入的控制代碼STD_OUTPUT_HANDLE標準輸出的控制代碼STD_ERROR_HANDLE標準錯誤的控制代碼GetStdHandle()的幾種引數c.COORDCOORD是Windows API中定義的一種結構,表示一個字元在控制檯螢幕上的座標。typedef struct _COORD{ SHORT X; SHORT Y; } COORD;COORD是一個結構體,表示一個座標。

定義包含在Windows.h的標頭檔案裡。d.SetConsoleCursorPosition()SetConsoleCursorPosition是一個實現游標的位置控制的計算機函式。它的兩個引數為(游標控制代碼,COORD的結構體) 作用是將游標控制代碼,移動到COORD指向的位置。

轉載於大佬konghouy的文章