⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 line.c

📁 这个只有90多行的源代码, 示意了在linux平台下, 开发图形程序的原理。由C语言写成
💻 C
字号:
#include <gtk/gtk.h>


GtkWidget *g_window;
GtkWidget *g_vbox;
GtkWidget *g_drawing;
GdkPixmap *g_pixmap;

int xx, yy;


static gint configure_event(GtkWidget *widget, GdkEventConfigure *event,gpointer data)
{
	if (g_pixmap == NULL)
	{
		g_pixmap = gdk_pixmap_new(widget->window,widget->allocation.width,widget->allocation.height,-1);
		gdk_draw_rectangle(g_pixmap,widget->style->white_gc,TRUE,0, 0,widget->allocation.width,widget->allocation.height);
	}
	
	return TRUE;
}

static gint 
button_press_event(GtkWidget *widget, GdkEventButton *event)
{
	if(event->button == 1 && g_pixmap != NULL)
		xx = event->x, yy = event->y;
	
	return TRUE;
}

static gint
button_release_event(GtkWidget *widget, GdkEventButton *event)
{
	if(event->button == 1 && g_pixmap != NULL)
	{
		gdk_draw_line(g_pixmap, g_window->style->black_gc, 
			xx, yy, event->x, event->y);
		GdkRectangle update_rect;
		update_rect.x = MIN(event->x, xx);
		update_rect.y = MIN(event->y, yy);
		update_rect.width = ABS(event->x - xx);
		update_rect.height = ABS(event->y - yy);
		gtk_widget_draw (g_drawing ,&update_rect);
	}
	return TRUE;
}

static gint 
expose_event(GtkWidget *widget, GdkEventExpose *event)
{
	gdk_draw_pixmap(widget->window,widget->style->fg_gc[GTK_WIDGET_STATE (widget)],g_pixmap,
		event->area.x, event->area.y,event->area.x, event->area.y,event->area.width, event->area.height);
	return FALSE;
}

GtkWidget* create_g_window1 (void)
{
	
	g_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
	gtk_object_set_data (GTK_OBJECT (g_window), "g_window", g_window);
	gtk_window_set_title (GTK_WINDOW (g_window),"g_window");
	gtk_container_border_width(GTK_CONTAINER(g_window),2);
	gtk_signal_connect(GTK_OBJECT(g_window),"destroy",GTK_SIGNAL_FUNC(gtk_main_quit),NULL);
	
	g_vbox = gtk_vbox_new (FALSE, 0);
	gtk_widget_show (g_vbox);
	gtk_container_add (GTK_CONTAINER (g_window), g_vbox);	
	
	g_drawing = gtk_drawing_area_new();
	gtk_widget_set_events(g_drawing, GDK_EXPOSURE_MASK|GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK|GDK_BUTTON_MOTION_MASK|GDK_SUBSTRUCTURE_MASK);
	gtk_signal_connect(GTK_OBJECT(g_drawing), "configure_event", GTK_SIGNAL_FUNC(configure_event), NULL);
	gtk_signal_connect(GTK_OBJECT(g_drawing), "button_press_event", GTK_SIGNAL_FUNC(button_press_event), NULL); 
	gtk_signal_connect(GTK_OBJECT(g_drawing), "button_release_event", GTK_SIGNAL_FUNC(button_release_event), NULL); 
	gtk_signal_connect(GTK_OBJECT(g_drawing), "expose_event", GTK_SIGNAL_FUNC(expose_event), NULL); 
	gtk_widget_set_usize(GTK_WIDGET(g_drawing), 300, 200);
	gtk_widget_show(g_drawing);
	gtk_box_pack_start(GTK_BOX(g_vbox),g_drawing,FALSE,TRUE,0);
	
	return g_window;
}

int main (int arg_gc, char *argv[])
{
	gtk_set_locale();
	gtk_init (&arg_gc,&argv);
	GtkWidget *g_window1;
	g_window1 = create_g_window1 ();
	gtk_widget_show (g_window1);
	gtk_main ();
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -