메뉴 건너뛰기

enjoyTools.net

GTK3/Cairo 버튼 클릭시 이벤트 처리

2015.03.16 03:24

꿈돌이 조회 수:8678

.

/*
 ============================================================================
 Name        : cairo_hello_world.c
 Author      : swshin
 Version     : not versioned
 Copyright   : team maniac.
 Description : Hello World in GTK+
 ============================================================================
 */

#include <string.h>
#include <gtk/gtk.h>

char myHello[255] = "Hello world.";
int stats = 0;

// 아래 함수 먼저 선언되어야 동작 됨.
static void do_drawing(cairo_t *);

static gboolean do_text_change(GtkWidget *widget, cairo_t *cr, gpointer user_data) {
 if (stats == 0) {
  strcpy(myHello, "Hi Button.");
  stats = 1;
 } else {
  strcpy(myHello, "Hello World.");
  stats = 0;
 }

 return FALSE;
}

static gboolean on_draw_event(GtkWidget *widget, cairo_t *cr,
  gpointer user_data) {
 // 아래 두 줄 다 있어야 바로 반응함.
 // 두번째줄 없으면 바로 반응 안하고 다른 창 갔다와야 반응함.
 do_drawing(cr);
 gtk_widget_queue_draw(widget);

 return FALSE;
}

static void do_drawing(cairo_t *cr) {
 cairo_set_source_rgb(cr, 0, 0, 0);
 cairo_set_font_size(cr, 40.0);

 cairo_move_to(cr, 10.0, 50.0);
 cairo_show_text(cr, myHello);
}

int main(int argc, char *argv[]) {
 GtkWidget *window;
 GtkWidget *box;
 GtkWidget *button1;
 GtkWidget *darea;

 gtk_init(&argc, &argv);

 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

 box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 1);
 button1 = gtk_button_new_with_label("Change text");
 darea = gtk_drawing_area_new();

 gtk_box_pack_start(GTK_BOX(box), darea, TRUE, TRUE, 0);
 gtk_box_pack_start(GTK_BOX(box), button1, TRUE, TRUE, 0);
 gtk_container_add(GTK_CONTAINER(window), box);

 g_signal_connect(G_OBJECT(darea), "draw", G_CALLBACK(on_draw_event), NULL);
 g_signal_connect(button1, "clicked", G_CALLBACK(do_text_change), NULL);
 g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

 gtk_window_set_default_size(GTK_WINDOW(window), 250, 150);
 gtk_window_set_title(GTK_WINDOW(window), "GTK window");

 gtk_widget_show_all(window);

 gtk_main();

 return 0;
}



.

번호 제목 글쓴이 날짜 조회 수
공지 툴 북마크 꿈돌이 2021.02.11 80866
75 C# GDI 좌표 꿈돌이 2015.08.31 135489
74 우분투 키보드 입력 속도 조정 꿈돌이 2018.06.18 68798
73 원격데스크톱 연결 - 로컬계정 사용 꿈돌이 2015.05.25 30888
72 LZ4 압축하기, 해제하기 간단 예제 file 꿈돌이 2017.04.18 25060
71 윈도우10 앱 및 기능 에서 삭제 안되는 프로그램을 목록에서 강제로 제거하기 꿈돌이 2019.05.02 12539
70 공중파 케이블 vod file 꿈돌이 2019.05.26 9374
69 내꺼 스타트, 엔드 G코드 꿈돌이 2020.05.05 8920
» GTK3/Cairo 버튼 클릭시 이벤트 처리 꿈돌이 2015.03.16 8678
67 SKR mini E3 교체한 Ender 3에 Klipper OctoPrint 설치, 설정 및 적용 외 꿈돌이 2019.11.16 7522
66 MS-Windows에서 php_screw 사용하기 꿈돌이 2015.11.17 5625
65 dlib dnn_metric_learning_ex.cpp 꿈돌이 2020.02.07 4880
64 윈도우10 배율 (dpi) 변경 스크립트 file 꿈돌이 2019.08.27 3935
63 node.js 전역 모듈 제거 꿈돌이 2017.03.16 3544
62 윈도우 cmd에서 저장된 WIFI Profile의 비번 확인 꿈돌이 2019.07.03 2948
61 GnuWin32 패키지 목록 페이지 꿈돌이 2018.12.14 2650
60 윈도우8.1 core 버전에서 원격데스크톱 사용 file 꿈돌이 2015.03.13 2462
59 윈도우 10 260자 초과하는 파일경로 허용 꿈돌이 2018.11.03 2357
58 라즈베리파이 전용 7인치 터치LCD 제어 꿈돌이 2018.01.30 2049
57 wsl 관련된 개체 종류에 대한 해당 작업은 지원되지 않습니다 file 꿈돌이 2021.11.01 1980