c++ を使用して gtk+ でプログラミングするときに、特別なバインディングを使用する理由はありますか? c++ は C のスーパーセットであるため、コールバック イベントの静的メンバーを持つクラスを使用できず、c スタイルの gtk+ オブジェクトをクラスとしてカプセル化できないのはなぜですか。
class MainWindow{
public:
MainWindow(void);
GtkWidget* window;
GtkWidget* button;
static void signals(GtkWidget *widget, GdkEventButton *event, gpointer callback_data);
static gboolean onDelete(GtkWidget *widget, GdkEvent *event, gpointer data);
static void onDestroy(GtkWidget *widget, gpointer data);
/* GtkWidget* canvas;
GtkWidget* items; */
};
および建設時に行われる信号接続:
MainWindow::MainWindow(){
// Create widgets
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
button = gtk_button_new_with_label("Push the button.");
// Connect widget signals
g_signal_connect(G_OBJECT(button), "button_press_event", G_CALLBACK(signals), NULL);
// Add widgets to main window (pack multiple widgets)
gtk_container_add(GTK_CONTAINER(window), button);
// Show window
gtk_widget_show_all(window);
// Connect Main Window Signals
g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(onDelete), NULL);
g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(onDestroy), NULL);
}
次に、gtk+ 呼び出しを設定した後、Main でクラスを作成します。
int main(int argc, char* argv[])
{
// initialize GTK
gtk_init(&argc, &argv);
gdk_rgb_init();
// Create Main Window...
MainWindow win;
// Listen
gtk_main();
return 0;
}
コンストラクターは、初期サイズと位置、およびその他のオプションのパラメーターを受け取ることができます...
私はこれを簡単にしすぎていますか、それとも私が読んだ他のすべてのものは難しすぎますか?