알라딘MGG와이드바


Adding Console To Win32GUI (Windows 프로그램에 콘솔 추가하기) 개발 이야기

내용은 관심 있으신 분만 보시고요.. 중요한 것은 소스 코드
void RedirectIOToConsole(); 이것만 main() 초반에 실행시켜 주면
Win32 Windows 프로그램에서 콘솔 띄울 수 있습니다.
그러면 UnitTest 의 결과를 콘솔로 확인할 수 있기 때문에 굳이 프로젝트 셋팅을 둘로 나눌 필요가 없지요.
역시 구하면 얻는군요 :)

원본 : Adding Console I/O to a Win32 GUI App

핵심코드는 아래와 같습니다.


   1: #include <Windows.h>
   2: #include <stdio.h>
   3: #include <fcntl.h>
   4: #include <io.h>
   5: #include <iostream>
   6: #include <fstream>
   7:  
   8: #ifndef _USE_OLD_IOSTREAMS
   9: using namespace std;
  10: #endif
  11:  
  12: static const WORD MAX_CONSOLE_LINES = 500;
  13:  
  14: // http://dslweb.nwnexus.com/~ast/dload/guicon.htm
  15: void RedirectIOToConsole()
  16: {
  17:     int hConHandle;
  18:     long lStdHandle;
  19:  
  20:     CONSOLE_SCREEN_BUFFER_INFO coninfo;
  21:  
  22:     FILE *fp;
  23:  
  24:     // allocate a console for this app
  25:     AllocConsole();
  26:  
  27:     // set the screen buffer to be big enough to let us scroll text
  28:  
  29:     GetConsoleScreenBufferInfo(
  30:         GetStdHandle(STD_OUTPUT_HANDLE), 
  31:         &coninfo);
  32:  
  33:     coninfo.dwSize.Y = MAX_CONSOLE_LINES;
  34:  
  35:     SetConsoleScreenBufferSize(
  36:         GetStdHandle(STD_OUTPUT_HANDLE), 
  37:         coninfo.dwSize);
  38:  
  39:     // redirect unbuffered STDOUT to the console
  40:     lStdHandle = (long)GetStdHandle(STD_OUTPUT_HANDLE);
  41:     hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
  42:  
  43:     fp = _fdopen( hConHandle, "w" );
  44:  
  45:     *stdout = *fp;
  46:  
  47:     setvbuf( stdout, NULL, _IONBF, 0 );
  48:  
  49:     // redirect unbuffered STDIN to the console
  50:     lStdHandle = (long)GetStdHandle(STD_INPUT_HANDLE);
  51:     hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
  52:  
  53:     fp = _fdopen( hConHandle, "r" );
  54:  
  55:     *stdin = *fp;
  56:     setvbuf( stdin, NULL, _IONBF, 0 );
  57:  
  58:     // redirect unbuffered STDERR to the console
  59:     lStdHandle = (long)GetStdHandle(STD_ERROR_HANDLE);
  60:     hConHandle = _open_osfhandle(lStdHandle, _O_TEXT);
  61:  
  62:     fp = _fdopen( hConHandle, "w" );
  63:  
  64:     *stderr = *fp;
  65:  
  66:     setvbuf( stderr, NULL, _IONBF, 0 );
  67:  
  68:     // make cout, wcout, cin, wcin, wcerr, cerr, wclog and clog 
  69:     // point to console as well
  70:     ios::sync_with_stdio();
  71: }

덧글

댓글 입력 영역


Yes24위대한게임의탄생3

위대한 게임의 탄생 3
예스24 | 애드온2