小弟最近在学GTK编程,具体来说就是编写一个Linux下面的任务管理器,不过,刚开始就遇到了一个问题,特地把代码发在下面,和大家来分享,同时,如果有哪位大牛知道的话,麻烦留言告诉我,不胜感激!
原始代码是:
但是,通过阅读别人的代码,我找到了下面这个代码,它是可以正确的显示大小,而且,可以使得视窗不再变化。
代码:
原始代码是:
#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), " GtkButton " );
gtk_window_set_default_size(GTK_WINDOW(window), 230 , 150 );
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
g_signal_connect(G_OBJECT(window), " destroy " , // 另外一个信号就是destroy,就是点击X的时候触发的函数(gtk_main_quit)
G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show(window);
gtk_main();
return 0 ;
}
在上面的代码中,我设置了默认的大小后,在利用resizable来使得窗口的大小不可以改变,具体来说就是,使得没有最大化的窗口,照理说,应该是没有任何问题的,可是实际运行的结果却是:显示的是一个很小的点点(但是也可以看见,就是一个短竖线),不知道是为何原因,我尝试过将resizable那个函数注释掉,就可以正常的显示了。
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), " GtkButton " );
gtk_window_set_default_size(GTK_WINDOW(window), 230 , 150 );
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_resizable (GTK_WINDOW (window), FALSE);
g_signal_connect(G_OBJECT(window), " destroy " , // 另外一个信号就是destroy,就是点击X的时候触发的函数(gtk_main_quit)
G_CALLBACK(gtk_main_quit), NULL);
gtk_widget_show(window);
gtk_main();
return 0 ;
}
但是,通过阅读别人的代码,我找到了下面这个代码,它是可以正确的显示大小,而且,可以使得视窗不再变化。
代码:
#include
<
gtk
/
gtk.h
>
GtkWidget * window;
int main( int argc , char ** argv)
{
gtk_init( & argc, & argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), " Linux System Moniter " ); // 标题
// gtk_window_set_default_size (GTK_WINDOW (window), 400, 300); // 默认窗口尺寸大小,有它的话设置不可变大小就有问题
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_resizable (GTK_WINDOW (window), FALSE); // 窗口不可改变
gtk_widget_set_usize(GTK_WIDGET (window), 400 , 415 );
g_signal_connect(G_OBJECT(window), " destroy " , G_CALLBACK(gtk_main_quit), NULL); // 将窗口关闭信息与destroy_window关联
gtk_widget_show_all (window); // 显示所有的窗口和界面
gtk_main();
return 0 ;
}
对于上面的这个代码,就没有上面的那个问题,可以正确的显示,通过查询GTK文档,也知道了函数
gtk_widget_set_usize的作用就是设定大小,没有什么区别,那么,这两个代码的效果为何不同呢?
GtkWidget * window;
int main( int argc , char ** argv)
{
gtk_init( & argc, & argv);
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_title (GTK_WINDOW (window), " Linux System Moniter " ); // 标题
// gtk_window_set_default_size (GTK_WINDOW (window), 400, 300); // 默认窗口尺寸大小,有它的话设置不可变大小就有问题
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_resizable (GTK_WINDOW (window), FALSE); // 窗口不可改变
gtk_widget_set_usize(GTK_WIDGET (window), 400 , 415 );
g_signal_connect(G_OBJECT(window), " destroy " , G_CALLBACK(gtk_main_quit), NULL); // 将窗口关闭信息与destroy_window关联
gtk_widget_show_all (window); // 显示所有的窗口和界面
gtk_main();
return 0 ;
}