用纯C语言写窗体程序的教程

用纯C语言写窗体程序的教程,第1张

这个你真的得去问大神了。如果是纯c语言去写窗体程序,可以说是很不实际的。我建议你现在可以去学习c++了,在vc环境下借助MFC(微软基准类库)去写窗体应用程序,写窗体应用程序都是利用别人已经写好的东西去实现的。如果你再往后学面向对象,c#,java等你会发现写个窗体应用程序实在是太简单了,但其实它们的基础都是c语言,学好c语言还是很重要的。

vc建工程,不用mfc,atl什么的,直接选win32,然后会自动生成工程文件的,代码就是c的api的窗体。

devc也差不多

---------------------------------

win-tc。。。好吧,那个是dos平台的,不可能写windows窗口程序。

不知道你的“窗体”是不是指windows的窗口程序。。。

Turbo

C20的字符屏幕函数主要包括文本窗口大小的设定、窗口颜色的设置、

窗口文本的清除和输入输出等函数。

1文本窗口的定义

Turbo

C20默认定义的文本窗口为整个屏幕,

共有80列(或40列)25行的文本

单元,

每个单元包括一个字符和一个属性,

字符即ASCII

码字符,

属性规定该字

符的颜色和强度。

Turbo

C20可以定义屏幕上的一个矩形域作为窗口,

使用window()函数定义。

窗口定义之后,

用有关窗口的输入输出函数就可以只在此窗口内进行 *** 作而不超

出窗口的边界。

window()函数的调用格式为:

void

window(int

left,

int

top,

int

right,

int

bottom);

该函数的原型在conioh

(关于文本窗口的所有函数其头文件均为conioh,

后面不再说明)。

函数中形式参数(int

left,

int

top)是窗口左上角的坐标,

(int

right,

int

bottom)是窗口的右下角坐标,

其中(left,

top)和(right,

bottom)

是相对于整个屏幕而言的。

Turbo

C

20规定整个屏幕的左上角坐标为

(1,

1),

右下角坐标为(80,

25)。并规定沿水平方向为

X轴,

方向朝右;

沿垂直

方向为

Y轴,

方向朝下。若window()函数中的坐标超过了屏幕坐标的界限,

则窗

口的定义就失去了意义,

也就是说定义将不起作用,

但程序编译链接时并不出错。

另外,

一个屏幕可以定义多个窗口,

但现行窗口只能有一个(因为DOS为单任

务 *** 作系统),

当需要用另一窗口时,

可将定义该窗口的window()

函数再调用一

次,

此时该窗口便成为现行窗口了。

如要定义一个窗口左上角在屏幕(20,

5)处,

大小为30列15行的窗口可写成:

window(20,

5,

50,

25);

2

文本窗口颜色的设置

文本窗口颜色的设置包括背景颜色的设置和字符颜色的设置,

使用的函数及

其调用格式为:

设置背景颜色:

void

textbackground(int

color);

设置字符颜色:

void

textcolor(int

color);

有关颜色的定义见表1。

表1

有关颜色的定义

━━━━━━━━━━━━━━━━━━━━━━━━━━━

符号常数

数值

含义

字符或背景

———————————————————————————

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

闪烁

只用于字符

━━━━━━━━━━━━━━━━━━━━━━━━━━━

上表中的符号常数与相应的数值等价,

二者可以互换。例如设定兰色背景可

以使用textbackground(1),

也可以使用textbackground(BLUE),

两者没有任何

区别,

只不过后者比较容易记忆,

一看就知道是兰色。

Turbo

C另外还提供了一个函数,

可以同时设置文本的字符和背景颜色,

个函数的调用格式为:

void

textattr(int

attr);

其中:

attr的值表示颜色形式编码的信息,

每一位代表的含义如下:

7

6

5

4

3

2

1

0

B

b

b

b

c

c

c

c

┕━━━┙

┖—————┘

闪烁

背景颜色

字符颜色

字节低四位cccc设置字符颜色(0到15),

4~6三位bbb设置背景颜色(0到7),

第7位B设置字符是否闪烁。假如要设置一个兰底黄字,

定义方法如下:

textattr(YELLOW+(BLUE<<4));

若再要求字符闪烁,

则定义变为:

textattr(128+YELLOW+(BLUE<<4);

注意:

(1)

对于背景只有0

到7

共八种颜色,

若取大于7

小于15的数,

则代表的

颜色与减

7后的值对应的颜色相同。

(2)

用textbackground()和textcolor()

函数设置了窗口的背景与字符颜

色后,

在没有用clrscr()函数清除窗口之前,

颜色不会改变,

直到使用了函数

clrscr(),

整个窗口和随后输出到窗口中的文本字符才会变成新颜色。

(3)

用textattr()函数时背景颜色应左移4位,

才能使3位背景颜色移到正

确位置。

下面这个程序使用了关于窗口大小的定义、颜色的设置等函数,

在一个屏幕

上不同位置定义了7个窗口,

其背景色分别使用了7种不同的颜色。

例1:

#include

<stdioh>

#include

<conioh>

main()

{

int

i;

textbackground(0);

/

设置屏幕背景色

/

clrscr();

/

清除文本屏幕

/

for(i=1;

i<8;

i++)

{

window(10+i5,

5+i,

30+i5,

15+i);

/

定义文本窗口

/

textbackground(i);

/

定义窗口背景色

/

clrscr();

/

清除窗口

/

}

getch();

}

3

窗口内文本的输入输出函数

一、窗口内文本的输出函数

int

cprintf("<格式化字符串>",

<变量表>);

int

cputs(char

string);

int

putch(int

ch);

cprintf()函数输出一个格式化的字符串或数值到窗口中。它与printf()

数的用法完全一样,

区别在于cprintf()函数的输出受窗口限制,

而printf()

数的输出为整个屏幕。

cputs()函数输出一个字符串到屏幕上,

它与puts()函数用法完全一样,

是受窗口大小的限制。

putch()函数输出一个字符到窗口内。

注意:

(1)

使用以上几种函数,

当输出超出窗口的右边界时会自动转到下一行的

开始处继续输出。当窗口内填满内容仍没有结束输出时,

窗口屏幕将会自动逐行

上卷直到输出结束为止。

二、窗口内文本的输入函数

int

getche(void);

该函数在前面已经讲过,

需要说明的是,

getche()函数从键盘上获得一个字

符,

在屏幕上显示的时候,

如果字符超过了窗口右边界,

则会被自动转移到下一

行的开始位置。

下面这个程序给例1中加入了一些文本的输出函数。

例2:

#include

<stdioh>

#include

<conioh>

int

main()

{

int

i;

char

c[]={"BLACK",

"BLUE",

"GREEN",

"CYAN",

"RED",

"MAGENTA",

"BROWN",

"LIGHTGRAY"};

textbackground(0);

/

设置屏幕背景色

/

clrscr();

/

清除文本屏幕

/

for(i=1;

i<8;

i++)

{

window(10+i5,

5+i,

30+i5,

15+i);

/

定义文本窗口

/

textbackground(i);

/

定义窗口背景色

/

clrscr();

/

清除窗口

/

}

getch();

return

0;

}

4

有关屏幕 *** 作的函数

void

clrscr(void);

清除当前窗口中的文本内容,

并把光标定位在窗口

的左上角(1,

1)处。

void

clreol(void);

清除当前窗口中从光标位置到行尾的所有字符,

标位置不变。

void

gotoxy(x,

y);

该函数很有用,

它用来定位光标在当前窗口中的位

置。这里x,

y是指光标要定位处的坐标(相对于窗口

而言),

当x,

y超出了窗口的大小时,

该函数就不起

作用了。

int

gettext(int

xl,

int

yl,

int

x2,

int

y2,

void

buffer);

int

puttext(int

x1,

int

y1,

int

x2,

int

y2,

void

buffer);

gettext()函数是将屏幕上指定的矩形区域内文本内容存入buffer

指针指向

的一个内存空间。内存的大小用下式计算:

所用字节大小=行数列数2

其中:

行数=y2-y1+1

列数=x2-x1+1

puttext()函数则是将gettext()函数存入内存buffer中的文字内容拷贝到屏

幕上指定的位置。

int

movetext(int

x1,

int

x2,

int

y2,

int

x3,

int

y3);

movetext()函数将屏幕上左上角为(x1,

y1),

右下角为(x2,

y2)的一矩形窗

口内的文本内容拷贝到左上角为(x3,

y3)的新的位置。该函数的坐标也是相对于

整个屏幕而言的。

注意:

1

gettext()函数和puttext()函数中的坐标是对整个屏幕而言的,

即是屏

幕的绝对坐标,

而不是相对窗口的坐标。

2

movetext()函数是拷贝而不是移动窗口区域内容,

即使用该函数后,

位置区域的文本内容仍然存在。

例3

include

<conioh>

main()

{

int

i;

char

f[]={"Load

F3",

"Pick

Alt-F3",

"New

",

"Save

F2",

"Write

to

",

"Directory",

"Change

dir",

"Os

shee

",

"Quit

Alt-X"};

char

buf[9142];

clrscr();

textcolor(YELLOW);

textbackground(BLUE);

clrscr();

gettext(10,

2,

24,

11,

buf);

window(10,

2,

24,

11);

textbackground(RED);

textcolor(YELLOW);

clrscr();

for(i=0;

i<9;

i++)

{

gotoxy(1,

i++);

cprintf("%s",

f[i]);

}

getch();

movetext(10,

2,

24,

11,

40,

10);

puttext(10,

2,

24,

11,

buf);

getch();

}

下面再介绍一些函数:

void

highvideo(void);

设置显示器高亮度显示字符。

void

lowvideo(void);

设置显示器低亮度显示字符。

void

normvideo(void);

使显示器返回到程序运行前的显示方式。

int

wherex(void);

这两个函数返回当前窗口下光标的x,

y坐标。

int

wherey(void);

打开文件夹, 例如:[C:\Windows]

SystemDiagnosticsProcessStart("explorer", "/n, C:\\Windows");

打开[我的电脑]

SystemDiagnosticsProcessStart("explorer","/n,/select, C:\\");

打开文本文件, 例如:[C:\testtxt]

SystemDiagnosticsProcessStart("explorer", "/n, C:\\testtxt");

打开应用程序, 例如:计算器

SystemDiagnosticsProcessStart("C:\\Windows\\system32\\calcexe");

以上这些都会在新窗口中打开,外边加个循环就可以了 只实验了10次的,没有问题,不知道太多了会有什么问题出现

通过调用windows API来创建窗口:

#include<windowsh>

int main()

{

MessageBox(NULL,"Hello World!","C图形程序",MB_OK);

return 0;

}

这个是最简单的了 

至于MFC  QT 什么的 代码太多了

以上就是关于用纯C语言写窗体程序的教程全部的内容,包括:用纯C语言写窗体程序的教程、c语言窗体的代码、如何用turbo c写窗体程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10093219.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存