gpt4 book ai didi

C++ FLTK,创建一个圆角框

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:44:33 31 4
gpt4 key购买 nike

问题是:画一个圆角的盒子。定义一个类Box,由四条线和四条弧组成。所以我为该练习编写了以下代码:

#include <Simple_window.h>
Simple_window win(Point(100,100), 600,400, "semi-ellipse");

struct Box: Shape{

Box(Point p, int ww, int hh): w(ww), h(hh)
{ add(Point(p.x-ww,p.y-hh)); }

void d_l() const //creating 4 lines
{
Line hrz1 (Point(150,100), Point(400,100));
Line hrz2 (Point(150,300), Point(400,300));
Line ver1 (Point(507,150), Point(507,250));
Line ver2 (Point(41,150), Point(41,250));

win.attach(hrz1);
win.attach(hrz2);
win.attach(ver1);
win.attach(ver2);
}

void draw_lines() const //creating 4 arcs
{
fl_arc(point(0).x,point(0).y,w,h,30,90);
fl_arc(point(0).x,point(0).y,w,h,270,330);
fl_arc(point(0).x,point(0).y,w,h,90,150);
fl_arc(point(0).x,point(0).y,w,h,210,270);
}

private:
int w;
int h;
};

int main()
{
using namespace Graph_lib;

Box b(Point(100,100),100,50);
win.attach(b);
win.wait_for_button();
}

当我运行它时,我遇到了这个异常:

Unhandled exception at 0x757FE9D7 (ole32.dll) in test.exe: 0xC0000005: Access violation reading location 0x00000004.

我知道这是指在全局状态下声明 Simple_window win(Point(100,100), 600,400, "semi-ellipse");。但我这样做是因为我不得不这样做。问题是如何在任一部分(main() 函数以及 Box 结构)。

最佳答案

貌似是win的全局创建导致的。我从来没有运行过在 main 之前创建任何图形的 FLTK 程序,但我猜测有时图形库需要一些东西到位,所以最好在 main 之后使用它们。

对此您能做些什么?如果 win 被声明为指针并在 main 内部而不是在 main 外部创建,那么您将不会发生崩溃。

...
Simple_window* win;
struct Box: Shape
{
...
win->...
...
}


int main()
{
win = new Simple_window(Point(100, 100), 600, 400, "semi-ellipse");
Box b ...
win->attach ...
win->wait ...
delete win;
}

关于C++ FLTK,创建一个圆角框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23536244/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com