控制台繪製登陸框(三) TAB切換的改進

2021-07-25 20:08:34 字數 4683 閱讀 2405

效果圖同上篇  《控制台繪製登陸框(二)>>一致。

#include #include #include #include #define key_tab 9

#define background_black 0

#define background_white 255

using namespace std;

typedef struct myinputmyinput;

typedef struct mybuttonmybutton;

/**function: 將字元輸出到緩衝區

@param

ch: 要輸入的字元

posline : 字元所在行的位置

poscolumn: 字元所在列的位置

charinfoaarray:緩衝區陣列的內容

**/void writechartobuffer(char_info ch, int posline, int poscolumn, char_info * charinfoaarray)

/***

function:將緩衝區的字元輸出到控制台

@param

startposrow:顯示區域起始點的行號

startposcolumn:顯示區域起始點的列號

height:顯示區域高

width:顯示區域寬

charinfoaarray:緩衝區陣列的內容

***/

void outputtoconsole(int startposrow, int startposcolumn, int height, int width, char_info * charinfoaarray)

;//固定值(控制台視窗固定的屬性值)

coord dwbuffercoord = ;//緩衝區左上角的起始位置

small_rect rect = ;//顯示多大的緩衝區:

writeconsoleoutput(hconsoleoutput, charinfoaarray, dwbuffersize, dwbuffercoord, &rect);

}/**

function :在控制台輸出文字

@param

text:要輸出的文字

row:輸出文字的行數

column:輸出文字的列數

startposrow: 第乙個字元所在行數

startposcolumn: 第乙個字元所在列數

bgcolor: 背景色

fgcolor;前景色

**/void drawtext(string text, int row, int column, int startposrow, int startposcolumn, int bgcolor, int fgcolor)

outputtoconsole(startposrow, startposcolumn, row, column, charinfoarray);

}/**

function 畫矩形

@param

height:矩形的高

width:矩形的寬

startposrow:矩形左上角縱座標的位置

startposcolumn:矩形左上角橫座標的位置

bgcolor:背景色

fgcolor:前景色

**/void drawrect(int height, int width, int leftposy, int leftposx, int bgcolor, int fgcolor)

}outputtoconsole(leftposy, leftposx, height, width, charinfoaarray);

}/**

隱藏游標

**/void hidecursor()

/**顯示游標

**/void showcursor()

void main()

;//游標所在的位置

int key = 0;//接收鍵盤輸入

int i = 1;

myinput inputusername;

myinput inputpassword;

mybutton btnlogin;

drawtext(strusername, 1, 8, 9, 25, foreground_red, background_black);//在指定位置輸入username字串

drawtext(strpassword, 1, 8, 11, 25, foreground_red, background_black);//在指定位置輸入password字串

inputusername.height = 1;

inputusername.width = 20;

inputusername.bgcolor = background_white;

inputusername.fgcolor = foreground_red;

inputusername.startposx = 35;

inputusername.startposy = 9;

drawrect(inputusername.height, inputusername.width, inputusername.startposy, inputusername.startposx, inputusername.bgcolor, inputusername.fgcolor);

inputpassword.height = 1;

inputpassword.width = 20;

inputpassword.bgcolor = background_white;

inputpassword.fgcolor = foreground_red;

inputpassword.startposx = 35;

inputpassword.startposy = 11;

drawrect(inputpassword.height, inputpassword.width, inputpassword.startposy, inputpassword.startposx, inputpassword.bgcolor, inputpassword.fgcolor);

btnlogin.str = "login";

btnlogin.bgcolor = background_green;

btnlogin.fgcolor = foreground_red;

btnlogin.height = 3;

btnlogin.width = 10;

btnlogin.startposx = 35;

btnlogin.startposy = 14;

drawrect(btnlogin.height, btnlogin.width, btnlogin.startposy, btnlogin.startposx, btnlogin.bgcolor, btnlogin.fgcolor);

drawtext(btnlogin.str, btnlogin.height / 2, btnlogin.str.length(), btnlogin.startposy + (btnlogin.height / 2), btnlogin.startposx + (btnlogin.width - btnlogin.str.length()) / 2, btnlogin.bgcolor, btnlogin.fgcolor);//在指定位置輸入login字串

cursorpos = ;

setconsolecursorposition(getstdhandle(std_output_handle), cursorpos);

while (1)

;setconsolecursorposition(getstdhandle(std_output_handle), cursorpos);

}else if (i % 3 == 2)//餘數為2時,切換到密碼輸入框

;setconsolecursorposition(getstdhandle(std_output_handle), cursorpos);

}else if (i % 3 == 0)//餘數為0時,切換到登陸按鈕

;setconsolecursorposition(getstdhandle(std_output_handle), cursorpos);

hidecursor();

//繪製button按鈕,改變顏色

btnlogin.bgcolor = background_blue;

drawrect(btnlogin.height, btnlogin.width, btnlogin.startposy, btnlogin.startposx, btnlogin.bgcolor, btnlogin.fgcolor);

drawtext(btnlogin.str, btnlogin.height / 2, btnlogin.str.length(), btnlogin.startposy + (btnlogin.height / 2), btnlogin.startposx + (btnlogin.width - btnlogin.str.length()) / 2, btnlogin.bgcolor, btnlogin.fgcolor);//在指定位置輸入login字串

}break;

default:

break;}}

getchar();

}

用求餘的演算法進行tab切換

控制台繪製登陸框 二 TAB切換

function 將字元輸出到緩衝區 param ch 要輸入的字元 posline 字元所在行的位置 poscolumn 字元所在列的位置 charinfoaarray 緩衝區陣列的內容 void writechartobuffer char info ch,int posline,int pos...

kvm 控制台登陸配置

vm虛擬機器能否像xen虛擬機器一樣通過virsh console 一樣採用字元介面進行linux虛擬機器控制台呢,答案是肯定的,預設情況下該命令是不起作用的,需要修改相關檔案才能實現。1 新增ttys0的許可,允許root登入 vm虛擬機器能否像xen虛擬機器一樣通過virsh console 一...

虛擬控制台的切換過程

1.虛擬終端的切換在控制台軟中斷中執行,當按 alt f1 時,鍵盤中斷設定變數want console為0,然後激發控制台軟中斷 console softint 如果請求的控制台存在並且不等於當前控制台,這時呼叫change console want console 切換控制台。2.當前控制台就是...