2013-06-17 2 views
0

좋아요, 여기 제 주요 목표는 : 전체 화면, 비 윈도우 콘솔 프로그램 (DOS 운영 체제와 같은 모양입니다)을 열어보십시오. ALLEGRO_USE_CONSOLE과 그 모든 것들을 정의했습니다. 여기 내 전체 코드는보고있다 :Allegro 5 & C++ - 전체 화면 콘솔을 만드시겠습니까?

#define _WIN32_WINNT 0x0500 
#define ALLEGRO_USE_CONSOLE 

#include <iostream> 
#include <windows.h> 
#include <stdio.h> 
#include <string> 
#include <time.h> 
#include "include/allegro.h" 

using namespace std; 

void SetColor(unsigned short hColor) { 
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), hColor); 
} 

void Dots() { 
    int i = 1; 
    while (i <= 3) { 
     cout << "."; 
     Sleep(750); 
     i++; 
    } 
} 

void ClearConsoleScreen() { 
    HANDLE      hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); 
    CONSOLE_SCREEN_BUFFER_INFO csbi; 
    DWORD      count; 
    DWORD      cellCount; 
    COORD      homeCoords = { 0, 0 }; 

    if (hStdOut == INVALID_HANDLE_VALUE) return; 

    /* Get the number of cells in the current buffer */ 
    if (!GetConsoleScreenBufferInfo(hStdOut, &csbi)) return; 
    cellCount = csbi.dwSize.X *csbi.dwSize.Y; 

    /* Fill the entire buffer with spaces */ 
    if (!FillConsoleOutputCharacter(
      hStdOut, 
      (TCHAR) ' ', 
      cellCount, 
      homeCoords, 
      &count 
     ) 
    ) return; 

    /* Fill the entire buffer with the current colors and attributes */ 
    if (!FillConsoleOutputAttribute(
     hStdOut, 
     csbi.wAttributes, 
     cellCount, 
     homeCoords, 
     &count 
     ) 
    ) return; 

    /* Move the cursor home */ 
    SetConsoleCursorPosition(hStdOut, homeCoords); 
} 

int main() { 
    ALLEGRO_DISPLAY  *display = NULL; 
    ALLEGRO_DISPLAY_MODE disp_data; 

    al_init(); // I'm not checking the return value for simplicity. 

    al_get_display_mode(al_get_num_display_modes() - 1, &disp_data); 

    al_set_new_display_flags(ALLEGRO_FULLSCREEN); 
    display = al_create_display(disp_data.width, disp_data.height); 

    al_rest(3); 
    al_destroy_display(display); 
} 

그래서 정확히 내가 (& 경계선이 아닌 윈도 윙) 콘솔 전체 화면을 만들 수 있도록 할 AND cout 등을 사용할 수 있어야 무엇? 나는 Win7도 실행 중이다.

+0

네 코드에서 불필요한 헤더를 많이해야합니까 위 코드는 작동하지만이 코드를 작동 시키려면 사용할 수 있습니다. – hCon

답변

0

ALLEGRO_USE_CONSOLE은 콘솔 창과 함께 프로그램을 실행할 계획임을 Allegro에게 알립니다. 링커 옵션에서 여전히 "콘솔"로 서브 시스템을 설정해야합니다. Allegro는 콘솔 창을 만드는 것과 아무런 관련이 없습니다.

이제 Windows에서 콘솔을 전체 화면으로 만들려면 SetConsoleDisplayMode이지만 Allegro와는 아무런 관련이 없습니다. Direct3D 또는 OpenGL 컨텍스트를 사용할 수 없으므로 Allegro의 드로잉 API를 사용할 수 없습니다.

편집 : allegro_native_dialog가 존재하는 이유의 일부입니다 매우 특정 플랫폼 인 콘솔을 사용하여

... 위의 함수가 더 이상 창문의 현대 버전에서 작동 보인다. 그러나 전체 화면 모드로 전환하는 방법은 없습니다.

크로스 플랫폼 기능을 원한다면 Allegro의 드로잉 API를 사용하여 에뮬레이트 된 콘솔을 만들 수도 있지만 큰 사업이 될 것입니다. 그것은 올바른 데이터가 당신이 넣어 데이터에 나오는 것만 보이는 정확히 어떻게 상관 없어 콘솔 응용 프로그램을 원하는

일반적으로

명.

+0

기본적으로 Windows 7에서 콘솔을 전체 화면으로 만드는 간단한 방법은 없습니다. 가능한 유일한 방법은 OpenGL 또는 Allegro 또는 SDL에서 콘솔을 시뮬레이트하는 것입니다. 그거 끔찍해. 알았어, 정보 주셔서 감사. 나는 지금 보통의 콘솔 창을 고수 할 것 같다. – hCon