문제

나는 상당히 숙련 된 프로그래머이지만 GUI 프로그래밍에 대한 새로운 프로그램입니다.나는 DFL에 대해 GTKD로 쓴 플로팅 라이브러리를 포트하려고 노력하고 있으며, 드로잉을 나타낼 수 없습니다.다음 코드는 나에게 빈 창을 생성합니다.누군가가 문제가 무엇인지, 그리고 / 또는 DrawingArea에 몇 줄을 가져오고 MainWindow에 결과를 표시하기위한 최소한의 예제 코드를 게시 할 수 있습니까?

import gtk.DrawingArea, gtk.Main, gtk.MainWindow, gdk.GC, gdk.Drawable,
    gdk.Color;

void main(string[] args) {
    Main.init(args);

    auto win = new MainWindow("Hello, world");
    win.setDefaultSize(800, 600);
    auto drawingArea = new DrawingArea(800, 600);
    win.add(drawingArea);
    drawingArea.realize();

    auto drawable = drawingArea.getWindow();
    auto gc = new GC(drawable);
    gc.setForeground(new Color(255, 0, 0));
    gc.setBackground(new Color(255, 255, 255));
    drawable.drawLine(gc, 0, 0, 100, 100);

    drawingArea.showAll();
    drawingArea.queueDraw();
    win.showAll();

    Main.run();
}
.

도움이 되었습니까?

해결책

D는 경험이 없지만 GTK에서 많은 것들이 없으므로 GTKD 자습서의 도움으로 최소한의 예를 해킹 할 수있었습니다.

import gtk.DrawingArea, gtk.Main, gtk.MainWindow, gdk.GC, gdk.Drawable,
    gdk.Color, gtk.Widget;

class DrawingTest : MainWindow
{
    this()
    {
        super("Hello, world");
        setDefaultSize(800, 600);
        auto drawingArea = new DrawingArea(800, 600);
        add(drawingArea);
        drawingArea.addOnExpose(&drawStuff);
        showAll();
    }

    bool drawStuff(GdkEventExpose *event, Widget self) 
    {
        auto drawable = self.getWindow();
        auto gc = new GC(drawable);
        gc.setForeground(new Color(cast(ubyte)255, cast(ubyte)0, cast(ubyte)0));
        gc.setBackground(new Color(cast(ubyte)255, cast(ubyte)255, cast(ubyte)255));
        drawable.drawLine(gc, 0, 0, 100, 100);
        return true;
    }
}

void main(string[] args) {
    Main.init(args);
    new DrawingTest();
    Main.run();
}
.

GTK의 DrawingArea는 실제로 페인트를 칠할 수있는 빈 위젯이며 위젯에서 페인팅하는 것은 항상 expose-event 핸들러에서 항상 수행되어야합니다.(이것이 이것이 GTK 3에서 변할 것으로 이해할 것입니다!)

신호 콜백으로 함수를 연결할 수 없으며 대리인만이

이유가됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top