GTK1.2로 창하나를 만드는데요.. 창이 나오지않네요...
글쓴이: 초코리 / 작성시간: 금, 2003/12/05 - 2:53오후
GTK 1.2로 창을 하나 만들고 있습니다.
메인 함수에서 창을 뛰우는 명령을 써서
창을 뛰울려고 하는데 그림파일이 보이지않네요.
창을 뛰으는 함수 안에서는
window를 하나 만들고 거기다가 vbox를 만들어 붙이고
vbox위에다가 draw_area를 만들어 올려서
보이게 하려는 목적입니다.
튜토리얼 example등 많이 봤는데도 잘모르겠습니다..
어디를 어떻게 고쳐야할까요...
main 함수
GtkWidget *main_window; main_window = create_main_window();
// Widget은 메인 헤더에서 GtkWidget *top_widget;등으로 // 다 선언이 되어있습니다. GtkWidget * create_main_window(void){ //메인 윈도우 생성부분 top_widget = gtk_window_new(GTK_WINDOW_TOPLEVEL);//윈도우를 하나 만든다 gtk_window_set_title(GTK_WINDOW (top_widget),"Pixmap");//윈도우의 타이틀을 >저장 gtk_window_set_default_size(GTK_WINDOW(top_widget),240,320);//위젯의 크기를 정의한다. gtk_widget_set_name(top_widget,"main_window");//윈도우 타이틀 gtk_widget_set_uposition(top_widget,0,0);//초기 생성되는 위치 gtk_widget_show(top_widget); //메인윈도우 생성끝 //box를 하나 만들어 윈도우에 어태치한다ㅂ. vbox = gtk_vbox_new(FALSE,0); //윈도우에 어태치 완료 //드로윙 에어리어를 만든다. drawing_area=gtk_drawing_area_new();//그리는 위치를 만든다. gtk_drawing_area_size(GTK_DRAWING_AREA(drawing_area),240,320);//에어리어의 >싸이즈 gtk_container_add(GTK_CONTAINER(top_widget),vbox);//박스를 패킹한다. gtk_widget_show(vbox); gtk_widget_show(drawing_area); if (pixmap) gdk_pixmap_unref(pixmap); pixmap = gdk_pixmap_new (top_widget->window, 240,320, -1); pixmap = gdk_pixmap_colormap_create_from_xpm_d(pixmap, gdk_colormap_get_system(),&transparent, NULL,phone_xpm); gdk_draw_rectangle(pixmap, top_widget->style->white_gc,TRUE, 60,80,120,160); gdk_draw_line(pixmap,top_widget->style->black_gc, 70,90,100,110); gdk_draw_pixmap(top_widget->window, top_widget->style->fg_gc[GTK_WIDGET_STATE(top_widget)], pixmap,0,0,0,0,240,320); gtk_box_pack_start(GTK_BOX(vbox),drawing_area,FALSE,FALSE,0); }
Forums:
저기요...
GtkWidget main_window;
를GtkWidget *main_window;
로 바꿔야 하지 않을까요?Re: 저기요...
제가 올릴때 잘못 올린것 같네요..
저부분은 수정하겠습니다.
계속해서 이것저것 보고 있는데
뭔가 알것같으면서도 안되서 답답하네요 에혀 ㅠ.ㅠ
expose event...
DrawingArea에 그리는 pixmap이 보여지기 위해서는 DrawingArea가 expose event와 연결되어 화면이 갱신될때 다시그려져야 합니다.
그런데 그것을 빼놓으신것 같습니다.
Gtk Tutorial example인 scribble-simple.c를 참고하시면 될것 같습니다.
http://www.gtk.org/tutorial/sec-scribble.html#AEN2945[/code]
네 알겠습니다..drawing area에 뭔가 그릴려면 E
네 알겠습니다..
drawing area에 뭔가 그릴려면
Expose이벤트와 연결되어야 그림이 그려지더군요.
그런데 expose이벤트는 창 모양이 변할때마다 그려진다는것으로
알고 있는데..
drawing_area에 뭔가 그리고 보여주려면
창크기를 변환하던지 해서 보여줘야 하는건가요??
또, 제가 하려는게 창을 만들고 거기에 배경 XDM을 올리고
그위에 네모 박스(rectangle)그위에 선을 그리려합니다..
이럴때는 어떤걸 해야할까요??
또 sourceforge.org등에서 여러 예제를 보았는데요..
어떤예제는 glade로 한것 같더군요..
create_window 해서 제가 짠것처럼 화면을 그리던데
그렇게 하려면 GLADE로 해서 다른 명령어가 들어간는 건가요??
[quote="초코리"]Expose이벤트와 연결되어야 그림이 그려지더군요
GOK에 달아놨듯이..
expose는... 새로 그려야 할부분이 생겼을때..
좀 더 쉽게 얘기하면.. 다른 창이 현재창위로 올라갔다가 그 창을 다시
선택한다거나 하면 가려졌다가 다시 드러나게 되는 부분들이 있을 경우에
받는 시그널이에요..
configure가.. 크기가 재조정되거나 하면 발생하는 이벤트구요..
gtk-demo를 보면..
configure시그널이 발생하면 Pixmap에다가.. 미리 그려놓고..
expose가 발생했을 때.. 미리 그려놓은 Pixmap에서.. 다시 그려야 하는 부분만
복사해오더군요 :)
그냥 현재 그린 부분에.. 직접 그리게 되면..
창크기가 재조정된다거나 하면.. 모두 초기화된다는지 하는 문제가 발생하겠죠..
전역변수같은걸 하나두시고.. 그걸 이용해서
configure시그널이 발생했을때.. 그려주고 expose에선 그냥 원래 그린거
복사하는게.. =3=33
뭐 새롭게 그릴게 있으면.. configure시그널을 발생시키면 =3=33
되도록 하면 될거에요 =3=33
오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...
http://mytears.org ~(~_~)~
나 한줄기 바람처럼..
댓글 달기