C/C++ linux下光標定位和清屏函數(printf 實現)



C/C++ linux下光標定位和清屏函數(printf 實現)

分類: C C++ 4501人閱讀 評論(0) 收藏 舉報

轉自:http://zisedeqing.blog.163.com/blog/static/9555087120129111485394/

  1. #include <stdio.h>  
  2. #include <unistd.h>  
  3.   
  4. // 清除屏幕  
  5. #define CLEAR() printf("\033[2J")  
  6.   
  7. // 上移光標  
  8. #define MOVEUP(x) printf("\033[%dA", (x))  
  9.   
  10. // 下移光標  
  11. #define MOVEDOWN(x) printf("\033[%dB", (x))  
  12.   
  13. // 左移光標  
  14. #define MOVELEFT(y) printf("\033[%dD", (y))  
  15.   
  16. // 右移光標  
  17. #define MOVERIGHT(y) printf("\033[%dC",(y))  
  18.   
  19. // 定位光標  
  20. #define MOVETO(x,y) printf("\033[%d;%dH", (x), (y))  
  21.   
  22. // 光標復位  
  23. #define RESET_CURSOR() printf("\033[H")  
  24.   
  25. // 隱藏光標  
  26. #define HIDE_CURSOR() printf("\033[?25l")  
  27.   
  28. // 顯示光標  
  29. #define SHOW_CURSOR() printf("\033[?25h")  
  30.   
  31. //反顯  
  32. #define HIGHT_LIGHT() printf("\033[7m")  
  33. #define UN_HIGHT_LIGHT() printf("\033[27m")  
  34.   
  35. int main(int argc,char **argv)  
  36. {  
  37. printf("\033[31mThe color,%s!\033[1m\n","haha");  
  38. printf("\033[31mThe color,%s!\033[4m\n","haha");  
  39. printf("\033[31mThe color,%s!\033[5m\n","haha");  
  40. printf("\033[31mThe color,%s!\033[7m\n","haha");  
  41. printf("\033[31mThe color,%s!\033[8m\n","haha");  
  42. printf("\033[31mThe color,%s!\033[0m\n","haha");  
  43. printf("\033[47;31mThe color,%s!\033[0m\n","haha");  
  44. printf("\033[47mThe color,%s!\033[0m\n","haha");  
  45. sleep(2);  
  46. printf("\033[47m%s!\033[5A\n","up 5");  
  47. sleep(2);  
  48. printf("\033[47m%s!\033[9B\n","down 9");  
  49. sleep(2);  
  50. printf("\033[47m%s!\033[19C\n","right 19");  
  51. printf("right19");  
  52. sleep(2);  
  53. printf("\033[47m%s!\033[10D\n","left 10");  
  54. printf("left 10");  
  55. sleep(2);  
  56. printf("\033[47m%s!\033[50;20H\n","move to y:50,x 20");  
  57. printf("y50 x 20");  
  58. sleep(2);  
  59. printf("\033[47m%s!\033[?25l\n","hide cursor");  
  60. sleep(2);  
  61. printf("\033[47m%s!\033[?25h\n","sow cursor");  
  62. sleep(2);  
  63. printf("\033[47m%s!\033[2J\n","clear scleen");  
  64. sleep(2);  
  65.   
  66. return 0;  
  67. }  
#include <stdio.h>
#include <unistd.h>

// 清除屏幕
#define CLEAR() printf("\033[2J")

// 上移光標
#define MOVEUP(x) printf("\033[%dA", (x))

// 下移光標
#define MOVEDOWN(x) printf("\033[%dB", (x))

// 左移光標
#define MOVELEFT(y) printf("\033[%dD", (y))

// 右移光標
#define MOVERIGHT(y) printf("\033[%dC",(y))

// 定位光標
#define MOVETO(x,y) printf("\033[%d;%dH", (x), (y))

// 光標復位
#define RESET_CURSOR() printf("\033[H")

// 隱藏光標
#define HIDE_CURSOR() printf("\033[?25l")

// 顯示光標
#define SHOW_CURSOR() printf("\033[?25h")

//反顯
#define HIGHT_LIGHT() printf("\033[7m")
#define UN_HIGHT_LIGHT() printf("\033[27m")

int main(int argc,char **argv)
{
printf("\033[31mThe color,%s!\033[1m\n","haha");
printf("\033[31mThe color,%s!\033[4m\n","haha");
printf("\033[31mThe color,%s!\033[5m\n","haha");
printf("\033[31mThe color,%s!\033[7m\n","haha");
printf("\033[31mThe color,%s!\033[8m\n","haha");
printf("\033[31mThe color,%s!\033[0m\n","haha");
printf("\033[47;31mThe color,%s!\033[0m\n","haha");
printf("\033[47mThe color,%s!\033[0m\n","haha");
sleep(2);
printf("\033[47m%s!\033[5A\n","up 5");
sleep(2);
printf("\033[47m%s!\033[9B\n","down 9");
sleep(2);
printf("\033[47m%s!\033[19C\n","right 19");
printf("right19");
sleep(2);
printf("\033[47m%s!\033[10D\n","left 10");
printf("left 10");
sleep(2);
printf("\033[47m%s!\033[50;20H\n","move to y:50,x 20");
printf("y50 x 20");
sleep(2);
printf("\033[47m%s!\033[?25l\n","hide cursor");
sleep(2);
printf("\033[47m%s!\033[?25h\n","sow cursor");
sleep(2);
printf("\033[47m%s!\033[2J\n","clear scleen");
sleep(2);

return 0;
}

printf("\033[47;31mhello world\033[5m");
47是字背景顏色, 31是字體的顏色, hello world是字符串. 後面的\033[5m是控制碼
.顏色代碼:QUOTE:字背景顏色範圍:
40--49 字顏色: 30--39
40: 黑 30: 黑
41: 紅 31: 紅
42: 綠 32: 綠
43: 黃 33: 黃
44: 藍 34: 藍
45: 紫 35: 紫
46: 深綠 36: 深綠
47: 白色 37: 白色
ANSI控制碼:
QUOTE:
\033[0m 關閉所有屬性
\033[1m 設置高亮度
\03[4m 下劃線
\033[5m 閃爍
\033[7m 反顯
\033[8m 消隱
\033[30m -- \033[37m 設置前景色
\033[40m -- \033[47m 設置背景色
\033[nA 光標上移n行
\03[nB 光標下移n行
\033[nC 光標右移n行
\033[nD 光標左移n行
\033[y;xH設置光標位置
\033[2J 清屏
\033[K 清除從光標到行尾的內容
\033[s 保存光標位置
\033[u 恢復光標位置
\033[?25l 隱藏光標
\33[?25h 顯示光標這樣, 在某些時候就可以實現動態的輸出.


47是字背景顏色, 31是字體的顏色, hello world是字符串. 後面的\033[5m是控制碼.
顏色代碼:
QUOTE:
字背景顏色範圍: 40--49 字顏色: 30--39
40: 黑 30: 黑
41: 紅 31: 紅
42: 綠 32: 綠
43: 黃 33: 黃
44: 藍 34: 藍
45: 紫 35: 紫
46: 深綠 36: 深綠
47: 白色 37: 白色
ANSI控制碼:
QUOTE:
\033[0m 關閉所有屬性
\033[1m 設置高亮度
\03[4m 下劃線
\033[5m 閃爍
\033[7m 反顯
\033[8m 消隱
\033[30m -- \033[37m 設置前景色
\033[40m -- \033[47m 設置背景色
\033[nA 光標上移n行
\03[nB 光標下移n行
\033[nC 光標右移n行
\033[nD 光標左移n行
\033[y;xH設置光標位置
\033[2J 清屏
\033[K 清除從光標到行尾的內容
\033[s 保存光標位置
\033[u 恢復光標位置
\033[?25l 隱藏光標
\33[?25h 顯示光標
這樣, 在某些時候就可以實現動態的輸出.


十六進制
1b 5b 30 30 6d 1b 5b 30 30 6d ###### 1b 5b 30 30 6d 20
. [ 0 0 m . [ 0 0 m ###### . [ 0 0 m
其中###表示字符串。

.[00m.[00m 第一個.[00m表示顏色開始,第二個.[00m表示白色。
.[00m 表示顏色設置結束。
.[00m.[34m 第一個.[00m表示顏色開始,第二個.[34m表示藍色。
.[00m 表示顏色設置結束。

.[00m.[00manaconda-ks.cfg.[00m .[01;34mDesktop.[00m .[00minstall.log.[00m .[01;34mpackages.[00m
manaconda-ks.cfg和 install.log是白色,Desktop和packages是藍色。
[ <parameters> m 設置顯示屬性. 同樣的序列可以設置一個或多個屬性.par 作用
0 所有屬性重設爲默認值
1 設置邊框
2 設置亮度減半(用一種顏色模擬另一種顏色)
4 設置底紋(用一種顏色模擬另一種顏色)
(用於模擬的顏色由using ESC ] ...設置)
5 設置閃爍
7 設置反轉視頻(reverse video)
10 重設選定映像,顯示控制標記,
反轉元素標記.
11 選擇空映像,設置顯示控制標記,
重設反轉標記.
12 選擇空映像,設置顯示控制標記,
重設反轉標記.(在完成映像錶轉
換之前反轉標記引起每一字節的
高位反轉.)
21 設置正常亮度(和 ECMA-48 不兼容)
22 設置正常亮度
24 關閉下劃線
25 不閃爍
27 反轉視頻關閉
30 黑色前景
31 紅色前景
32 綠色前景
33 棕色前景
34 藍色前景
35 品紅前景
36 孔雀藍前景
37 白色前景
38 打開下劃線,設置默認前景色
39 關閉下劃線,設置默認前景色
40 黑色背景
41 紅色背景
42 綠色背景
43 棕色背景
44 藍色背景
45 品紅背景
46 孔雀藍背景
47 白色背景
49 設置默認背景色

下面的定義摘自:
http://www.linuxselfhelp.com/howtos/Bash-Prompt/Bash-Prompt-HOWTO-12.html,可見telnet與unix的淵源很深。
local BLUE="
\033[0;34m 
"
local LIGHT_GRAY="
\033[0;37m 
"
local LIGHT_GREEN="
\033[1;32m 
"
local LIGHT_BLUE="
\033[1;34m 
"
local LIGHT_CYAN="
\033[1;36m 
"
local YELLOW="
\033[1;33m 
"
local WHITE="
\033[1;37m 
"
local RED="
\033[0;31m 
"
local NO_COLOUR="
\033[0m 
"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章