我要做的是制作一个图形计算器,该计算器需要某些字符输入才能转换图形,但是要做到这一点,我需要能够在程序中生成控制台窗口。 c ++中有什么方法可以做到这一点吗?
使用Dev C ++
答案 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;
}