#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;
}
网上找到一个gtk的时钟可能编译运行。
-
- 帖子: 89
- 注册时间: 2008-11-18 8:50
- md5xwl
- 帖子: 133
- 注册时间: 2008-10-29 22:16
- 联系:
- CGer
- 帖子: 210
- 注册时间: 2009-06-21 19:38
- 来自: CUMT
Re: 网上找到一个gtk的时钟可能编译运行。
哈哈,很强大!~看不懂啊~ 

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