网上找到一个gtk的时钟可能编译运行。

软件和网站开发以及相关技术探讨
回复
清 凉散 人
帖子: 89
注册时间: 2008-11-18 8:50

网上找到一个gtk的时钟可能编译运行。

#1

帖子 清 凉散 人 » 2009-06-13 22:49

#include <gtk/gtk.h>

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#define PI 3.1415926



GtkWidget *window;

GtkWidget *da;

gint i,j;

gint ex,ey;



static void destroy(GtkWidget *widget,gpointer data)

{

gtk_main_quit();

}



gboolean chPosition() //

{

gint tempx=ex;

gint tempy=ey;

gdk_window_invalidate_rect(da->window, NULL, FALSE);

return TRUE;

}



gboolean my_expose(GtkWidget *da,GdkEventExpose *event,gpointer data )

{

GdkGC *gc1,*gc2,*gc;

GdkColor color;

gint i,x,y,x1,y1,x2,y2;

gdouble alpha,alpha2;

struct tm *now_tm;

time_t now;

gint second,minute,hour;



gc1 = gdk_gc_new(da->window);

color.red = 0;

color.green = 0;

color.blue = 0;

gdk_gc_set_rgb_fg_color(gc1,&color);



gc2 = gdk_gc_new(da->window);

color.red = 65535;

color.green = 0;

color.blue = 0;

gdk_gc_set_rgb_fg_color(gc2,&color);



time (&now);

now_tm = localtime(&now);

second = now_tm->tm_sec;

minute = now_tm->tm_min;

hour = now_tm->tm_hour;



gc = gc2;

gdk_draw_arc(da->window,gc,FALSE,50,50,500,500,0,64*360);



alpha2=(30*(-hour+12)- minute*6*5/60 )*PI/180;

x2=300+cos(alpha2+PI/2)*250*0.65;

y2=300-sin(alpha2+PI/2)*250*0.65;



gc = gc1; //時

gdk_draw_line(da->window,gc,x2,y2,300,300);



alpha2=(6*(-minute+60)-second*6/60)*PI/180 ;

x2=300+cos(alpha2+PI/2)*250*0.75;

y2=300-sin(alpha2+PI/2)*250*0.75;



gc = gc1; //分

gdk_draw_line(da->window,gc,x2,y2,300,300);



alpha2=(6*(-second+60)*PI/180);

x2=300+cos(alpha2+PI/2)*250*0.85;

y2=300-sin(alpha2+PI/2)*250*0.85;



gc = gc2; //秒

gdk_draw_line(da->window,gc,x2,y2,300,300);



gc = gc1;

for(i=12;i>=1;i--)

{

alpha=(30*(11-i)*PI/180);

x=300+cos(alpha)*250;

y=300-sin(alpha)*250;

x1=300+cos(alpha)*250*0.9;

y1=300-sin(alpha)*250*0.9;

gdk_draw_line(da->window,gc,x,y,x1,y1);

gdk_draw_string(da->window,gtk_style_get_font(gtk_widget_get_style(window)),gc,295,90,"12");

gdk_draw_string(da->window,gtk_style_get_font(gtk_widget_get_style(window)),gc,295,520,"6");

gdk_draw_string(da->window,gtk_style_get_font(gtk_widget_get_style(window)),gc,80,305,"9");

gdk_draw_string(da->window,gtk_style_get_font(gtk_widget_get_style(window)),gc,520,305,"3");

gdk_draw_string(da->window,gtk_style_get_font(gtk_widget_get_style(window)),gc,220,580,"Nigel Yan---2009-05-27---BXC");

}



for(i=60;i>=1;i--)

{

alpha=(6*(60-i)*PI/180);

x=300+cos(alpha)*250;

y=300-sin(alpha)*250;

x1=300+cos(alpha)*250*0.95;

y1=300-sin(alpha)*250*0.95;

if (i%5==0)

{

//do nothing

}

else

{

gdk_draw_line(da->window,gc,x,y,x1,y1);

}

}



g_object_unref(G_OBJECT(gc1));

g_object_unref(G_OBJECT(gc2));



return TRUE;

}



void leave_notify_event(GtkWidget *widget, GdkEventMotion *event)

{

gint x, y;

GdkModifierType state;

GdkRectangle rect;

if (event->is_hint)

gdk_window_get_pointer(event->window,&x,&y,&state);

else{

x = (gint)event->x;

y = (gint)event->y;

state = event->state;

}

gdk_window_invalidate_rect(da->window,&rect,FALSE);



}



int main(int argc, char *argv[])

{



gtk_init(&argc,&argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);



gtk_window_set_title(GTK_WINDOW(window),"Clock"); //這個隻是給個名字。

gtk_window_set_resizable (GTK_WINDOW (window), FALSE); //讓放大窗口無效。



gtk_widget_add_events( GTK_WIDGET(window), GDK_KEY_PRESS_MASK |GDK_KEY_RELEASE_MASK|GDK_BUTTON_PRESS_MASK);

g_signal_connect(G_OBJECT(window),"destroy",G_CALLBACK(destroy),NULL);

gtk_signal_connect(GTK_OBJECT(window),"leave_notify_event", GTK_SIGNAL_FUNC(leave_notify_event),NULL);



da = gtk_drawing_area_new();



gtk_widget_set_size_request(da,600,600);

gtk_container_add(GTK_CONTAINER(window),da);

g_signal_connect(da,"expose_event",G_CALLBACK(my_expose),NULL);



gtk_widget_show_all(window);

g_timeout_add(10,(GSourceFunc)chPosition,NULL);

gtk_main();

return 0;

}
头像
md5xwl
帖子: 133
注册时间: 2008-10-29 22:16
联系:

Re: 网上找到一个gtk的时钟可能编译运行。

#2

帖子 md5xwl » 2009-06-15 7:18

太粗糙了

代码: 全选

苏老泉,二十七,始发愤,读书籍。彼既老,犹悔迟。尔小生,宜早思!!
头像
CGer
帖子: 210
注册时间: 2009-06-21 19:38
来自: CUMT

Re: 网上找到一个gtk的时钟可能编译运行。

#3

帖子 CGer » 2009-06-25 13:33

哈哈,很强大!~看不懂啊~ :em06

代码: 全选

sudo apt-get install girlfriend
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
有一些软件包无法被安装。
下列的信息可能会对解决问题有所帮助:
下列的软件包有不能满足的依赖关系:
girlfriend: 依赖: house但是它将不会被安装
girlfriend: 依赖: car但是它将不会被安装
house,car: 依赖: money但是它将不会被安装
E: 无法安装的软件包
[/b]
回复