以下gtk+编程例子是来自书籍《实用技术:开发Linux应用——用GTK+和GDK开发Linux图形用户界面应用》第98页的内容——滚动窗口
无论搜索网上还是查看gtk3-demo的例子,很少单独使用scrollbar了,都是使用滚动窗口scrolled_window,自身带有水平滚动条和上下滚动条,触动鼠标滚轮也带动页面,静止很久时会自动隐藏滚动条的
在openSUSE-Leap-15.3-DVD-x86_64的gnome3.34.7桌面环境下编译的,其中pkg-config --cflags --libs gtk±3.0两边有反引号括起来的
ruhong@localhost:~/gtk> gcc page982.c -o page982 pkg-config --cflags --libs gtk±3.0
ruhong@localhost:~/gtk> ./page982
/* the example on page 982 */
#include <gtk/gtk.h>
/* 准备材料,自定义函数 */
/* comments注释 */
/* 程序主体 */
int main( int argc, char *argv[] )
{
GtkWidget *window;
/* 声明变量window为构件gtkwidget */
GtkWidget *scrolled_window;
GtkWidget *image;
gtk_init (&argc, &argv);
/* 初始化gtk */
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
/* 创建顶级窗口 */
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
/* 设置窗口位置为显示器的中间 */
gtk_window_set_default_size (GTK_WINDOW (window), 1200, 900);
/* 设置窗口的大小,横为1200像素,竖为900像素 */
gtk_window_set_title (GTK_WINDOW (window), "滚动窗口scrolled_window");
/* 为窗口顶部加上标题为滚动窗口scrolled_window */
g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (gtk_main_quit), NULL);
/* 为窗口加上动作,当收到destroy信号,就启动gtk_main_quit事件,gtk_main_quit就是鼠标单击窗口右上角的关闭按钮就终止程序 */
gtk_container_set_border_width (GTK_CONTAINER (window), 0);
/* 简单的理解是将窗口变成容器,可以装入其它构件,构件边缘与窗口边缘的距离为0像数 */
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
/* 创建滚动窗口,自动包含水平滚动条和上下滚动条,第一个水平滚动条的调整值为NULL,第二个上下滚动条的调整值为NULL */
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
/* 设置水平滚动条和上下滚动条都为自动出现,就是当缩水窗口就会出现滚动条了 */
gtk_container_add (GTK_CONTAINER (window), scrolled_window);
/* 把滚动窗口装入主窗口 */
image = gtk_image_new_from_file("./982.jpeg");
/* 从网上随便下载一张大尺寸2376x1584的图片并改名为982.jpeg,page982.c与982.jpeg要在同一个文件夹,./表示在当前文件夹 */
gtk_container_add (GTK_CONTAINER (scrolled_window), image);
/* 把图片装入滚动窗口 */
gtk_widget_show_all (window);
/* 显示构件窗口包括所有构件 */
gtk_main ();
/* 进入主循环,等待信号(鼠标键盘)输入 */
return 0;
}
效果图如下