日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux将时钟放在桌面上的,Linux 下的桌面指针时钟

發布時間:2024/1/1 linux 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux将时钟放在桌面上的,Linux 下的桌面指针时钟 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux 下的桌面指針時鐘

一.開發背景

隨著科學技術的日益增加,軟件行業在有了新的突破。特別是在移動設備上更有著遠大的開發空間,目前,移動設備上,包括手機,筆記本,平板,發展的特別快,界面也越來越友好,給用戶更新的體現。

基于Linux系統的界面的很單調的問題上了,我做了一個簡單的桌面指針時鐘,就像是windows上的那樣,雖然不美觀,但是還有點實際應用,開放源碼僅供參考!

二.功能簡介

與普通的C語言程序一樣,本時鐘在終端里運行后(也可以雙擊可執行文件),會出現一個界面,會從系統中得到時間,并將相應的時間所對應的角度傳給相應的指針,并顯示到相應的位置上。

時間是系統時間,而且是運行的時候獲取,所以時鐘的轉動都是參考系統時間的。

滴答滴,滴答滴,時鐘不停的轉動,滴答滴,滴答滴小雨拍打著水花.......就像這首歌一樣,時鐘不停的轉動!

三.開發工具

C語言 + SDL圖像界面開發包(包括SDL的擴展庫SDL_image SDL_gfx)。

四.開發環境

Red Hat Linux ,由于C語言的移植性很好,SDL也可以跨平臺移植所以本源代碼可以在幾乎所有的系統上運行!本人已經在arm up6410 開發板上測試成功!但是有點卡(本人能力有限)!

五.界面顯示

源程序在Linux系統的截圖,本人能力有限,界面只能做成這樣了,有能力的可以修改一下!

六.主任寄語

本人只是個菜鳥,甚至連菜鳥都稱不上。就喜歡寫一些這樣類似的東西。希望大家運行測試一下,下面有代碼,你們可以對源碼進行更改,本人沒有任何意見,如果你們有什么意見和建議的話 可以發郵件給我!大家相互交流相互學習!

七.源代碼

#include

#include "SDL/SDL_rotozoom.h"

#include "SDL/SDL_image.h"

#include "math.h"

#include "string.h"

#include

#include"SDL/SDL_gfxPrimitives.h"

/*

初始化SDL 函數庫

SDL——INITEVERTHING 代表所有的 視頻音頻 圖片 ...

*/

SDL_Surface * screen = NULL;

SDL_Rect rect;

void Init()

{

if(SDL_Init(SDL_INIT_EVERYTHING)==-1)

{

printf("SDL_INIT fault !\n");

exit(0);

}

}

// 創建屏幕 640*480 0? SDL_SWSURFACE

void Create_Screen(int width , int height ,int bpp , Uint32 flags)

{

//SDL_Surface*screen = NULL;

screen= SDL_SetVideoMode(width , height,? bpp ,flags);

if(screen== NULL)

{

printf("SDL_SetVideoMode default!\n");

exit(1);

}

}

// 加載圖片傳遞文件的 絕對路徑

SDL_Surface * Image_Load(char *filename)

{

SDL_Surface*image = NULL;

image= IMG_Load(filename);

if(image== NULL)

{

printf("The image load default,maybe can't find %s?!!!\n",filename);

exit(0);

}

returnimage;

}

void Free_Image(SDL_Surface * image)

{

SDL_FreeSurface(image);

}

//用來顯示 image 圖片,rect 可以調節位置

int Show_Image(SDL_Surface * image,SDL_Rect*rect)

{

SDL_BlitSurface(image, NULL , screen , rect);

SDL_UpdateRect(screen, 0 , 0 , 0 , 0 );

return 0;

}

//找到圖片的中點坐標

SDL_Rect Set_Image(SDL_Surface *image,double zoom)

{

//doublex,y ;

SDL_Rectrect;

rect.x=? (screen->w - image->w ) / 2;

rect.y=? (screen->h - image->h ) / 2;

returnrect;

}

//改變秒針所對應的角度,一秒鐘走六度

SDL_Surface *Change_Angle_Sec(SDL_Surface*image ,double *angle)

{

SDL_Surface*change = NULL ;

SDL_Rectrect;

if(*angle <= -360)

{

*angle += 360;

}

*angle = *angle -6.0;

change = rotozoomSurfaceXY(image, *angle,1, 1, 1);

rect = Set_Image(change , 1);

Show_Image(change,&rect);

Free_Image(change);

returnchange;

}

SDL_Surface *Change_Angle_Min(SDL_Surface*image ,double *angle,double sec)

{

SDL_Surface*change = NULL ;

SDL_Rectrect;

//秒針周一圈 分周走 六度

if((sec== 0) || (sec == -360))

{

if(*angle <= -360)

{

*angle += 360;

}

*angle= *angle -6;

}

change = rotozoomSurfaceXY(image, *angle,1, 1, 1);

rect = Set_Image(change , 1);

Show_Image(change,&rect);

Free_Image(change);

returnchange;

}

SDL_Surface *Change_Angle_Hour(SDL_Surface*image ,double *angle,double min)

{

SDL_Surface*change = NULL ;

SDL_Rectrect;

//分針周一圈 走 六度

if(min== 360 || min ==60 || min == 120 || min ==180 || min ==240 || min == 300)

{

if(*angle < -360)

{

* angle += 360;

}

*angle= *angle -5;

}

change = rotozoomSurfaceXY(image, *angle,1, 1, 1);

rect = Set_Image(change , 1);

Show_Image(change,&rect);

Free_Image(change);

returnchange;

}

void Get_System_Time(double *hour,double*min,double *sec)

{

structtm *now;

time_tTime = time(NULL);

now= localtime( &Time );

//獲取當前的系統時間,然后根據當前時間設置圖片的角度!

*hour= (double)now->tm_hour;

*min= (double)now->tm_min;

*sec= (double)now->tm_sec;

printf("TheSystem Time Now : %d : %d : %d \n",(int)*hour,(int)*min,(int)*sec);

*sec= *sec *-6;

*min= *min *-6;

*hour= *hour *-30 + *min/12;

}

int main(int argc , char **argv)

{

intflag = 1;

Init();

SDL_Rectrect ;

rect.x= 80;

rect.y=0;

doublesec = 0,min = 0, hour = 0, zoom_xy = 1;

SDL_Surface*change = NULL,*image = NULL,*image_2 = NULL,*image_3 = NULL,* background =NULL;

Create_Screen(640,480,0,SDL_SWSURFACE);

boxColor(screen,0,0,640,480,0xffffffff);

Show_Image(screen,0);

image= Image_Load("./image/sec.png");

image_2= Image_Load("./image/min.png");

image_3= Image_Load("./image/hour.png");

background=Image_Load("./image/background.jpg");

Show_Image(background, &rect);

Get_System_Time(& hour,& min,& sec);//初始化時間讓各個指針各就各位

while(flag)

{

Change_Angle_Hour(image_3,&hour,min);//分別加載 hour min sec 圖片 顯示到屏幕上

Change_Angle_Min(image_2,&min,sec);

Change_Angle_Sec(image,&sec);

SDL_UpdateRect(screen, 0 , 0 , 0 ,0 );

//測試代碼用來顯示system time !

//printf("The Time Now : %lf : %lf :%lf \n",hour/-30 - min/-6,min/-6,sec/-6);

//延時一秒秒針走動 ! 這是函數很精確

SDL_Delay(1000);

//刷新整個圖片

Show_Image(background , &rect);

SDL_Event event;

while(SDL_PollEvent(&event))??? ?????? ?????? //將事件加入事件隊列隊列

{

switch(event.type)

{

case SDL_KEYDOWN:

if(event.key.keysym.sym== SDLK_ESCAPE)

{

flag = 0;

}break;

case SDL_QUIT:

{

flag = 0;

printf("\n\nquit!\n\n*************************\n");

}break;

}

}

}

}

Write by:douyuan888? 2012/12/31

總結

以上是生活随笔為你收集整理的linux将时钟放在桌面上的,Linux 下的桌面指针时钟的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。