Шаг 15 - Всплывающие подсказки

В общем-то неплохая вещь... В большинстве end-user программ используется... Для примера возьмем программу с пятью автоматически создаваемыми полями ввода. Все изменения я выделил жирным шрифтом:

#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>

void delete_event(GtkObject* object)
{
	gtk_main_quit();
};

int main(int argc, char* argv[])
{
	GtkWidget* window;
	GtkWidget* edit[5];
	GtkWidget* label[5];
	GtkWidget* vbox;
	GtkTooltips* tooltips = NULL;

	char str[] = "Edit x";
	gtk_init(&argc,&argv);

	vbox = gtk_vbox_new(0,0);

	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
 
	//Никогда не забывайте устанвливать этот обработчик
	gtk_signal_connect_object (GTK_OBJECT (window),
		"delete_event",GTK_SIGNAL_FUNC (delete_event), NULL);

	//Вы же не хотите, чтобы элементы прилипали к краям?
	gtk_container_set_border_width (GTK_CONTAINER (window), 10);
	tooltips = gtk_tooltips_new();
	GdkColor fg,bg;
	fg.red = 65536;
	fg.blue = 0;
	fg.green=0;
	bg.blue = 255;
	bg.red =0;
	bg.green = 0;

	//Создаем и упаковываем по пять меток и пять полей ввода...
	for(int i=0;i<5;i++)
	{
		edit[i] = gtk_entry_new();
		sprintf(str,"Edit %d",i);
		gtk_tooltips_set_tip(tooltips,edit[i],str,NULL);
		label[i] = gtk_label_new(str);

		//Загоняем сначала метку, а затем и поле ввода в контейнер
		gtk_box_pack_start(GTK_BOX(vbox), label[i],TRUE,0,5);
		gtk_box_pack_start(GTK_BOX(vbox), edit[i],TRUE,0,5);
		gtk_widget_show(edit[i]);
		gtk_widget_show(label[i]);
	};

	//Чтобы добавить контейнер в окно...
	gtk_container_add(GTK_CONTAINER(window), vbox);
  
	gtk_widget_show(window); 
	gtk_widget_show(GTK_WIDGET(vbox));
  
	gtk_window_set_title(GTK_WINDOW(window),"Step 6");
	gtk_main();
	return 0;
};

Не очень много изменений, правда? Что подтверждает легкость использования этого виджета... Помимо всего прочего, используются следующие функции:

// Разрешить отображение данного набора 
// всплывающих подсказок. По умолчанию.
void gtk_tooltips_enable( GtkTooltips *tooltips );

// Запретить отображение.
void gtk_tooltips_disable( GtkTooltips *tooltips );

// Задержка до появления подсказки (по умолчанию - 500мс)
void gtk_tooltips_set_delay( GtkTooltips *tooltips, gint delay );

// Цвета для подсказки, описанные в структурах GdkColor
void gtk_tooltips_set_colors( GtkTooltips *tooltips,
	GdkColor *background, GdkColor *foreground );

Скриншот давать не буду, поскольку всплывающие подсказки не захватываются снимком экрана.


Предыдущий Шаг | Оглавление
Автор Аванесов Самвел - 22.08.2002