C++ 创建自定义tk画布小部件

C++ 创建自定义tk画布小部件,c++,canvas,tcl,tk,xlib,C++,Canvas,Tcl,Tk,Xlib,我需要装箱定制tk画布小部件(绘图)。描述了如何实现这一点 当画布需要显示绘图时,调用dispay函数 void PlotItem::DisplayPlot( Tk_Canvas canvas, Tk_Item *itemPtr, Display *display, Drawable drawable, int x, int y, int width, int height) { PlotItem *plotPtr = (PlotItem *) itemPtr; GC gc =

我需要装箱定制tk画布小部件(绘图)。描述了如何实现这一点

当画布需要显示绘图时,调用dispay函数

void
PlotItem::DisplayPlot( Tk_Canvas canvas, Tk_Item *itemPtr, Display *display, Drawable drawable, int x, int y, int width, int height) {
    PlotItem *plotPtr = (PlotItem *) itemPtr;
    GC gc = XCreateGC(display, drawable, 0, 0);
    XFillRectangle(display, drawable, gc, 100, 100, 50, 50);
}
main.cpp

int main() {
    Tcl_Interp *interp = Tcl_CreateInterp(); 
    if (Tcl_Init(interp) == TCL_ERROR) {
        return TCL_ERROR;
    } 
    if (Tk_Init(interp) == TCL_ERROR) {
        return TCL_ERROR;
    } 

    Tk_CreateItemType(&tkPlotType); 
    int result = Tcl_Eval(interp, "source main.tcl");

    std::cout << result << std::endl;
    std::cout << interp->result << '\n';

    Tk_MainLoop(); 
    return 0;
}
它创建了两个不同的画布小部件,都包含plot小部件。仅显示显示功能的代码,因为其他功能不执行任何操作。我只需要简单的功能(显示绘图)。这里不是打印,而是打印矩形。
问题是黑色矩形仅显示在第一个绘图上,第二个绘图为空。这是怎么可能发生的?

代码看起来不太糟糕(你错过了一个到XFreeGC的电话,应该考虑TK的GC管理功能,但这是一个侧重点),所以我猜真正的问题是你到目前为止还没有展示给我们的部分。也许边界框计算已关闭?@donalflows添加边界框计算后,它工作正常,谢谢
wm title . program_tk
wm minsize . 628 628

canvas .vp -background white -width 310 -height 224
canvas .hp -background white -width 310 -height 224

pack .vp 
pack .hp 

set verticalPlot [eval .vp create plot 1 1 ]
set horizontalPlot [eval .hp create plot 1 1 ]