1

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;
      }

コンストラクターは、初期サイズと位置、およびその他のオプションのパラメーターを受け取ることができます...

私はこれを簡単にしすぎていますか、それとも私が読んだ他のすべてのものは難しすぎますか?

4

2 に答える 2

6

あなたはそれをするかもしれません。

C ++インターフェイスが好きな場合は、GTKにもすでにC++ラッパーが割り当てられています。

それはgtkmmと呼ばれています。

于 2013-02-10T19:33:45.440 に答える