语文教学网 加入收藏  -  设为首页
您的位置:语文教学网 > 作文 > 正文
在VC 6.0用C或C++语言编写一个模拟图形时钟
在VC 6.0用C或C++语言编写一个模拟图形时钟
提示:

在VC 6.0用C或C++语言编写一个模拟图形时钟

graphics.h在VC上编译通不过的

给你一个,这个在TC上编译没问题,VC不行的,graphics.h在VC上编译通不过的

#include"graphics.h"
#include"math.h"
#include"dos.h"
#define pi 3.1415926
#define X(a,b,c) x=a*cos(b*c*pi/180-pi/2)+300
#define Y(a,b,c) y=a*sin(b*c*pi/180-pi/2)+240
#define d(a,b,c) X(a,b,c);Y(a,b,c);line(300,240,x,y)
void init() /*划时钟边框函数*/
{
int i,l,x1,x2,y1,y2;
setbkcolor(1);
circle(300,240,200);
circle(300,240,205);
circle(300,240,5);
for(i=0;i<60;i++) /*划钟点上的短线*/
{
if(i%5==0)
l=15;
else
l=5;
x1=200*sin(i*6*pi/180)+300;
y1=200*cos(i*6*pi/180)+240;
x2=(200-l)*sin(i*6*pi/180)+300;
y2=(200-l)*cos(i*6*pi/180)+240;
line(x1,y1,x2,y2);
}
}
main()
{
int x,y,i,k=1;
int gdriver=9,gmode=2;
unsigned char h,m,s;
int o,p,q;
float n;
struct time t[1];
struct date d[1];
initgraph(&gdriver,&gmode,"c:\\tc");
initgraph(&gdriver,&gmode,"c:\\tc");
for(i=0;i<=6;i++)
{
settextstyle(TRIPLEX_FONT,HORIZ_DIR,i); /*控制输出字符的字体,方向,大小*/
cleardevice();
settextjustify(1,1); /*在指定坐标上输出字符串*/
outtextxy(300,80,"12") ;
outtextxy(300,390,"6");
outtextxy(140,230,"9");
outtextxy(460,230,"3");
outtextxy(380,100,"1");
outtextxy(220,100,"11");
outtextxy(430,160,"2");
outtextxy(430,310,"4");
outtextxy(380,370,"5");
outtextxy(220,370,"7");
outtextxy(160,160,"10");
outtextxy(160,310,"8");
}
init();
setwritemode(1); /*设置画线的输出模式*/
if(k!=0)
{
getdate(d); /*获得系统日期函数*/
o=d[0].da_year;
p=d[0].da_mon;
q=d[0].da_day;
gettime(t); /*获得系统时间函数*/
h=t[0].ti_hour;
m=t[0].ti_min;
s=t[0].ti_sec;
}
setcolor(7); /*设置时针颜色*/
n=(float)h+(float)m/60;
d(150,n,30); /*画出时针*/
setcolor(14); /*设置分针颜色*/
d(170,m,6); /*画出分针*/
setcolor(4); /*设置秒针颜色*/
d(190,s,6); /*画出秒针*/
while(!kbhit()) /*控制程序按下任意键退出*/
{
while(t[0].ti_sec==s)
gettime(t);
gotoxy(44,18); /*使光标移动到指定坐标*/
printf("\b\b\b\b\b\b\b\b\b"); /*退格,使表示时间的字符串不断变化*/
sound(400); /*按给定的频率打开PC扬声器*/
delay(70); /*中断程序的执行,时间为70毫秒*/
sound(200);
delay(30);
nosound(); /*按给定的频率关闭PC扬声器*/
setcolor(4);
d(190,s,6);
s=t[0].ti_sec;
d(190,s,6);
if(t[0].ti_min!=m)
{
setcolor(14);
d(170,m,6);
m=t[0].ti_min;
d(170,m,6);
}
if(t[0].ti_hour!=h)
{

setcolor(7);
d(150,h,30);
h=t[0].ti_hour;
d(150,h,30);
sound(1000);
delay(240);
nosound();
delay(140);
sound(2000);
delay(240);
nosound();
}
if(s<10) /*用字符的形式输出时间*/
{ if(m<10)
printf("%u:0%u:0%u",h,m,s);
else
printf("%u:%u:0%u",h,m,s);
}
else
{ if(m<10)
printf("%u:0%u:%u",h,m,s);
else
printf("%u:%u:%u",h,m,s);
}
gotoxy(34,19); /*在指定坐标上输出日期*/
printf("%d年%d月%d日",o,p,q);
printf("\b\b\b\b\b\b\b\b\b");
}
getch();
closegraph();
}

C++语言编写一个模拟图形时钟
提示:

C++语言编写一个模拟图形时钟

/*--------------------------------------
CLOCK.C -- Analog Clock Program
(c) Charles Petzold, 1998
--------------------------------------*/

#include
#include

#define ID_TIMER 1
#define TWOPI (2 * 3.14159)

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM) ;

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
static TCHAR szAppName[] = TEXT ("Clock") ;
HWND hwnd;
MSG msg;
WNDCLASS wndclass ;

wndclass.style = CS_HREDRAW | CS_VREDRAW ;
wndclass.lpfnWndProc = WndProc ;
wndclass.cbClsExtra = 0 ;
wndclass.cbWndExtra = 0 ;
wndclass.hInstance = hInstance ;
wndclass.hIcon = NULL ;
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH) ;
wndclass.lpszMenuName = NULL ;
wndclass.lpszClassName = szAppName ;

if (!RegisterClass (&wndclass))
{
MessageBox (NULL, TEXT ("Program requires Windows NT!"),
szAppName, MB_ICONERROR) ;
return 0 ;
}

hwnd = CreateWindow (szAppName, TEXT ("Analog Clock"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT,
CW_USEDEFAULT, CW_USEDEFAULT,
NULL, NULL, hInstance, NULL) ;

ShowWindow (hwnd, iCmdShow) ;
UpdateWindow (hwnd) ;

while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg) ;
DispatchMessage (&msg) ;
}
return msg.wParam ;
}

void SetIsotropic (HDC hdc, int cxClient, int cyClient)
{
SetMapMode (hdc, MM_ISOTROPIC) ;
SetWindowExtEx (hdc, 1000, 1000, NULL) ;
SetViewportExtEx (hdc, cxClient / 2, -cyClient / 2, NULL) ;
SetViewportOrgEx (hdc, cxClient / 2, cyClient / 2, NULL) ;
}

void RotatePoint (POINT pt[], int iNum, int iAngle)
{
int i ;
POINT ptTemp ;

for (i = 0 ; i < iNum ; i++)
{
ptTemp.x = (int) (pt[i].x * cos (TWOPI * iAngle / 360) +
pt[i].y * sin (TWOPI * iAngle / 360)) ;

ptTemp.y = (int) (pt[i].y * cos (TWOPI * iAngle / 360) -
pt[i].x * sin (TWOPI * iAngle / 360)) ;

pt[i] = ptTemp ;
}
}

void DrawClock (HDC hdc)
{
int iAngle ;
POINT pt[3] ;

for (iAngle = 0 ; iAngle < 360 ; iAngle += 6)
{
pt[0].x = 0 ;
pt[0].y = 900 ;

RotatePoint (pt, 1, iAngle) ;

pt[2].x = pt[2].y = iAngle % 5 ? 33 : 100 ;

pt[0].x -= pt[2].x / 2 ;
pt[0].y -= pt[2].y / 2 ;

pt[1].x = pt[0].x + pt[2].x ;
pt[1].y = pt[0].y + pt[2].y ;

SelectObject (hdc, GetStockObject (BLACK_BRUSH)) ;

Ellipse (hdc, pt[0].x, pt[0].y, pt[1].x, pt[1].y) ;
}
}

void DrawHands (HDC hdc, SYSTEMTIME * pst, BOOL fChange)
{
static POINT pt[3][5] = { 0, -150, 100, 0, 0, 600, -100, 0, 0, -150,
0, -200, 50, 0, 0, 800, -50, 0, 0, -200,
0, 0, 0, 0, 0, 0, 0, 0, 0, 800 } ;
int i, iAngle[3] ;
POINT ptTemp[3][5] ;

iAngle[0] = (pst->wHour * 30) % 360 + pst->wMinute / 2 ;
iAngle[1] = pst->wMinute * 6 ;
iAngle[2] = pst->wSecond * 6 ;

memcpy (ptTemp, pt, sizeof (pt)) ;

for (i = fChange ? 0 : 2 ; i < 3 ; i++)
{
RotatePoint (ptTemp[i], 5, iAngle[i]) ;

Polyline (hdc, ptTemp[i], 5) ;
}
}

LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static int cxClient, cyClient ;
static SYSTEMTIME stPrevious ;
BOOL fChange ;
HDC hdc ;
PAINTSTRUCT ps ;
SYSTEMTIME st ;

switch (message)
{
case WM_CREATE :
SetTimer (hwnd, ID_TIMER, 1000, NULL) ;
GetLocalTime (&st) ;
stPrevious = st ;
return 0 ;

case WM_SIZE :
cxClient = LOWORD (lParam) ;
cyClient = HIWORD (lParam) ;
return 0 ;

case WM_TIMER :
GetLocalTime (&st) ;

fChange = st.wHour != stPrevious.wHour ||
st.wMinute != stPrevious.wMinute ;

hdc = GetDC (hwnd) ;

SetIsotropic (hdc, cxClient, cyClient) ;

SelectObject (hdc, GetStockObject (WHITE_PEN)) ;
DrawHands (hdc, &stPrevious, fChange) ;

SelectObject (hdc, GetStockObject (BLACK_PEN)) ;
DrawHands (hdc, &st, TRUE) ;

ReleaseDC (hwnd, hdc) ;

stPrevious = st ;
return 0 ;

case WM_PAINT :
hdc = BeginPaint (hwnd, &ps) ;

SetIsotropic (hdc, cxClient, cyClient) ;
DrawClock (hdc) ;
DrawHands (hdc, &stPrevious, TRUE) ;

EndPaint (hwnd, &ps) ;
return 0 ;

case WM_DESTROY :
KillTimer (hwnd, ID_TIMER) ;
PostQuitMessage (0) ;
return 0 ;
}
return DefWindowProc (hwnd, message, wParam, lParam) ;
}

#include是什么意思?
提示:

#include是什么意思?

在C系统的编程语言中,#include是为了声明在这个地方插入别的文件中的代码。 以#开头,包含某个头文件,如#include ,就是相当于引用stdio.h这个文件,然后这个文件里面所定义的一些函数就可以直接使用了. 扩展资料: #include 和 #include” ” 的区别 一、#include #include 引用的是编译器的类库路径里面的头文件。 假如你编译器定义的自带头文件引用在 C:\Keil\c51\INC\ 下面,则 #include 引用的就是 C:\Keil\c51\INC\stdio.h 这个头文件,不管你的项目在什么目录里, C:\Keil\c51\INC\stdio.h 这个路径就定下来了。 一般是引用自带的一些头文件,如: stdio.h、conio.h、string.h、stdlib.h 等等。 二、#include" " #include" " 引用的是你程序目录的相对路径中的头文件。 假如你的项目目录是在 D:\Projects\tmp\ ,则 #include"my.h" 引用的就是D:\Projects\tmp\my.h 这个头文件,一般是用来引用自己写的一些头文件。 如果使用 #include" " ,它是会先在你项目的当前目录查找是否有对应头文件,如果没有,它还是会在对应的引用目录里面查找对应的头文件。 例如,使用 #include "stdio.h" 如果在你项目目录里面,没有 stdio.h 这个头文件,它还是会定位到 C:\Keil\c51\INC\stdio.h 这个头文件的。 参考资料来源:百度百科-include

include和#include有什么区别?
提示:

include和#include有什么区别?

C语言中两种方式使用#include命令, #include 与#include ””的区别是使用方式不同。 一种是在包含指令#include后面””将头文件名括起来。这种方式用于标准或系统提供的头文件,到保存系统标准头文件的位置查找头文件。 另一种是在包含指令#include后用双引号””将头文件包括起来。这种方式常用与程序员自己的头文件。用这种格式时,C编译器先查找当前目录是否有指定名称的头文件,然后在从标准头文件目录中查找。 扩展资料: include()语句包含并运行指定文件。 以下文档也适用于require()。这两种结构除了在如何处理失败之外完全一样。include()产生一个警告而require()则导致一个致命错误。换句话说,如果想在遇到丢失文件时停止处理页面就用require()。include()就不是这样,脚本会继续运行。 同时也要确认设置了合适的 include_path。注意在 php 4.3.5 之前,包含文件中的语法错误不会导致程序停止,但从此版本之后会。 寻找包含文件的顺序先是在当前工作目录的相对的 include_path 下寻找,然后是当前运行脚本所在目录相对的 include_path 下寻找。 参考资料来源:百度百科-include (计算机专业术语)

C语言中%c,%s分别代表什么意思?
提示:

C语言中%c,%s分别代表什么意思?

%c在C语言中代表字符型格式符。 %s在C语言中代表字符串型格式符。 %c和%s一般用在printf、sprintf等字符串格式化函数中,用于决定格式化参数的数据类型。如printf("%s", a)会将变量a作为字符串类型进行格式化。 printf()函数是格式化输出函数, 一般用于向标准输出设备按规定格式输出信息。 printf()函数的调用格式为: printf("", )。 格式输出,它是c语言中产生格式化输出的函数(在 stdio.h 中定义)。用于向终端(显示器、控制台等)输出字符。格式控制由要输出的文字和数据格式说明组成。要输出的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。 扩展资料: C语言中所有格式化类型的定义: 1、%d/i 接受整数值并将它表示为有符号的十进制整数,i是老式写法 2、%o 无符号8进制整数(不输出前缀0) 3、%u 无符号10进制整数 4、%x/X 无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF(不输出前缀0x) 5、%f(lf) 单精度浮点数和双精度浮点数用f(lf在C99开始加入标准,意思和f相同) 6、%e/E 科学计数法表示的数,此处"e"的大小写代表在输出时用的“e”的大小写 7、%g/G 有效位数,如:%.8g表示单精度浮点数保留8位有效数字。 8、%c 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符 9、%s/S 字符串。输出字符串中的字符直至字符串中的空字符(字符串以'\0‘结尾,这个'\0'即空字符) 10、%p 以16进制形式输出指针 11、%n 到此字符之前为止,一共输出的字符个数,不输出文本 12、%% 不进行转换,输出字符‘%’(百分号)本身 13、%m 打印errno值对应的出错内容,(例:printf("%m\n");) 参考资料来源:百度百科-printf