在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

初識GUI應用函數以及文本方式顏色控制函數

開源嵌入式 ? 來源:開源嵌入式 ? 作者:富貴人 ? 2021-08-26 11:29 ? 次閱讀

C_GUI編程入門

第一章:認識GUI編程

在程序設計中,往往我們最后編譯的結果都是通過控制臺輸出所獲得的一系列數據,隨著科技一天天的進步,人們對程序的美觀的要求也逐漸加深,所以漸漸的,圖型顯示就變的比較重要了。顯示器的顯示方式有文本方式和圖形方式兩種,這里講述文本方式下屏幕輸出的控制,并介紹一些有關屏幕處理的函數。本文所介紹函數均包含于conio.h這個頭文件當中,因此在用戶程序中使用這些函數時,必須用include將conio.h包含在程序中。

第二章:初識GUI應用函數

1.文本方式控制函數Void textmode(int newmode);

這里的參數newmode既可以是下表中的方式代碼,也可以是大寫的方式名。

方式 方式名 顯示列*行數和顏色
0 BW40 40*25黑白顯示
1 C40 40*25彩色顯示
2 BW80 80*25黑白顯示
3 C80 80*25彩色顯示
7 MONO 80*25單色顯示
-1 LASTMODE 上一次的顯示方式


一般建議使用C80或者C40的顯示方式。LASTMODE方式指上一次設置的文本顯示方式,它常用于在圖形方式到文本方式的切換。

2.文本方式顏色控制函數

a.文本屬性設置函數Void textattr(int attr);

該函數設置文本顯示的屬性,包括字符顯示顏色(前景色),背景色及字符顯示是否閃爍等,其參數可以用一個字節,即8位數來描述,各位含義如下表。

閃爍 加亮
BLINK R G B I R G B
閃爍 背景色 前景色

其中低四位用來設置字符顯示顏色(對應顏色值0~15),4~6為用來設置顯示背景色(對應顏色值0~7),第七位最高,用來顯示的字符是否閃爍。

例:藍底紅字 textattr(RED+(BLUE<<4));

白底藍字(閃)textattr((WHITE<<4)+BLUE_BLINK);

或(方式值) textattr(128+1+(15<<4));

或(十六進制) textattr(0xf1);

顏色表

顏色名 顯示色 用處
BLACK 0 前景,背景色
BLUE 1 前景,背景色
GREEN 2 前景,背景色
CYAN 3 前景,背景色
RED 4 前景,背景色
MAGENTA 5 洋紅 前景,背景色
BROWN 6 前景,背景色
LIGHTGRAY 7 淺灰 用于前景色
DARKGRAY 8 深灰 用于前景色
LIGHTBLUE 9 淡藍 用于前景色
LIGHTGREEN 10 淺綠 用于前景色
LIGHTCYAN 11 淡青 用于前景色
LIGHTRED 12 淡紅 用于前景色
LIGHTMAGENTA 13 淡洋紅 用于前景色
YELLOW 14 用于前景色
WHITE 15 用于前景色
BLINK 128 閃爍 用于前景色

b.文本字符顏色設置函數void textcolor(int color);

該函數設置文本字符顏色,即是前景色,只能在彩色顯示的模式下才可進行。參數可以是方式值也可以是大寫的方式名(按顏色表為準)。

c.文本背景色設置函數void textbackfround(int color);

該函數設置文本背景色,只能在彩色顯示的模式下才可進行。參數可以是方式值也可以是大寫的方式名(只能是顏色表前八種顏色)。

d.高亮度顯示字符void highvideo(void);

e.低亮度顯示字符void lowvideo(void);

f.通常亮度顯示字符void normvideo(void);

3.窗口設置和文本輸出函數

a.窗口設置函數void window(int x1,int y1,int x2,int y2);

其中(x1,y1)為窗口左上角坐標,(x2,y2)為窗口右下角坐標,這些坐標以整個屏幕為參考系。當定義窗口時,若定義坐標超過屏幕坐標界限(即顯示模式的界限),則該窗口不會建立。

利用窗口函數可以在屏幕上定義多個不同的窗口,以顯示不同的信息。定義一個窗口后,前面所講過的函數textattr,textcolor和textbackground僅對此窗口起作用,窗口以外不受影響。當定義多個窗口后,上文中函數的作用域僅為最后一個定義的窗口。

b.控制臺文本輸出函數

int cprintf(char *format,…);

int cputs(char *str);

int cputch(int ch);

這三個輸出函數不同于標準輸出函數printf之類,它們受窗口的控制,窗口內顯示的光標就是他們開始的位置,當輸出行右邊超過窗口的左邊界時,自動移動到窗口內下一行開始輸出,當輸出到窗口底部邊界時,窗口內的內容將自動上卷(類似于翻頁),直至輸出完為止。

4.清屏和光標操作函數

a.清屏函數

void clrscr(void);清除窗口中文本

void clreol(void);清除當前窗口中從光標開始位置到本行結尾的所有字符(但不改變光標位置)

void delline(void);清除光標所在那一行字符

b.光標操作函數

void gotoxy(int x,int y);

該函數把光標移動到窗口內的(x,y)處,x,y坐標是相對于窗口而言,它多和cprintf函數配合,以指定輸出開始位置。

5.屏幕文本移動與存儲函數

a.屏幕文本移動函數void movetext(int x1,inty1,int x2,int y2,int x3,int y3);

該函數是將坐標起始為(x1,y1)終止為(x2,y2)的矩形方塊內文本拷貝到左上角坐標為(x3,y3)的新矩形框內,這里x,y的坐標是以整個屏幕為窗口坐標系,該函數與開設的窗口無關,且原來矩形區文本不變。

b屏幕文本存儲函數void gettext(int x1,int y1,int x2,int y2,void *buffer);

該函數是將坐標起始為(x1,y1)終止為(x2,y2)的矩形方塊內文本拷貝到由buffer指針指向的一個內存緩沖區內。這個緩沖區大小可以計算,由于在屏幕上顯示的一個字符占兩個字節(一個是字符本身的ASCII碼,第二個字節是屬性字節,表示其顯示的前景色,背景色以及是否閃爍等)

緩沖取字節總數=矩形內行數*每行列數*2

c.屏幕文本取出函數void puttext(int x1,int y1,int x2,int y2,void *buffer);

該函數是將把buffer指針指向的緩沖區內所存文本復制到屏幕上以坐標起始為(x1,y1)終止為(x2,y2)的矩形方塊內。

6.狀態查詢函數

a.屏幕文本顯示有關信息的函數

void gettextinfo(struct texy_info *f);

這里的text_info是在conio.h頭文件中定義的一個結構,該結構的定義是

Struct text_info

{

unsigned char winleft; /*窗口左上角x坐標*/

unsigned char wintop; /*窗口左上角y坐標*/

unsigned char winright;/*窗口右下角x坐標*/

unsigned char winbottom;/*窗口左下角x坐標*/

unsigned char attributes; /*文本屬性*/

unsigned char normattr;/*通常屬性*/

unsigned char currmode; /*當前文本方式*/

unsigned char screenheight; /*屏高*/

unsigned char screenwidth; /*屏寬*/

unsigned char curx;/*當前光標的x值*/

unsigned char curyt; /*當前光標的y值*/

b.當前光標位置的函數

int wherex(void);

int wherey(void);

通過這兩個函數可分別得到當前窗口中光標的x和y坐標

第三章:實例分析

文本下拉框設計

Code:

/*學生用戶信息窗體坐標*/

#defineX120

#defineY12

#defineX1_LENTH10

/*這里可以通過修改坐標來實現彈出的窗口的位置變化,如當前,即框是畫在(20.2)的位置上,框長10個字符,寬2個字符。*/

#defineY1_LENTH1

/*學生用戶信息函數*/

intinformation_file()

{

intkey_BOARD,y,x,x1_lenth;

window(X1,Y1,(X1+X1_LENTH),(Y1+Y1_LENTH));

textbackground(LIGHTGRAY);

clrscr();

textcolor(WHITE);//背景色設為淺灰色,前景色白色,輸出兩個選項:1.Editor,2.Back

cprintf("1.Editor/r/n");

cprintf("2.Back");

x=X1;

y=Y1;

x1_lenth=X1_LENTH;

nowbar_file(x,y,x1_lenth);

gotoxy(1,1);

for(;key_BOARD!=KEY_ENTER;)//進入一個以ENTER鍵為退出的FOR循環當中,CASE-DOWN是鍵盤的下移鍵,CASE-UP是鍵盤的上 移鍵,通過BAR函數的調用來實現光標的顯示。

{

key_BOARD=key();

switch(key_BOARD){

caseKEY_DOWN:{

++y;

if(y==(Y1+Y1_LENTH+1))y=Y1;

nowbar_file(x,y,x1_lenth);

if(y!=Y1)nowbardown_file(x,y,x1_lenth);

elsenowbardown_file(x,Y1+Y1_LENTH+1,x1_lenth);

gotoxy(1,(y-Y1+1));

break;

}

caseKEY_UP:{

--y;

if(y==(Y1-1))y=Y1+Y1_LENTH;

nowbar_file(x,y,x1_lenth);

if(y!=(Y1+Y1_LENTH))nowbarup_file(x,y,x1_lenth);

elsenowbarup_file(x,Y1-1,x1_lenth);

gotoxy(1,(y-Y1+1));

break;

}

}

}

returny;

}

/*登陸函數*/

voidnowbar(inty)

{

inti;

typedefstructtextl_struct

{

unsignedcharch;

unsignedcharattr;

}

texel;

texelt;

for(i=36;i<=46;i++) ??

{

gettext(i,y,i,y,&t);

t.attr=(BLUE<<4)+WHITE; ??

puttext(i,y,i,y,&t);

}

return;

}

voidnowbardown(inty)

{

inti;

typedefstructtextl_struct

{

unsignedcharch;

unsignedcharattr;

}

texel;

texelt;

y--;

for(i=36;i<=46;i++) ????

{

gettext(i,y,i,y,&t);

t.attr=(RED<<4)+WHITE; ????

puttext(i,y,i,y,&t);

}

return;

}

voidnowbarup(inty)

{

inti;

typedefstructtextl_struct

{

unsignedcharch;

unsignedcharattr;

}

texel;

texelt;

y++;

for(i=36;i<=46;i++) ??

{

gettext(i,y,i,y,&t);

t.attr=(RED<<4)+WHITE; ???

puttext(i,y,i,y,&t);

}

return;

}

責任編輯:haq

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 編程
    +關注

    關注

    88

    文章

    3616

    瀏覽量

    93763
  • 圖形
    +關注

    關注

    0

    文章

    71

    瀏覽量

    19295

原文標題:經典圖形化編程例程介紹-CGUI編程后續例程直接可以使用

文章出處:【微信號:KY_QRS,微信公眾號:開源嵌入式】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    SUMIF函數與SUMIFS函數的區別

    SUMIF函數和SUMIFS函數都是Excel中用于條件求和的函數,它們可以幫助用戶根據特定的條件對數據進行求和。盡管它們的基本功能相似,但在使用場景和功能上存在一些差異。以下是對這兩個函數
    的頭像 發表于 10-30 09:51 ?1134次閱讀

    SUMIF函數使用教程

    SUMIF函數是Excel中非常實用的函數之一,能夠根據指定條件對數據進行篩選和求和操作。以下是對SUMIF函數使用方法的詳細教程: 一、基本語法 SUMIF函數的基本語法為: =SU
    的頭像 發表于 10-30 09:50 ?429次閱讀

    什么叫系統的頻率響應函數?它和傳遞函數有何關系

    工具。它是一個復數函數,通常用H(jω)表示,其中ω是角頻率,j是虛數單位。頻率響應函數可以提供系統在頻域內的行為特征,包括系統的增益、相位以及共振頻率等信息。 頻率響應函數與傳遞
    的頭像 發表于 10-18 09:29 ?1774次閱讀

    面試常考+1:函數指針與指針函數、數組指針與指針數組

    在嵌入式開發領域,函數指針、指針函數、數組指針和指針數組是一些非常重要但又容易混淆的概念。理解它們的特性和應用場景,對于提升嵌入式程序的效率和質量至關重要。一、指針函數函數指針指針
    的頭像 發表于 08-10 08:11 ?877次閱讀
    面試常考+1:<b class='flag-5'>函數</b>指針與指針<b class='flag-5'>函數</b>、數組指針與指針數組

    卷積神經網絡激活函數的作用

    起著至關重要的作用,它們可以增加網絡的非線性,提高網絡的表達能力,使網絡能夠學習到更加復雜的特征。本文將詳細介紹卷積神經網絡中激活函數的作用、常見激活函數及其特點,以及激活函數在網絡優
    的頭像 發表于 07-03 09:18 ?1107次閱讀

    函數信號發生器怎么調頻率

    函數信號發生器是一種常用的電子測試設備,它能夠產生各種波形、頻率和幅度的信號,廣泛應用于科研、教學、生產和維修等領域。在使用函數信號發生器時,調整頻率是其中一個非常重要的步驟。本文將詳細介紹函數信號發生器如何調整頻率,
    的頭像 發表于 05-20 18:23 ?1642次閱讀

    sprintf函數和STemwin里的GUI_TOUCH_Exec()函數起沖突是什么原因導致的?

    有個新問題請教,我要是用 sprintf顯示字符,為什么%d,%s都可以,而%f一直都是0.000000? 后來發現是調用stemwin里的GUI_TOUCH_Exec()函數有沖突,當不調
    發表于 05-06 08:14

    回調函數(callback)是什么?回調函數的實現方法

    回調函數是一種特殊的函數,它作為參數傳遞給另一個函數,并在被調用函數執行完畢后被調用。回調函數通常用于事件處理、異步編程和處理各種操作系統和
    發表于 03-12 11:46 ?2954次閱讀

    淺談C語言中的函數定義

    如果函數要使用參數,則必須聲明接受參數值的變量。這些變量稱為函數的形式參數。 形式參數就像函數內的其他局部變量,在進入函數時被創建,退出函數
    發表于 03-11 10:09 ?395次閱讀

    函數指針與回調函數的應用實例

    通常我們說的指針變量是指向一個整型、字符型或數組等變量,而函數指針是指向函數函數指針可以像一般函數一樣,用于調用函數、傳遞參數。
    的頭像 發表于 03-07 11:13 ?405次閱讀
    <b class='flag-5'>函數</b>指針與回調<b class='flag-5'>函數</b>的應用實例

    output函數怎么用

    輸出到標準輸出(通常是控制臺窗口)。 在 Python 中,你可以使用 print 函數輸出任何你想要查看的內容,包括字符串、變量等。以下是使用 print 函數的幾個示例: 輸出字符串: print
    的頭像 發表于 02-23 14:21 ?1269次閱讀

    verilog function函數的用法

    Verilog 中被廣泛用于對電路進行模塊化設計,以簡化和組織代碼。 本文將詳細介紹 Verilog 函數的用法,并探討函數在硬件設計中的重要性和實際應用場景。 一. Verilog 函數概述 Verilog
    的頭像 發表于 02-22 15:49 ?5740次閱讀

    內聯函數定義 為什么需要內聯函數

    inline關鍵字是C99標準的型關鍵字,其作用是將函數展開,把函數的代碼復制到每一個調用處。
    的頭像 發表于 02-19 12:20 ?551次閱讀

    傳遞函數的定義是什么 傳遞函數的拉氏反變換是什么響應

    傳遞函數的定義: 傳遞函數是一種數學工具,用于描述線性時不變系統(LTI系統)的輸入與輸出之間的關系,通常用H(s)表示。傳遞函數是Laplace變換的函數,其中s是復變量。傳遞
    的頭像 發表于 02-01 10:53 ?4522次閱讀

    函數指針和指針函數是不是一個東西?

    函數指針的本質是指針,就跟整型指針、字符指針一樣,函數指針指向的是一個函數
    的頭像 發表于 01-03 16:35 ?536次閱讀
    <b class='flag-5'>函數</b>指針和指針<b class='flag-5'>函數</b>是不是一個東西?
    主站蜘蛛池模板: 特级毛片aaaa免费观看| 免费成人看片| 天天射综合网站| 亚洲成a人片毛片在线| 亚洲精品mv在线观看| 逼逼视频网站| 天天天天天干| 激情www| 999久久久国产精品| hdhdhd69日本xxx| 老师下面好湿好紧好滑好想要| 国产精品女丝袜白丝袜| 亚洲精品成人在线| 乱h亲女小说| 一级一片免费播放| 色婷婷精品综合久久狠狠| 一级做a爰片久久毛片一| 一级特黄色毛片免费看| 四虎美女| 黄色三级视频| 羞羞答答xxdd影院欧美| 免费一级e一片在线播放| 欧美性猛| 综合亚洲色图| 精品国产中文一级毛片在线看| 伊人久久大香线蕉综合7| 特黄特色三级在线观看| 噜噜噜噜私人影院| 在线观看免费xx高清视频| 美女被草视频| 日本欧美视频| 视频一区日韩| 国产全肉乱妇杂乱视频| 天天视频在线观看免费| 成年片色大黄全免费| 欧美色爱综合| 日日噜噜夜夜狠狠久久aⅴ| 国产一级片免费| 人人爽人人干| 性8sex亚洲区入口| 四虎永久精品免费网址大全|