结果很简单:
有GtkScrolledWindow
另一个构造函数,可用于设置GtkAdjustments
滚动窗口应使用的。
//These adjustments will be attached to the scrollbars.
prvt->hAdjustment = GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 0, 0, 0, 0));
prvt->vAdjustment = GTK_ADJUSTMENT(gtk_adjustment_new(0, 0, 0, 0, 0, 0));
GtkWidget* scrolledTree = gtk_scrolled_window_new(prvt->hAdjustment, prvt->vAdjustment);
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolledTree), drawing_area);
现在,每当图纸尺寸发生变化时,您只需修改GTKAdjustments
以模拟变化。无需实际调整绘图区域的大小。
gtk_adjustment_set_lower(prvt->hAdjustment, 0);
gtk_adjustment_set_step_increment(prvt->hAdjustment, 1);
gtk_adjustment_set_page_increment(prvt->hAdjustment, 10);
gtk_adjustment_set_upper(prvt->hAdjustment, picture_width);
gtk_adjustment_set_page_size(prvt->hAdjustment, scrollArea_width);
gtk_adjustment_changed(prvt->hAdjustment);
注意我gtk_adjustment_changed
最后打电话了。这很重要,否则ScrolledWindow
不会更新滚动条。
最后,可以使用value_changed
回调来捕获滚动事件并调整绘图。GtkAdjustmens
编辑:这不能正常工作,因为GtkScrolledWindow
接收滚动事件以及移动图像:(