[LinuxFocus-icon]
<--  | ��ҳ  | վ���ͼ  | ����  | ����

���� | �����ڿ� | ���� | ����LF
This document is available in: English  Castellano  ChineseGB  Deutsch  Francais  Italiano  Nederlands  Russian  Turkce  Polish  

Ozcan Gungor
by Özcan Güngör
<ozcangungor(at)netscape.net>

��������:
�Ҵ�1997�꿪ʼʹ��Linux.������,�����ҿ���Դ��,��Щ��������ϲ����.
Ŀ¼:

 

��GTK��дGUI����

GTK

ÕªÒª:

���������ϵ����,���ǽ�Ҫѧϰ����ʹ��GTK��дͼ���û�����.���Լ�Ҳ��֪������д�೤.Ϊ��������Щ����,�����Ҫ������µ�C����֪ʶ

  • ����(Variables)
  • ����(Functions)
  • ָ��(Pointers)


_________________ _________________ _________________

 

ʲô��GTK?

GTK(GIMP Toolkit,GIMP���߰�)������ͼ���û����濪����ͼ�ο�.������GPL��GNU��������Э�飩�������ʹ��GTK������Դ��,��ѵ�,��������ҵ�ij���.

֮���Գ���ΪGIMP���߰�(GTK)������ΪGTK����ʱ�����Ŀ����Ϊ�˿���GIMP����(ͨ��ͼ��������).GTK��������:

GTK���������(object-oriented)�ij����û��ӿ�.��Ȼ����C����д�ɵ�,������ʹ������(classes)�ͻص�����(callback function)��˼��.

 

����

����GTK�����ʱ��,����Ҫ����gcc��ʹ��ʲô����GTK������ľ���λ��,��gtk-config ����"֪��"��Щ���

# gtk-config --cflags --libs

�������������������������������(���������ϵͳ) :

-I/opt/gnome/include/gtk-1.2 -I/opt/gnome/include/glib-1.2 -I/opt/gnome/lib/glib /include -I/usr/X11R6/include -L/opt/gnome/lib -L/usr/X11R6/lib -lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -l Xext -lX11 -lm

��������:

-l library: ��Ԥ����·�����ҿ���Ϊliblibrary.a�Ŀ�.
-L path: ����·���������·����.
-I path: ����·����ͷ�ļ��IJ���·����

Ҫ����һ����Ϊhello.c�ij���,����ʹ�����µ�����:

gcc -o hello hello.c `gtk-config --cflags --libs`

����-o����������DZ���Ľ���ļ�������.

 

��һ������

���Ǽ������Ѿ������ϵͳ�ﰲװ��GTK.���Դ�ftp.gtk.org�ĵ�GTK�����°汾.

������д�µ�һ������,������򴴽�һ��200x200���ش�Ŀմ���.

#include <gtk/gtk.h>

int main( int   argc,
          char *argv[] )
{
    GtkWidget *window;

    gtk_init (&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_widget_show  (window);

    gtk_main ();

    return(0);
}

GtkWidget�����������񴰿�(window),��ť(button),��ǩ(label)�ȵ������һ����������, �����������,��������������һ������.:

GtkWidget *window;

void gtk_init(int *argc,char ***argv) ��ʼ�����߰����һ�ȡ�����в���.��������������������֮��ʹ��

GtkWidget *gtk_window_new(GtkWindowType windowtype) ����һ���µĴ���,�������ͣ�windowtype)������:

void gtk_widget_show(GtkWidget *widget) ������ʾ�����е����.�ڴ�����һ�������ı���������Ե������,����������ͱ���Ҫ�õ�.

void gtk_main(void) ׼�������ں����е������ʾ����Ļ��,�������������GTK�����������.

��������ʹ��һЩ���ڵ�����,�������(titles),�ߴ�(size),λ��(position)...

void gtk_window_set_title(GtkWindow *window,const gchar *title) �����趨����Ĵ���window�ı���. ��������ĵ�һ������Ҫ����GTKWindow���͵�,������ window �� GtkWidget ����,�����ڱ���ʱ�����ǻ���˵õ�һ������.��Ȼ���Ľ���ļ���Ȼ�ǿ������е�,����û����Լ���������.���Ҫʹ��GTK_WINDOW(GtkWidget *widget)����һ������. �ڶ������� title��gchar��.gchar��glib���ж��壬����char��һ����.

void gtk_window_set_default_size(GtkWindow *window, gint width, gint height) �趨window�ijߴ�.��gcharһ��,gint����glib���ж���ĺ�intһ�������� .

����

void gtk_window_set_position(GtkWindow *window, GtkWindowPosition position)

�趨window��λ��.position ������:

�����Ǹ�����:

#include <gtk/gtk.h>

int main( int   argc,
          char *argv[] )
{
    GtkWidget *window;

    gtk_init (&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window),"Ýlk Program");
    gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER);
    gtk_window_set_default_size(GTK_WINDOW(window),300,300);
    gtk_widget_show  (window);

    gtk_main ();

    return(0);
}
 

�źź��¼�(Signals and Events)

��ͼ���û������У�����Ҫ�õ����ͼ��̡�����˵������԰���һ����ť��Ϊ�ˣ��ǣԣ��ṩ�����µĺ���:

guint gtk_signal_connect_object(GtkObject *object,const gchar *name,GtkSignalFu nc func,GtkObject *slot_object);

object �Ƿ����źŵ����������˵�������֪��һ����ť�Ƿ��ѱ����£���ô object��Ϊ�Ǹ���ť����name ���¼������ƣ��������ǣ�

func ���¼�����ʱ��Ҫ�����õĺ���:������һ�����ӣ�

#include <gtk/gtk.h>

void close( GtkWidget *widget,gpointer *data)
{
    gtk_main_quit();
}

int main( int   argc,char *argv[] )
{
    GtkWidget *window;

    gtk_init (&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_signal_connect (GTK_OBJECT (window), "destroy",
                        GTK_SIGNAL_FUNC (close), NULL);
    gtk_widget_show  (window);

    gtk_main ();

    return(0);
}

����

gtk_signal_connect (GTK_OBJECT (window), "destroy",GTK_SIGNAL_FUNC (close), NULL)

��������window��destroy�¼��������ڹر�ʱ�� close �ͻᱻ����.�� close �����ֵ��� gtk_main_quit() ������������.

�����¼����źŵ�ϸ�ڽ����Ժ���ܣ�����

 

��ͨ��ť��A ordinary button��

��ͨ��ťһ�������ڽ�������ʱ�ó������ض������飮��GTK���У����������ַ�ʽ����һ����ť:

  1. GtkWidget* gtk_button_new (void);
  2. GtkWidget* gtk_button_new_with_label (const gchar *label);

��һ����������һ��û�б�ǩ�İ�ť�����治��ʾ�κζ��������ڶ�����������һ������ǩ�ĺ��� (�ַ���label����ʾ������).

����������ǽ�ʹ��һ���µĺ���:

void gtk_container_add(GtkContainer *container,GtkWidget *widget)

ʹ������������Դ����ڴ��ڣ�һ��ģ��������κ�����������ʾ�İ�ť��Ҳ�������κ������������.�ڽ������������У�������һ�����ڣ������ӵ������е�����ǰ�ť�����ǽ����Ժ�ѧϰ������һЩ������

������ͨ��ť����Ҫ�������������Ҫ֪�����Ƿ��Ѿ�������.��������һ��ʹ��gtk_signal_connect ������ʵ�����Ŀ��.ʹ��gtk_signal_connect�����Ե�����һ��������ִ�С����ء��ڰ�ť��Ĺ��ܡ� ������һ���򵥵�����:

#include <gtk/gtk.h>

void close( GtkWidget *widget,gpointer *data)
{
    gtk_main_quit();
}

void clicked(GtkWidget *widget,gpointer *data)
{
        g_print("Button Clicked\n");
}
int main( int   argc,char *argv[] )
{
    GtkWidget *window,*button;

    gtk_init (&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_signal_connect (GTK_OBJECT (window), "destroy",
                        GTK_SIGNAL_FUNC (close), NULL);

    button=gtk_button_new_with_label("Button");
    gtk_container_add(GTK_CONTAINER(window),button);
    gtk_signal_connect(GTK_OBJECT(button),"clicked",
                       GTK_SIGNAL_FUNC(clicked),NULL);
    gtk_widget_show(button);

    gtk_widget_show(window);

    gtk_main ();

    return(0);
}

 

����ƪ���·�������

ÿƪ���¶��и��Եķ���ҳ�档�����ҳ����������ύ���ۣ�Ҳ���Բ鿴�������ߵ����ۣ�
 ï¿½ï¿½ï¿½ï¿½Ò³ï¿½ï¿½ 

<--, back to the index of this issue

��ҳ��LinuxFocus�༭��ά��
© Özcan Güngör, FDL
LinuxFocus.org
������Ϣ:
tr --> -- : Özcan Güngör <ozcangungor(at)netscape.net>
tr --> en: Özcan Güngör <ozcangungor(at)netscape.net>
en --> zh: phenix <taiji017(at)163.com>

2004-03-18, generated by lfparser version 2.46