PDA

View Full Version : adding a Console to an openGL GUI



cutting_crew
01-28-2004, 07:05 AM
i am looking to add a console with my openGL app. this is the code i am using so you can follow what i am doing. the RedirectIOToConsole function can be found here: http://dslweb.nwnexus.com/~ast/dload/guicon.htm
Everything works great, the window open and cin and cout work good but i am unable to interact with openGL app and have to close everything and then restart. can anyone help me? thanks in advance!

Here is some code to let you see what I am doing:

void RedirectIOToConsole()

{

int hConHandle;

long lStdHandle;

CONSOLE_SCREEN_BUFFER_INFO coninfo;

FILE *fp;

// allocate a console for this app

AllocConsole();

// set the screen buffer to be big enough to let us scroll text

GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT _HANDLE),

&coninfo);

coninfo.dwSize.Y = MAX_CONSOLE_LINES;

SetConsoleScreenBufferSize(GetStdHandle(STD_OUTPUT _HANDLE),

coninfo.dwSize);

// redirect unbuffered STDOUT to the console

lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);

hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);

fp = _fdopen( hConHandle, "w" );

*stdout = *fp;

setvbuf( stdout, NULL, _IONBF, 0 );

// redirect unbuffered STDIN to the console

lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE);

hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);

fp = _fdopen( hConHandle, "r" );

*stdin = *fp;

setvbuf( stdin, NULL, _IONBF, 0 );

// redirect unbuffered STDERR to the console

lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);

hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);

fp = _fdopen( hConHandle, "w" );

*stderr = *fp;

setvbuf( stderr, NULL, _IONBF, 0 );


// make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog

// point to console as well

ios::sync_with_stdio();

}

void keyBoardStuff()
{
if (keys[VK_INSERT]) //going to add a console handle for user input
{
RedirectIOToConsole(); //goes to Code...does AllocConsole() etc etc.

cout << "Enter #: ";
cin >> number;
cout << endl << "You entered the number " << number << endl << endl;
//FreeConsole(); //tried to Free Console but would just re-initialize //the window
}
}


int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine, // Command Line Parameters
int nCmdShow) // Window Show State
.........

if (active) // Program Active?
{
if (keys[VK_ESCAPE]) // Was ESC Pressed?
done=TRUE; // ESC Signalled A Quit, Quit OpenGL App
else // Not Time To Quit, Update Screen
{
DrawGLScene(); // Draw The OpenGL Scene
SwapBuffers(hDC); // Swap Buffers (Double Buffering)
keyBoardStuff(); // calls all keyboard interaction commands
}

cutting_crew
01-30-2004, 12:03 PM
hey i actually got it to work.. if anyone would like to know how to create a console in a win32 app then you can respond. no one responded to this thread so i am assuming many dont care cos they dont need something like this. to me, it seems this can be very useful.

Graphyx
02-08-2004, 03:16 PM
Hello:

Your adding a Console window to an OpenGL app
is exactly what I came here looking for.

I have an app that was originally written to work on an SGI prior to OpenGL, It uses immediate mode SGI GL commands. The user communicates with the program through the console window that was available with the
original SGI GL language. OpenGL does not provide the console I/O for some reason.

I am very interested in seeing how you got it to work so that I can resurect my programs under OpenGL.

Graphyx . . .