gpt4 book ai didi

c++ - 更新窗口的标志

转载 作者:太空宇宙 更新时间:2023-11-04 03:36:28 24 4
gpt4 key购买 nike

大家早上好!我正在尝试在 C++ 中设置并(稍后)删除窗口的标志。无论我尝试做什么,我都会继续遇到编译错误并且无法弄清楚。以下是该对象的相关部分:

enum {
NO_FOCUS = 0x0001,
CLICK_TO_FOCUS = 0x0002,
NO_BORDER = 0x0004,
...
}

class Frame : public Fl_Window {
int flags_;
void set_flag(int i) {flags_ |= i;}
void clear_flag(int i) {flags_&=~i;}
int flags() const {return flags_;}
int flag(int i) const {return flags_&i;}
...
}

我正在尝试调整另一个函数的标志值:

void ShowWindow() {
Display* d = fl_display;
XWindow w = XCreateSimpleWindow(d, RootWindow(d, fl_screen),
0, 0,
100, 200,
0,
0x000000,
0x000000);

Frame* frame = new Frame(w);
//frame.flags |= NO_BORDER;
//frame->flags() |= NO_BORDER;
frame->flags(NO_BORDER);
}

除了上面注释掉的部分之外,我还尝试了其他方法,但无论我尝试什么,我都会继续遇到编译错误。任何帮助将不胜感激!

谢谢,戴夫

更新:

根据提供的信息,我已公开 set_flag() 函数,但没有得到所需的结果。项目中的另一个函数在绘制窗口之前检查标志的值:

void Frame::updateBorder() {
...

if (flag(NO_BORDER)) { ... }
else { ... }
}

但是当我在外部设置标志时,这似乎并没有被触发。添加一些调试 printf 语句后,我可以看到在设置标志之前正在绘制窗口。我该如何解决这个问题?我是否必须做类似的事情:

Frame*->set_flag(NO_BORDER);
Frame* frame = new Frame(w);

Frame* frame;
frame->set_flag(NO_BORDER);
frame = new Frame(w);

我可以用后者编译程序,但仍然没有发生预期的效果。如何在绘制窗口之前设置标志?

最佳答案

您希望从类外部访问的类部分之前需要 public:

请注意,您不应该将 flags_ 公开,因此您不应该使此表单可用:

frame.flags_ |= NO_BORDER;

并且不带下划线的标志是一个函数,因此您尝试的以下内容是严重错误的:

frame.flags |= NO_BORDER;

您将 flags() 定义为只读,因此即使您将标志公开,您也不能执行以下操作:

frame->flags() |= NO_BORDER;

一旦将类的正确部分公开,就应该按照定义使用它:

frame->set_flag( NO_BORDER );

关于c++ - 更新窗口的标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31386448/

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