用C语言能把程序的界面做的很漂亮吗(比如像QQ那样的界面)?
怎么做呢?
我现在写的C程序只能在DOS下运行,看着很丑......
你的程序怎么运行不了?
BGI Error: Graphics not initialized (use 'initgraph')
怎么办?
用C语言能把程序的界面做的很漂亮吗?
答案:3 悬赏:30
解决时间 2021-02-20 21:57
- 提问者网友:但未伤到心
- 2021-02-20 03:03
最佳答案
- 二级知识专家网友:情战辞言
- 2021-02-20 03:10
c 语言 可以做出非常漂亮的界面。理论上界面只不过是计算机对每一个像素的控制而已。c 完全有这种能力,只不过较复杂。
这个例子看起来就很漂亮嘛。
#include
#include
#include
#define CENTERX 320
#define CENTERY 175
#define CLICK 100
#define CLICKDELAY 30
#define HEBEEP 10000
#define LOWBEEP 500
#define BEEPDELAY 200
int Mrk_1[8]={-5,-160,5,-160,5,-130,-5,-130, };
int Mrk_2[8]={-5,-160,5,-160,2,-130,-2-130, };
int HourHand[8]={-3,-100,3,-120,4, 10,-4,10};
int MiHand[8]={-3,-120,3,-120,4, 10,-4,10};
int SecHand[8]={-2,-150,2,-150,3, 10,-3,10};
void Click()
{
sound(CLICK);
delay(CLICKDELAY);
nosound();
}
void HighBeep()
{
sound(HEBEEP);
delay(BEEPDELAY);
nosound;
}
void LowBeep()
{
sound(LOWBEEP);
}
void DrawPoly(int *data,int angle,int color)
{
int usedata[8];
float sinang,cosang;
int i;
sinang=sin((float)angle/180*3.14);
cosang=cos((float)angle/180*3.14);
for(i=0;i<8;i+=2)
{
usedata[i] =CENTERX+ cosang*data[i]-sinang*data[i+1]+.5;
usedata[i+1]=CENTERY+sinang*data[i]+cosang*data[i+1]+.5;
}
setfillstyle(SOLID_FILL,color);
fillpoly(4,usedata);
}
void DrawClock(struct time *cutime)
{
int ang;
float hourrate,minrate,secrate;
setbkcolor(BLUE);
cleardevice();
setcolor(WHITE);
for(ang=0;ang<360;ang+=90)
{
DrawPoly(Mrk_1,ang,WHITE);
DrawPoly(Mrk_2,ang+30,WHITE);
DrawPoly(Mrk_2,ang+60,WHITE);
}
secrate=(float)cutime->ti_sec/60;
minrate=((float)cutime->ti_min+secrate)/60;
hourrate=(((float)cutime->ti_hour/12)+minrate)/12;
ang=hourrate*360;
DrawPoly(HourHand,ang,YELLOW);
ang=minrate*360;
DrawPoly(MiHand,ang, GREEN);
ang=secrate*360;
DrawPoly(SecHand,ang, RED);
}
main()
{
int gdriver=EGA,
gmode=EGAHI;
int curpage;
struct time curtime ,newtime ;
initgraph(&gdriver,&gmode,"c:\\tc");
setbkcolor(BLUE);
cleardevice();
gettime(&curtime);
curpage=0;
DrawClock(&curtime);
while(1)
{
if(kbhit())
break;
gettime(&newtime);
if(newtime.ti_sec!=curtime.ti_sec)
{
if(curpage==0)
curpage=1;
else
curpage=0;
curtime=newtime;
setactivepage(curpage);
DrawClock(&curtime);
setvisualpage(curpage);
if(newtime.ti_min==0&&newtime.ti_sec==0)
HighBeep();
else if(newtime.ti_min==59&&
newtime.ti_sec<=59)
LowBeep();
else
Click();
}
}
closegraph();
}
这个例子看起来就很漂亮嘛。
#include
#include
#include
#define CENTERX 320
#define CENTERY 175
#define CLICK 100
#define CLICKDELAY 30
#define HEBEEP 10000
#define LOWBEEP 500
#define BEEPDELAY 200
int Mrk_1[8]={-5,-160,5,-160,5,-130,-5,-130, };
int Mrk_2[8]={-5,-160,5,-160,2,-130,-2-130, };
int HourHand[8]={-3,-100,3,-120,4, 10,-4,10};
int MiHand[8]={-3,-120,3,-120,4, 10,-4,10};
int SecHand[8]={-2,-150,2,-150,3, 10,-3,10};
void Click()
{
sound(CLICK);
delay(CLICKDELAY);
nosound();
}
void HighBeep()
{
sound(HEBEEP);
delay(BEEPDELAY);
nosound;
}
void LowBeep()
{
sound(LOWBEEP);
}
void DrawPoly(int *data,int angle,int color)
{
int usedata[8];
float sinang,cosang;
int i;
sinang=sin((float)angle/180*3.14);
cosang=cos((float)angle/180*3.14);
for(i=0;i<8;i+=2)
{
usedata[i] =CENTERX+ cosang*data[i]-sinang*data[i+1]+.5;
usedata[i+1]=CENTERY+sinang*data[i]+cosang*data[i+1]+.5;
}
setfillstyle(SOLID_FILL,color);
fillpoly(4,usedata);
}
void DrawClock(struct time *cutime)
{
int ang;
float hourrate,minrate,secrate;
setbkcolor(BLUE);
cleardevice();
setcolor(WHITE);
for(ang=0;ang<360;ang+=90)
{
DrawPoly(Mrk_1,ang,WHITE);
DrawPoly(Mrk_2,ang+30,WHITE);
DrawPoly(Mrk_2,ang+60,WHITE);
}
secrate=(float)cutime->ti_sec/60;
minrate=((float)cutime->ti_min+secrate)/60;
hourrate=(((float)cutime->ti_hour/12)+minrate)/12;
ang=hourrate*360;
DrawPoly(HourHand,ang,YELLOW);
ang=minrate*360;
DrawPoly(MiHand,ang, GREEN);
ang=secrate*360;
DrawPoly(SecHand,ang, RED);
}
main()
{
int gdriver=EGA,
gmode=EGAHI;
int curpage;
struct time curtime ,newtime ;
initgraph(&gdriver,&gmode,"c:\\tc");
setbkcolor(BLUE);
cleardevice();
gettime(&curtime);
curpage=0;
DrawClock(&curtime);
while(1)
{
if(kbhit())
break;
gettime(&newtime);
if(newtime.ti_sec!=curtime.ti_sec)
{
if(curpage==0)
curpage=1;
else
curpage=0;
curtime=newtime;
setactivepage(curpage);
DrawClock(&curtime);
setvisualpage(curpage);
if(newtime.ti_min==0&&newtime.ti_sec==0)
HighBeep();
else if(newtime.ti_min==59&&
newtime.ti_sec<=59)
LowBeep();
else
Click();
}
}
closegraph();
}
全部回答
- 1楼网友:迷人小乖乖
- 2021-02-20 04:29
您可以使用第三方的 界面库,比如 skinse,directui界面库
等。都有支持纯c的接口。- 2楼网友:狙击你的心
- 2021-02-20 03:41
能做出来就不错了,效果不能抱啥希望。
C语言中要做图形见面,首先需要设置为图形模式,确定显卡类型,对屏幕进行初始化等等,相关的函数如下:
1. detectgraph() 显示卡检测函数
2. initgraph() 图形初始化函数
3. getdrivername() 获取图形驱动程序名的指针
4. getgraphmode() 获取图形模式函数
5. getmoderange()获取模式值范围函数
6. getmaxmode()获取最大显示模式函数
7. getmodename()获取显示模式名函数
8. graphdefaults()图形设置复位缺省值函数
9. setgraphmode() 设置图形模式函数
10. restorecrtmode() 恢复文本显示模式函数
11. graphresult() 图形操作结果函数
12. grpaherrormsg() 图形错误信息函数
13. setgraphbufsize()设置图形缓冲区大小函数
14. setactivepage() 设置可输出显示页函数
15. setvisualpage() 设置可见显示页数
16. closegraph()关闭图形模式函数
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯