Gtk에서이 간단한 응용 프로그램을 테스트 한 결과 ... 스윙에서 왔기 때문에 무승부 이벤트 기능을 재정의하는 것이 정상입니다 ... 어쨌든 것 같습니다 작동하지 :gtk 초보자 응용 프로그램이 어설 션 오류와 함께 작동하지 않습니다
#include <gtk-2.0/gtk/gtk.h>
#include <gtk-2.0/gdk-pixbuf/gdk-pixbuf.h>
#include <stdlib.h>
#include<string.h>
#include<stdio.h>
#include <iostream>
GdkPixbuf *imm;
void destroy(GtkWidget *widget, gpointer data) {
gtk_main_quit();
}
gboolean on_expose_event(GtkWidget *widget, GdkEventExpose *event,
gpointer data) {
gdk_draw_pixbuf((GdkDrawable*) widget, widget->style->white_gc, imm, 0, 0,
0, 0, -1, -1, GDK_RGB_DITHER_NONE, 0, 0);
return FALSE;
}
int main(int argc, char** argv) {
char* filename = new char[1000];
GError *error = NULL;
GtkWidget *window;
gtk_set_locale();
gtk_init(&argc, &argv);
if (argv[1] == NULL) {
std::cout << "Err.";
return -1;
}
strcpy(filename, argv[1]);
imm = gdk_pixbuf_new_from_file(filename, &error);
if (!imm) {
std::cout << "err closing";
return 0;
}
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_size_request((GtkWidget*) window, 500, 350);
g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(destroy), NULL);
g_signal_connect(window, "expose-event",
G_CALLBACK(on_expose_event), NULL);
gtk_container_set_border_width(GTK_CONTAINER (window), 10);
gtk_widget_show(window);
gtk_main();
return 0;
}
runtinme에서 사실 (라인 gdk_draw_pixbuf (....)에) 말했다 것 말이다 : 그것은 pixbuf이 잘되지 않기 때문에
(cConvolve:5011): Gdk-CRITICAL **: gdk_draw_pixbuf: assertion `GDK_IS_DRAWABLE (drawable)' failed
입니까 ??? 아니면 내가 이렇게 창문으로 그릴 수 없기 때문입니까?
은''gtk_widget_set_app_paintable()을보십시오 :하지만 내 목적은, 그것이 작동하지 않는 내가 얻을 더 이상 주장 '해달라고해도, 어쨌든 ... 윈도우 BG에 그리기하려고했다? – ptomato