GTK1.2로 창하나를 만드는데요.. 창이 나오지않네요...

초코리의 이미지

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

}
alfalf의 이미지

GtkWidget main_window;GtkWidget *main_window; 로 바꿔야 하지 않을까요?

초코리의 이미지

alfalf wrote:
GtkWidget main_window;

GtkWidget *main_window;
로 바꿔야 하지 않을까요?

제가 올릴때 잘못 올린것 같네요..

저부분은 수정하겠습니다.

계속해서 이것저것 보고 있는데

뭔가 알것같으면서도 안되서 답답하네요 에혀 ㅠ.ㅠ

alfalf의 이미지

DrawingArea에 그리는 pixmap이 보여지기 위해서는 DrawingArea가 expose event와 연결되어 화면이 갱신될때 다시그려져야 합니다.
그런데 그것을 빼놓으신것 같습니다.
Gtk Tutorial example인 scribble-simple.c를 참고하시면 될것 같습니다.

http://www.gtk.org/tutorial/sec-scribble.html#AEN2945[/code]

초코리의 이미지

네 알겠습니다..

drawing area에 뭔가 그릴려면

Expose이벤트와 연결되어야 그림이 그려지더군요.

그런데 expose이벤트는 창 모양이 변할때마다 그려진다는것으로

알고 있는데..

drawing_area에 뭔가 그리고 보여주려면

창크기를 변환하던지 해서 보여줘야 하는건가요??

또, 제가 하려는게 창을 만들고 거기에 배경 XDM을 올리고

그위에 네모 박스(rectangle)그위에 선을 그리려합니다..

이럴때는 어떤걸 해야할까요??

또 sourceforge.org등에서 여러 예제를 보았는데요..

어떤예제는 glade로 한것 같더군요..

create_window 해서 제가 짠것처럼 화면을 그리던데

그렇게 하려면 GLADE로 해서 다른 명령어가 들어간는 건가요??

정태영의 이미지

초코리 wrote:
Expose이벤트와 연결되어야 그림이 그려지더군요.
그런데 expose이벤트는 창 모양이 변할때마다 그려진다는것으로
알고 있는데..
drawing_area에 뭔가 그리고 보여주려면
창크기를 변환하던지 해서 보여줘야 하는건가요??

GOK에 달아놨듯이..

expose는... 새로 그려야 할부분이 생겼을때..
좀 더 쉽게 얘기하면.. 다른 창이 현재창위로 올라갔다가 그 창을 다시
선택한다거나 하면 가려졌다가 다시 드러나게 되는 부분들이 있을 경우에
받는 시그널이에요..

configure가.. 크기가 재조정되거나 하면 발생하는 이벤트구요..

gtk-demo를 보면..
configure시그널이 발생하면 Pixmap에다가.. 미리 그려놓고..
expose가 발생했을 때.. 미리 그려놓은 Pixmap에서.. 다시 그려야 하는 부분만
복사해오더군요 :)

그냥 현재 그린 부분에.. 직접 그리게 되면..
창크기가 재조정된다거나 하면.. 모두 초기화된다는지 하는 문제가 발생하겠죠..

전역변수같은걸 하나두시고.. 그걸 이용해서
configure시그널이 발생했을때.. 그려주고 expose에선 그냥 원래 그린거
복사하는게.. =3=33

뭐 새롭게 그릴게 있으면.. configure시그널을 발생시키면 =3=33
되도록 하면 될거에요 =3=33

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.