QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1552|回复: 15

版主大大帮帮

[复制链接]
发表于 2004-9-19 17:19:56 | 显示全部楼层 |阅读模式
版主大大,帮帮用glade2里一切正常就是加回调的时候怎么都不行,在callbacks.c里我的五个按纽回调应该怎么写呀,就是让窗口移动的五个按纽,让窗口移动到左上角,左下角,右上角,右下角,居中,sagaeon版主大大提供的E介绍十在看不懂,E文学的太差了.那个函数最好,是用gtk_window_move,还是那个?那个写最简单方便.而且在callbacks.c里格式应该怎么写,我写不来呀,帮帮吧版主大大.
发表于 2004-9-19 20:05:23 | 显示全部楼层
楼主别急,慢慢来。我想你先看看关于callback.c中回调函数的写法,再考虑移动窗口的问题。关于callback写法有很多书介绍,你先看看。
另外,硬着头皮看看E文的吧。我们都是这样过来的,E文并不是世界上最好的文字,可以现在我们不得不学习它。
回复

使用道具 举报

 楼主| 发表于 2004-9-19 23:14:59 | 显示全部楼层

谢谢版主大大指教

关于callback写法有很多书介绍,我没有见到过有这方面的书呀,我连glade的书一本也没见过,买不到版主大大:(
我想你先看看关于callback.c中回调函数的写法,我就是想先知道callback.c中回调函数的写法,然后才想知道如何实现移动窗口的:(,那儿有关于怎样写callback.c中回调函数的写法呀版主大大:(
我本来还想看看用glade编写华容道的那位版主大大的源代码里callback.c里的回调函数是怎样写的,但他的源代码里没有callback.c呜呜呜。
回复

使用道具 举报

发表于 2004-9-19 23:31:43 | 显示全部楼层
要实现回调不一定要用callback.c这个文件名。
你知道gtk中的信号注册机制吗,就是g_signal_connect函数。如果不知道你先看看。
比如[code:1]g_signal_connect ((gpointer) main_window, "destroy",
                    G_CALLBACK (on_main_window_destroy),
                    NULL);
[/code:1]就实现了把main_window这个窗口的destroy信号与on_main_window_destroy连系在一起。这样,你点main_window的X就会调用这个函数。至于这个函数在哪个文件名里不重要。然后你再在这个函数里加你想做的事就可以了,比如退出整个程序 gtk_main_quit()。就可以了。
回复

使用道具 举报

 楼主| 发表于 2004-9-20 01:40:18 | 显示全部楼层

版主大大

版主大大你说的方法我也试过了,但一直不行老出错,我是想让一个按纽来控制窗口的位置居中还是左上角还是右上角,不是用按纽不能来控制窗口位置吧,你能不能给我写一个用点击一个按让窗口可以移到右上角的例子吗,最好是两种方法都写版主帮帮吧.我是初学者,很多功能都能实现就是这个功能一直不行.
回复

使用道具 举报

发表于 2004-9-20 11:34:02 | 显示全部楼层
[code:1]
#include <gtk/gtk.h>
GtkWidget *win;
void on_button_clicked(GtkWidget *widget,gpointer data)
{
        gtk_window_reposition(GTK_WINDOW(win),0,0);
}
main()
{
        GtkWidget *button;
        gtk_init(NULL,NULL);
        win=gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_position (GTK_WINDOW (win), GTK_WIN_POS_CENTER);
        button=gtk_button_new_with_label("Hello World");
        gtk_container_add(GTK_CONTAINER(win),button);
        gtk_widget_show_all(win);
        gtk_widget_set_usize(win,150,100);
        gtk_signal_connect (GTK_OBJECT (button), "clicked",
                        GTK_SIGNAL_FUNC (on_button_clicked),
                        NULL);
        gtk_main();
}

[/code:1]
回复

使用道具 举报

发表于 2004-9-20 11:36:32 | 显示全部楼层
gtk1.2的,如果用gtk2就把gtk_window_reposition改为gtk_window_move
回复

使用道具 举报

发表于 2004-9-20 12:06:19 | 显示全部楼层
[code:1]gcc 文件名 `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0`[/code:1]gtk2的   
回复

使用道具 举报

发表于 2004-9-20 12:29:05 | 显示全部楼层
右上角
[code:1]
//加个 gdk
#include </usr/include/gtk-2.0/gdk/gdkscreen.h>


void on_button_clicked(GtkWidget *widget,gpointer data)
{
        gtk_window_move(GTK_WINDOW(win),gdk_screen_width()-160,0);
}
[/code:1]
回复

使用道具 举报

 楼主| 发表于 2004-9-20 12:40:24 | 显示全部楼层

我好感动

我好感动还有激动,今天一打开帖子看到这么多大大们帮忙,觉的linux真的是个温暖的家,真的非常非常的谢谢你们,和所有公社乐于助人的大大们,我更爱linux这个家了, 更爱各位大大了,我以后也会有能力的话多帮助别人的。再次谢谢你们大大们呜呜呜呜呜~~~~@─@~~~~
1.其实我想以后就用glade2了.因为它的效率非常高,用gtk2.0效率低大大们
2.我想知道lanche那位版主大大说他的华容道是用glade编的,但为什么我在他的源代码里看不到callback.c这些glade里的文件呢?
3.版主大大们,我直接用gtk2.0可以,但如果用glade2加在callback.c里不行,为什么?如果加在glade2的callback.c里应该怎么加才对呢就是改变窗口位置的函数.
回复

使用道具 举报

 楼主| 发表于 2004-9-20 14:05:55 | 显示全部楼层
版主大大我会增加信号,我是说如果在callback.c里再按纽信号里添加改变窗口位置的回调函数,我在gtk2.0里可以,添加到callback.c里就不行了.我想把改变窗口位置的函数添加到buton1里,但一直出错.应该怎样添加呢?
#ifdef HAVE_CONFIG_H
#  include <config.h>
#endif
#include <gtk/gtk.h>
#include <gnome.h>

#include "callbacks.h"
#include "interface.h"
#include "support.h"


gboolean
on_window1_delete_event                (GtkWidget       *widget,
                                        GdkEvent        *event,
                                        gpointer         user_data)
{gtk_main_quit();

  return FALSE;
}



void
on_button1_clicked                     (GtkButton       *button,
                                        gpointer         user_data)
{gtk_window_move(GTK_WINDOW(window1),0,0);


}


void
on_button2_clicked                     (GtkButton       *button,
                                        gpointer         userdata)
{GtkWidget *dialog;
//创建带确认按钮的对话框,父控件为空
        dialog = gtk_message_dialog_new(NULL,
                        GTK_DIALOG_MODAL |GTK_DIALOG_DESTROY_WITH_PARENT,
                        GTK_MESSAGE_INFO,
                        GTK_BUTTONS_OK,
                        (gchar*)"hello sagaeon");
        gtk_dialog_run(GTK_DIALOG(dialog));//显示并运行对话框
        gtk_widget_destroy(dialog);//销毁对话框
}



void
on_button3_clicked                     (GtkButton       *button,
                                        gpointer         user_data)
{gtk_main_quit();

}
回复

使用道具 举报

发表于 2004-9-20 14:13:37 | 显示全部楼层
没懂你的意思
回复

使用道具 举报

 楼主| 发表于 2004-9-20 14:19:59 | 显示全部楼层
版主大大你看看我里面的这一段呀
void
on_button1_clicked (GtkButton *buttot,gpointer user_data)
{
  gtk_window_move(GTK_WINDOW(window1),0,0);

} ,就是这个函数在gtk2.0里没问题,添加到glade2的callback.c里就不行了
回复

使用道具 举报

发表于 2004-9-20 14:23:32 | 显示全部楼层
在on_button1_clicked里加个打印语句,看看on_button1_clicked被调用没有。
回复

使用道具 举报

 楼主| 发表于 2004-9-20 14:30:51 | 显示全部楼层

版主大大

在button1里加了改变窗口的那个函数make就通不行呀,为什么呀版主大大,如果你的话怎样写呀
[root@computer window]# make
make  all-recursive
make[1]: Entering directory `/myfile/system/glade/window'
Making all in src
make[2]: Entering directory `/myfile/system/glade/window/src'
gcc -DHAVE_CONFIG_H -I. -I. -I.. -DPACKAGE_DATA_DIR=\""/usr/local/share"\"     -DPACKAGE_LOCALE_DIR=\""/usr/local/share/locale"\"       -DORBIT2=1 -pthread -I/usr/include/libgnomeui-2.0 -I/usr/include/libgnome-2.0 -I/usr/include/libgnomecanvas-2.0 -I/usr/include/gtk-2.0 -I/usr/include/libart-2.0 -I/usr/include/gconf/2 -I/usr/include/libbonoboui-2.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/orbit-2.0 -I/usr/include/libbonobo-2.0 -I/usr/include/gnome-vfs-2.0 -I/usr/lib/gnome-vfs-2.0/include -I/usr/include/bonobo-activation-2.0 -I/usr/include/pango-1.0 -I/usr/include/freetype2 -I/usr/lib/gtk-2.0/include -I/usr/include/atk-1.0 -I/usr/X11R6/include -I/usr/include/freetype2/freetype2 -I/usr/include/libxml2      -g -O2 -c callbacks.c
callbacks.c: In function `on_button1_clicked':
callbacks.c:25: error: `window1' undeclared (first use in this function)
callbacks.c:25: error: (Each undeclared identifier is reported only once
callbacks.c:25: error: for each function it appears in.)
make[2]: *** [callbacks.o] 错误 1
make[2]: Leaving directory `/myfile/system/glade/window/src'
make[1]: *** [all-recursive] 错误 1
make[1]: Leaving directory `/myfile/system/glade/window'
make: *** [all-recursive-am] 错误 2
[root@computer window]#
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-7 11:25 , Processed in 0.051435 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表