Re: Console application's window size

Tech Tip: Click here to run a free scan for Windows Errors and optimize PC performance

From: Senapathy (senapathy.k_at_siemens.com)
Date: 09/01/04


Date: Wed, 1 Sep 2004 22:34:21 +0530

Hi Vincent,

Thanks a lot for the prompt reply!
As you would have seen from my previous post, I have tried both ways - with
and
withoutFreeConsole & AllocConsole.
As I mentioned, I should also prefer not to use a new cmd window...
But in that case, the printf and cout statements simply do not appear
anywhere!

I saw your posting in the other newsgroup.
I am currently having a console app only. But what you hint is that I still
need to
call the GetStdHandle API and set / hook the handles using setvbuf. Is this
correct?

The way I was trying it was trying to set the StdHandle to the created
console handle:
> > // try setting the std out handle to the newly created one.
> > // This returns TRUE !!!
> > BOOL bSet = ::SetStdHandle(STD_OUTPUT_HANDLE, handle);

I will try this out and post my results...

Once again, thanks so much for the hints!

Warm regards,
Sena

"Vincent Fatica" <abuse@localhost> wrote in message
news:4135fbb3$1@localhost...
> Right, the standard runtime handles need to be hooked up after using
> AllocConsole() or AttachConsole(). Look for a recent article by me in
> comp.os.ms-windows.programmer.win32: "Re: I need console output in a
> dialog-based app".
>
> But you said your app **is** a console app. In that case there's no need
to
> AllocConsole(). You already have a console, and the runtime handles are
> automatically set up when you start a "subsystem:console" application. Is
> there some need to free the old console and alloc a new one?
>
> --
> - Vince
>
> On Wed, 1 Sep 2004 21:34:42 +0530, "Senapathy" <senapathy.k@siemens.com>
> wrote:
>
> >Hello Vincent,
> >
> >Thanks for the hint. I tried the APIs that you suggested - my problem is
> >that the usual C++ I/O library method cout is not working after I create
> >this new console. I am posting the code that I have:
> >
> >int main(int argc, char* argv[])
> >{
> > // free old console and allocate new one
> > ::FreeConsole();
> > ::AllocConsole();
> >
> > // create new console handle
> > HANDLE handle = ::CreateConsoleScreenBuffer(GENERIC_WRITE,
> >FILE_SHARE_WRITE,
> > NULL,
> >CONSOLE_TEXTMODE_BUFFER, NULL);
> >
> > // set this handle as the active screen buffer
> > ::SetConsoleActiveScreenBuffer(handle);
> >
> > SMALL_RECT srWindowRect; // hold the new window size
> > COORD coordScreen; // hold the new screen buffer
size
> >
> > // define the new console window size to be 1 less than the buffer
> >size
> > srWindowRect.Right = 99;
> > srWindowRect.Bottom = 39;
> > srWindowRect.Left = srWindowRect.Top = 0;
> >
> > // define the new console buffer size
> > coordScreen.X = 100;
> > coordScreen.Y = 40;
> > ::SetConsoleScreenBufferSize(hConsole, coordScreen);
> > ::SetConsoleWindowInfo(hConsole, TRUE, &srWindowRect);
> >
> > // try setting the std out handle to the newly created one. This
> >succeeds!!!
> > BOOL bSet = ::SetStdHandle(STD_OUTPUT_HANDLE, handle);
> >
> > // however, the lines below doesn't get printed out !!!
> > printf("Hello world\n");
> > cout << "cout in new buff" << endl;
> >
> > // however the line below gets printed out
> > ::WriteConsole(handle, (void*)"Hi there", 4, &dwWritten, NULL);
> >
> > int i;
> > cin >> i;
> >
> > return 0;
> >}
> >
> >Now I find 2 funny things.
> >
> >1) If I _comment_out_ the FreeConsole and the AllocConsole parts and run
the
> >exe from a cmd prompt, the same cmd prompt gets bigger properly.
> >In this, only the WriteConsole output is visible. Once I key in some
> >character for the cin >> and then hit enter, the cmd prompt goes back to
the
> >original size and THEN the printf and the cout statements are visible!!!
> >
> >2) If I keep the FreeConsole and AllocConsole and run the exe, I get a
NEW
> >cmd prompt window. The original cmd prompt from where I launched the exe
is
> >waiting for the new cmd prompt to close down.
> >Only the WriteConsole output is visible in the new window also.
> >Once I close the new cmd prompt, the 2 lines are NOT printed even on the
> >original cmd prompt.
> >
> >How do I get the cout statements to appear on the expanded window in the
> >proper sequence?
> >I am now guessing that I do not need a FreeConsole and AllocConsole
> >
> >Warm regards,
> >Senapathy
> >
> >
> >"Vincent Fatica" <abuse@localhost.com> wrote in message
> >news:4135e29d$1@localhost...
> >> In the particular example you mentioned, first make sure the console
has
> >> at least 40 lines of screen buffer with SetConsoleScreenBufferSize()
and
> >> then make the window larger with SetConsoleWindowInfo().
> >>
> >> Those two functions will work in the general setting, keeping in mind
> >> that you can't make the window larger than the screen buffer in either
> >> direction, and, if the window is smaller than the screen buffer in
> >> either direction, you'll get a scroll bar in that direction.
> >>
> >> --
> >> - Vince
> >>
> >> On Wed, 1 Sep 2004 20:03:04 +0530, "Senapathy"
<senapathy.k@siemens.com>
> >> wrote:
> >>
> >> >Hello,
> >> >
> >> >I am developing a commandline application (Console App) in W2K using
VC6.
> >> >I am using the regular C++ library functions like cout and cin for
> >> >input/output.
> >> >
> >> >Now I want the window size of the resultant console exe to be more
than
> >the
> >> >default size on the user's machine, which is 80 * 25. I want it to be
> >say,
> >> >100 * 40. I want this to be done from within my program itself on
> >starting -
> >> >and not ask the user to change the size from the console window
property
> >> >page.
> >> >
> >> >I went through the console APIs - CreateConsoleScreenBuffer and so on.
> >But
> >> >this seems to complicated to me.
> >> >
> >> >Is there any other simple way to increase the console window size?
> >> >
> >> >Warm regards,
> >> >Senapathy
> >> >
> >>
> >
>



Relevant Pages

  • Re: Console applications window size
    ... AllocConsole() or AttachConsole. ... You already have a console, ... SMALL_RECT srWindowRect; // hold the new window size ... >exe from a cmd prompt, the same cmd prompt gets bigger properly. ...
    (microsoft.public.vc.language)
  • Re: Console applications window size
    ... exe from a cmd prompt, the same cmd prompt gets bigger properly. ... original size and THEN the printf and the cout statements are visible!!! ... Only the WriteConsole output is visible in the new window also. ... > In the particular example you mentioned, first make sure the console has ...
    (microsoft.public.vc.language)
  • Re: Console and Form together in one application based on EXE parameters
    ... application opens a second console window, ... If the program was started from a command window, then AttachConsole will find that window and use it. ... AttachConsole will return False and AllocConsole will create a new window. ... The program is able to write to the parent's console window, but since the command prompt executed the program asynchronously, it still prompts for additional commands. ...
    (comp.lang.pascal.delphi.misc)
  • Re: Problem with console window
    ... You mean simply call AllocConsole() and then do ... the text is not displayed in the console window... ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: Newbie, How can I create a simple C++ program under VS 2003.
    ... Either run the program from the VS IDE or open a CMD prompt and run from ... > Using Windows Explorer create a folder to hold all of your projects for ... You should see the following window: ... > messages recheck you program code and make sure it appears exactly as ...
    (microsoft.public.vsnet.general)