在线观看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

    文章

    3687

    瀏覽量

    95104
  • 圖形
    +關注

    關注

    0

    文章

    72

    瀏覽量

    19623

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

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    詳解RTOS中的Hook函數

    Hook函數是RTOS中的一個關鍵特性,通過該函數,用戶可以增強對任務管理的控制,定義系統行為。
    的頭像 發表于 03-24 16:14 ?355次閱讀

    解鎖TSMaster fifo函數:報文讀取的高效方法

    入門》手冊。1.技術背景TSMaster的小程序模塊中提供了接收事件、發送事件以及預發送事件等回調事件,如圖1。相比于回調函數,fifo函數使用起來比較靈活方便,可
    的頭像 發表于 03-14 20:04 ?436次閱讀
    解鎖TSMaster fifo<b class='flag-5'>函數</b>:報文讀取的高效方法

    西門子TIA Portal中函數FC和函數塊FB的相互轉換

    描述 本文將介紹在西門子 TIA Portal 中使用 Add-In 插件實現函數 FC 和函數塊 FB 的相互轉換的方法和步驟。 第1步: 添加 PLC 設備。 選擇西門子 CPU 1214C
    的頭像 發表于 01-15 10:07 ?1865次閱讀
    西門子TIA Portal中<b class='flag-5'>函數</b>FC和<b class='flag-5'>函數</b>塊FB的相互轉換

    關聯接口函數與libmodbus移植

    可以發現,除了modbus.h包含的接口函數之外,modbus-rtu.h和modbus-tcp.h也包含了必要的接口函數。
    的頭像 發表于 12-30 15:20 ?1189次閱讀
    關聯接口<b class='flag-5'>函數</b>與libmodbus移植

    常用SQL函數及其用法

    SQL(Structured Query Language)是一種用于管理和操作關系數據庫的編程語言。SQL 提供了豐富的函數庫,用于數據檢索、數據更新、數據刪除以及數據聚合等操作。以下是一些常用
    的頭像 發表于 11-19 10:18 ?1376次閱讀

    如何優化SUMIF函數的效率

    在Excel中, SUMIF 函數是一個非常有用的工具,它可以根據指定的條件對數據進行求和。然而,在處理大量數據時, SUMIF 函數可能會變得效率低下。以下是一些優化 SUMIF 函數效率的方法
    的頭像 發表于 11-11 09:20 ?1249次閱讀

    SUMIF函數對比VLOOKUP的優勢

    在Excel中,數據管理和分析是日常工作中不可或缺的一部分。SUMIF函數和VLOOKUP函數是兩個非常受歡迎的函數,它們可以幫助用戶快速地處理和分析數據。盡管它們都可以用于查找和匯總數據,但它們在
    的頭像 發表于 11-11 09:16 ?1190次閱讀

    SUMIF函數與SUMIFS函數的區別

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

    SUMIF函數使用教程

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

    RTOS中鉤子函數的用途及用法

    在很多操作系統中,都存在這樣一類API函數接口:HOOK函數(也叫鉤子函數)。
    的頭像 發表于 10-23 16:25 ?760次閱讀
    RTOS中鉤子<b class='flag-5'>函數</b>的用途及用法

    如何由系統函數求頻率響應

    頻率響應函數表征了測試系統對給定頻率下的穩態輸出與輸入的關系,可以通過系統函數(或稱為傳遞函數)來求解。以下是由系統函數求頻率響應的步驟: 一、理解系統
    的頭像 發表于 10-18 09:32 ?3446次閱讀

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

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

    labview常用的基本函數

    電子發燒友網站提供《labview常用的基本函數.pdf》資料免費下載
    發表于 10-15 17:29 ?7次下載

    壓敏電阻壓力與電阻函數關系

    壓敏電阻的材料、結構以及制造工藝的不同而有所差異。 一般來說,壓敏電阻的電阻值R與所受壓力F之間的函數關系可以表達為反比關系或一次函數關系,但更常見的是通過實驗數據擬合得到的非線性關系。以下是一些可能的
    的頭像 發表于 09-25 09:30 ?1955次閱讀

    面試???1:函數指針與指針函數、數組指針與指針數組

    在嵌入式開發領域,函數指針、指針函數、數組指針和指針數組是一些非常重要但又容易混淆的概念。理解它們的特性和應用場景,對于提升嵌入式程序的效率和質量至關重要。一、指針函數函數指針指針
    的頭像 發表于 08-10 08:11 ?1434次閱讀
    面試???1:<b class='flag-5'>函數</b>指針與指針<b class='flag-5'>函數</b>、數組指針與指針數組
    主站蜘蛛池模板: a天堂影院 | 色天天网 | 色黄网站 | 一级毛片黄色 | 色婷婷资源网 | 哥也操 | 黄网址免费 | 1024你懂的在线播放欧日韩 | 日本写真高清视频免费网站网 | h视频在线免费观看 | 国模私拍视频在线观看 | 特级一级毛片 | 日日操天天射 | 正在播放一区二区 | 天天爽天天爽天天片a久久网 | 美国一级毛片免费看成人 | 人人干人人爽 | 亚洲一区二区三区不卡视频 | 无人码一区二区三区视频 | 久久久久久夜精品精品免费啦 | 丁香婷婷在线 | 国产一级特黄aaaa大片野外 | 亚洲视频欧美视频 | 天天爱天天做天天爽天天躁 | 亚洲 欧美 另类 综合 日韩 | 男人j桶女人j免费视频 | 69久久夜色精品国产69 | 黄色一级毛片在线观看 | 人人做人人爽人人爱秋霞影视 | 国产精品欧美一区二区 | 永久免费在线播放 | 一级特黄性色生活片一区二区 | 黄色网址网站在线观看 | 日日噜噜夜夜狠狠va视频 | 欧美深夜福利 | 亚洲qingse中文字幕久久 | 九七婷婷狠狠成人免费视频 | 97精品伊人久久久大香线焦 | 四虎影视国产精品 | h在线视频 | 男女视频在线观看 |