GTK+分類文章 顯示方式:簡文 | 列表

March 19,2005

一些常用的檔名轉換函式


  • g_filename_from_uri(const gchar *uri, gchar **hostname, GError **error);

  • 可以把以uri格式(*1)表示的檔案名稱轉換成該作業系統可接受的格式(*2)
    其中hostname和error可為NULL
    memo1: 轉出來的檔名是UTF8格式的,直接就可以餵給g_fopen了,不要再轉啦!!!
    memo2: Win32下它會雞婆幫你把 / 轉成 \,請「手動」把它再轉回來ORZ

    (*1) EX: file:///D:/%E6%B8%AC%E8%A9%A6.zip
    (*2) EX: D:\測試.zip

  • g_filename_display_name(const gchar *filename);

  • 轉換檔名成為可讀的UTF8格式,不可逆,記得把原來的檔名留下來。

Posted by toki_kanno at 樂多Roodo!18:25回應(0)引用(0)

GTK+ 下的 file drag&drop open

有許多程式可以將支援的檔案直接拖到程式裡就可以開啟檔案,
GTK+寫的當然也可以,不過有些需要特別注意的地方。

撰寫步驟如下:

  1. 設定一個 GtkTargetEntry,其中 type 為 "text/uri-list",這個不管是 Win32 or Unix 都是一樣的,都可以吃到檔案列表。

  2. static GtkTargetEntry target_table[] = {{ "text/uri-list", 0, 0 }};

  3. 對你要設定可拖放檔案的元件(通常為window) 設定成 drag_dest

  4. gtk_drag_dest_set(window, GTK_DEST_DEFAULT_ALL, target_table, 1, GDK_ACTION_COPY);

  5. 設定該元件的 window_drag_data_received 事件回呼函式

  6. gtk_signal_connect(GTK_OBJECT(window), "drag_data_received", GTK_SIGNAL_FUNC(window_drag_data_received), NULL);

    static void window_drag_data_received(
    GtkWidget *widget,
    GdkDragContext *context,
    gint x,
    gint y,
    GtkSelectionData *data,
    guint info,
    guint time)
    {
    g_print("Got: %s\n",data->data);
    }


Posted by toki_kanno at 樂多Roodo!0:51回應(0)引用(0)
 [1]