(초보) gtk 작성팁
Programming/GTK+ 2006. 8. 4. 18:29
#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
#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 |