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

    文章

    3645

    浏览量

    94187
  • 图形
    +关注

    关注

    0

    文章

    71

    浏览量

    19375

原文标题:经典图形化编程例程介绍-CGUI编程后续例程直接可以使用

文章出处:【微信号:KY_QRS,微信公众号:开源嵌入式】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    相关推荐

    常用SQL函数及其用法

    SQL(Structured Query Language)是一种用于管理和操作关系数据库的编程语言。SQL 提供了丰富的函数库,用于数据检索、数据更新、数据删除以及数据聚合等操作。以下是一些常用
    的头像 发表于 11-19 10:18 547次阅读

    SUMIF函数与SUMIFS函数的区别

    SUMIF函数和SUMIFS函数都是Excel中用于条件求和的函数,它们可以帮助用户根据特定的条件对数据进行求和。尽管它们的基本功能相似,但在使用场景和功能上存在一些差异。以下是对这两个函数
    的头像 发表于 10-30 09:51 1912次阅读

    SUMIF函数使用教程

    SUMIF函数是Excel中非常实用的函数之一,能够根据指定条件对数据进行筛选和求和操作。以下是对SUMIF函数使用方法的详细教程: 一、基本语法 SUMIF函数的基本语法为: =SU
    的头像 发表于 10-30 09:50 796次阅读

    如何由系统函数求频率响应

    频率响应函数表征了测试系统对给定频率下的稳态输出与输入的关系,可以通过系统函数(或称为传递函数)来求解。以下是由系统函数求频率响应的步骤: 一、理解系统
    的头像 发表于 10-18 09:32 2069次阅读

    什么叫系统的频率响应函数?它和传递函数有何关系

    工具。它是一个复数函数,通常用H(jω)表示,其中ω是角频率,j是虚数单位。频率响应函数可以提供系统在频域内的行为特征,包括系统的增益、相位以及共振频率等信息。 频率响应函数与传递
    的头像 发表于 10-18 09:29 2532次阅读

    面试常考+1:函数指针与指针函数、数组指针与指针数组

    在嵌入式开发领域,函数指针、指针函数、数组指针和指针数组是一些非常重要但又容易混淆的概念。理解它们的特性和应用场景,对于提升嵌入式程序的效率和质量至关重要。一、指针函数函数指针指针
    的头像 发表于 08-10 08:11 1022次阅读
    面试常考+1:<b class='flag-5'>函数</b>指针与指针<b class='flag-5'>函数</b>、数组指针与指针数组

    卷积神经网络激活函数的作用

    起着至关重要的作用,它们可以增加网络的非线性,提高网络的表达能力,使网络能够学习到更加复杂的特征。本文将详细介绍卷积神经网络中激活函数的作用、常见激活函数及其特点,以及激活函数在网络优
    的头像 发表于 07-03 09:18 1314次阅读

    神经网络中的激活函数有哪些

    在神经网络中,激活函数是一个至关重要的组成部分,它决定了神经元对于输入信号的反应方式,为神经网络引入了非线性因素,使得网络能够学习和处理复杂的模式。本文将详细介绍神经网络中常用的激活函数,包括其定义、特点、数学形式
    的头像 发表于 07-01 11:52 716次阅读

    函数信号发生器怎么调频率

    函数信号发生器是一种常用的电子测试设备,它能够产生各种波形、频率和幅度的信号,广泛应用于科研、教学、生产和维修等领域。在使用函数信号发生器时,调整频率是其中一个非常重要的步骤。本文将详细介绍函数信号发生器如何调整频率,
    的头像 发表于 05-20 18:23 1831次阅读

    sprintf函数和STemwin里的GUI_TOUCH_Exec()函数起冲突是什么原因导致的?

    有个新问题请教,我要是用 sprintf显示字符,为什么%d,%s都可以,而%f一直都是0.000000? 后来发现是调用stemwin里的GUI_TOUCH_Exec()函数有冲突,当不调
    发表于 05-06 08:14

    PyTorch中激活函数的全面概览

    为了更清晰地学习Pytorch中的激活函数,并对比它们之间的不同,这里对最新版本的Pytorch中的激活函数进行了汇总,主要介绍激活函数的公式、图像以及使用方法,具体细节可查看官方文档
    的头像 发表于 04-30 09:26 640次阅读
    PyTorch中激活<b class='flag-5'>函数</b>的全面概览

    PHP用户定义函数详细讲解

    描述 在所有编程和脚本语言中,函数是可以在程序中重复使用的语句块。在 PHP 中,函数的概念与另一种语言(如“C”)中的概念相同。标准 PHP 发行版中有 1,000 多个内置函数。除此之外,我们
    的头像 发表于 03-20 14:27 468次阅读

    回调函数(callback)是什么?回调函数的实现方法

    回调函数是一种特殊的函数,它作为参数传递给另一个函数,并在被调用函数执行完毕后被调用。回调函数通常用于事件处理、异步编程和处理各种操作系统和
    发表于 03-12 11:46 3265次阅读

    浅谈C语言中的函数定义

    如果函数要使用参数,则必须声明接受参数值的变量。这些变量称为函数的形式参数。 形式参数就像函数内的其他局部变量,在进入函数时被创建,退出函数
    发表于 03-11 10:09 486次阅读

    函数指针与回调函数的应用实例

    通常我们说的指针变量是指向一个整型、字符型或数组等变量,而函数指针是指向函数函数指针可以像一般函数一样,用于调用函数、传递参数。
    的头像 发表于 03-07 11:13 457次阅读
    <b class='flag-5'>函数</b>指针与回调<b class='flag-5'>函数</b>的应用实例