(초보) gtk 작성팁

#1 g_signal_connect 함수 인자 넘겨주기

#include<gtk/gtk.h>

struct testing
{
    int a;
    char b;
};
.......
int delete_event(GtkWidget *widget,struct testing *data)
{
        data->a=3;
       printf("%d\n",data->a);
        return (FALSE);
}

int main(int argc,char *argv[])
{
   struct testing abc;
   ..........
   g_signal_connect(GTK_OBJECT (window), "delete_event",GTK_SIGNAL_FUNC (delete_event),&abc);
   ..........
}

연걸함수쓸때..(g_signal_connect) 인자를 넘겨주는 부분이 한곳(제일 마지막 인자) 밖에 없어서
어쩔수 없이 전역 변수를 사용해서 하는 수밖에 없었는데.. 그놈 포럼에서 찾아보니까 해결방법 이 있었다

"구조체를 넘겨주라"...라는것 ... 그래서 위에처럼 하니까 간단하게 해결되었다.
(사실 이방법말고 딴 방법을 찾을려고도 했지만...)

#2 윈도우 종료 시키기

사실 이거하기전에 윈도우를 종료 시키는 함수가 있긴 했다
gtk_main_quit();
바로 이함수,,,

그런데 문제는 이함수를 자식윈도우(?)에서 Call하면은 제대로 작동을 하지 않는다는것이었다
(첫번째 클릭때에서는 명령어 무시 2번 클릭하면 프로그램 자체가 종료)
그래서 아래의 방법을 사용하기로했다(이거 찾는다고 꽤나 고생)

void closeWin(GtkWidget *window,GtkWidget *data)
{
  gtk_widget_hide_all(data);
}

이함수를 쓰니깐 잘 작동을 한다.. 헌데.. 뭔가 찜찜하다랄까...
hide라서.. remove나 quit같은게 아니라서 말이다
(어감이 좀.... 말끔하게 없어진다는 게 아니라서 말이죠)

이것말고 새로운 방법들이 있는지도 찾아봐야겠습니다....

.... 헉... 이걸로 하면 인제 부모윈도우가 꺼져도  프로그램이 종료가 안되는...
이 함수도 안되겠군요.;;

라고 해서... kldp+튜토리얼의 힘으로 대충 알아냈습니다..
void closeApp(GtkWidget *window,gpointer *data)
{
    gtk_main_quit();
}

void errorMsg(const char *errMsg,GtkWidget *window)
{
   GtkWidget *dialog;

dialog=gtk_message_dialog_new_with_markup(GTK_WINDOW(window),
GTK_DIALOG_MODAL,GTK_MESSAGE_ERROR,GTK_BUTTONS_OK,errMsg);

g_signal_connect (GTK_WINDOW(dialog),"response",GTK_SIGNAL_FUNC(gtk_widget_destroy),
GTK_OBJECT(dialog));

 
gtk_widget_show_all(dialog);

}

Ps:
gtk를 사용하여 프로그램 만들기...
그다지 어렵지 않은거 같군요.. 제가 대총하는거 보니..
아주 직관적으로 이루워져 있어서.. 함수 이름만 보고 확실히 무언 기능을
하는가 알수 있습니다 하지만 그 단점으로는 너무 함수명이 길어지고 언더바를 너무
써서 새끼손가락에 무리? 가 간다는거 정도...

할만 합니다....(취소) 하지만 너무 복잡하네요..우아아악~

자...여러분도... 한번 간단한 프로그램을 작성해보는것은 어떻습니까?

GTK+ Reference Manual(ENG) => http://developer.gnome.org/doc/API/2.0/gtk/index.html
GTK+ Tutorial(KOR)   =>      http://wiki.kldp.org/KoreanDoc//html/GtkTutorial/GtkTutorial.html#toc25

'Programming > GTK+' 카테고리의 다른 글

vte를 이용한 간단한 터미널  (2) 2007.01.14
libglade 컴파일법  (1) 2006.12.14
TODAY.... 삽질 DAY  (6) 2006.08.09
GTK_TEXT 에러..해결책  (4) 2006.07.30
Glade! 리눅스 GUI 프로그래밍 툴  (0) 2006.07.18