GTK3/Cairo 버튼 클릭시 이벤트 처리
2015.03.16 03:24
.
/*
============================================================================
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;
}
.
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | 툴 북마크 | 꿈돌이 | 2021.02.11 | 80866 |
75 | C# GDI 좌표 | 꿈돌이 | 2015.08.31 | 135489 |
74 | 우분투 키보드 입력 속도 조정 | 꿈돌이 | 2018.06.18 | 68798 |
73 | 원격데스크톱 연결 - 로컬계정 사용 | 꿈돌이 | 2015.05.25 | 30888 |
72 | LZ4 압축하기, 해제하기 간단 예제 | 꿈돌이 | 2017.04.18 | 25060 |
71 | 윈도우10 앱 및 기능 에서 삭제 안되는 프로그램을 목록에서 강제로 제거하기 | 꿈돌이 | 2019.05.02 | 12539 |
70 | 공중파 케이블 vod | 꿈돌이 | 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) 변경 스크립트 | 꿈돌이 | 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 버전에서 원격데스크톱 사용 | 꿈돌이 | 2015.03.13 | 2462 |
59 | 윈도우 10 260자 초과하는 파일경로 허용 | 꿈돌이 | 2018.11.03 | 2357 |
58 | 라즈베리파이 전용 7인치 터치LCD 제어 | 꿈돌이 | 2018.01.30 | 2049 |
57 | wsl 관련된 개체 종류에 대한 해당 작업은 지원되지 않습니다 | 꿈돌이 | 2021.11.01 | 1980 |