C ++如何在opengl程序中远程调用控制台窗口

时间:2018-09-12 15:00:16

标签: c++ console keyboard

我要做的是制作一个图形计算器,该计算器需要某些字符输入才能转换图形,但是要做到这一点,我需要能够在程序中生成控制台窗口。 c ++中有什么方法可以做到这一点吗?

使用Dev C ++

2 个答案:

答案 0 :(得分:0)

  

但是要做到这一点,我需要能够生成一个控制台窗口   在程序中[...]

如果是您的意思:

  

需要输入某些字符

然后不,您不需要能够生成控制台窗口 。标题为 opengl程序的一个更合适的解决方案是为当前窗口see here under glutKeyboardFunc)注册键盘回调并处理所有内容。鼠标等的其他回调也记录在此。

如果您缺少任何标头/库,downloading freeglut(保留相同的API并扩展GLUT)没有问题。使用Dev C ++并不是这样做的限制因素。

答案 1 :(得分:0)

出于我已提交的目的,您无需调用控制台。如果您不想使用上面的glut方法,则可以使用windows.h头文件中存在的一些函数来进行输入。

实现无多余输入的最佳方法是在程序中创建一个使用输入的线程,并修改一些主线程可以使用的变量。让我们以一个简单的程序为例:

#include <windows.h>
#include <pthread.h>

//the thread that takes the inputs
void * takeInputs(void * outputVariable)
{
    //casts the output type so the compiler won't complain about setting void* to something
    char * output = (char*) outputVariable;
    //generic loop to stay alive
    while (1 == 1) {
        //checks to see if the key is in the on state, by getting only the needed bit in the data.
        //In this case, we're checking to see if the A key on the keyboard is pressed
        //You can use different keys like the arrow keys, using VK_UP VK_RIGHT
        if (GetAsyncKeyState('A') & 0x8000 != 0)
        {
            *output = 1;
        }
    //put a delay in here so that the input doesn't consume a lot of cpu power
    Sleep(100);
    }
    pthread_exit(0);
}



int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int iCmdShow)
{
    //DoUnimportantWindowsSetup
    char option = 0;
    pthread_t Inputs;
    //order: pointer to handle, Pointer to thread output, pointer to function, pointer to input
    pthread_create(&Inputs, NULL, takeInputs, &option);

    //Do stuff

    if (option == 1) doWorks();
    else doNotWorks();


    //Order: thread handle, pointer to variable that stores output
    pthread_join(Inputs, NULL);
    return 0;
}