“opengl鼠标交互”复选框

opengl mouse interaction checkbox

本文关键字:复选框 交互 鼠标 opengl      更新时间:2023-10-16

我试图从头开始创建一个复选框,但遇到了一些问题。

在我的control.h文件中,我初始化了

public : int checked = 0;

因此,每当鼠标按下正确的区域时,checked就会变成一个。drawCheckBox方法将检查它是1还是0,并在框上打一个复选框。程序运行,但是当我按下框区域并检查checked的值时,它一直显示0。我不知道为什么。

绘制复选框/检查用户是否选中

// Function to generate food selection box in left selection area.
void Control::drawCheckBox(string food, double x1, double y1, double x2, double y2)
{
    glColor3f(0, 1, 1);
    //placement of the check box
    glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
    glRectf(x1, y1, x2,y2);
    // Draw black boundary.
    glColor3f(0.0, 0.0, 0.0);
    glLineWidth(5);
    glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
    glRectf(x1, y1, x2, y2);

    if (checked == 1)checker(x1, y1, x2, y2); // checks the check box.
    else glColor3f(1, 1, 1);                        
    cout << checked;

}

鼠标回调程序

// The mouse callback routine.
void mouseControl(int button, int state, int x, int y)
{
    Control check;
    if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN)
        // Store the clicked point in the points array after correcting
        // from event to OpenGL co-ordinates.
        //points.push_back(Point(x, height - y));
        if ((x >= 5 && x <= 10) && (y <= 85 && y >= 80))
        {
        if (check.checked == 1)
        {
            check.checked = check.checked - 1;
        }
        else check.checked++;
        }
    if (button == GLUT_RIGHT_BUTTON && state == GLUT_DOWN) exit(0);
        glutPostRedisplay();
}

首先,在mouseControl()函数中本地声明
Control check;
的对象
我推测您的Control构造函数正在将Control::checked状态初始化为0
因此,您将始终看到Control::checked的值为0

您需要决定Control check对象的范围和生存期。希望这将有助于解决这个问题。
否则,如果您发布更多的代码,特别是完整的Control类实现以及在哪里以及如何调用mouseControl,将会有所帮助。
然后我们可以弄清楚该怎么做。