C ++, как удаленно вызвать консольное окно в программе OpenGL - PullRequest
0 голосов
/ 12 сентября 2018

Я пытаюсь сделать графический калькулятор, который принимает определенные символьные данные для преобразования графика, но для этого мне нужно иметь возможность генерировать консольное окно в программе. Есть ли способ в C ++, чтобы сделать это?

с использованием Dev C ++

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Для цели, которую я представил, вам не нужно вызывать консоль.Если вы не хотите использовать метод 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;
}
0 голосов
/ 12 сентября 2018

но для того, чтобы это , мне нужно иметь возможность создать окно консоли в рамках программы [...]

Если под то вы имеете в виду:

принимает определенные символы ввода

затем нет, вам не нужно создавать окно консоли . Это называется программа opengl , и лучшим решением будет регистрация обратных вызовов клавиатуры для текущего окна ( см. Здесь в glutKeyboardFunc ) и справиться со всем там. Там также задокументированы и другие обратные вызовы для мыши и т. Д.

Нет проблем загрузка freeglut (сохраняет тот же API и расширяет GLUT) на случай, если вам не хватает каких-либо заголовков / библиотек. Использование Dev C ++ не является ограничивающим фактором для этого.

...