2012-08-28 3 views
1

구성 파일에 따라 콘솔 응용 프로그램이나 Window 응용 프로그램이 될 수있는 C++ 프로그램을 작성하고 싶습니다. GUI의 경우 WxWidget을 사용하고 있습니다. Windows와 Linux (Buntu)에서는 어떻게해야합니까?C++ 콘솔 창 프로그램 작성 방법

누군가 간단한 예를 제공 할 수 있습니까?

+2

나는 모든 C++ 프로그램이 기본적으로 콘솔을 통해 실행되어야한다는 혼란스러워. 뭘 물어 보는 거냐? – Rapptz

+0

콘솔 앱은 main() 함수가있는 프로그램을 의미하며, Win-App은 어떤 주요 함수도없는 GUI와 WxWidget 프로그램처럼 윈도우 폼을 가져 오는 프로그램을 의미합니다. – Hesam

+0

'main()'대신'WinMain()'메쏘드로 전체 프로그램을 간단하게 작성할 수없는 이유는 무엇입니까? 이 시점에서 GUI를 그리지 않으려면 콘솔을 업데이트하지 마십시오. 그렇지 않으면 GUI를 그리고 콘솔을 숨 깁니다. – RageD

답변

1

컴파일 단계에서 이렇게하려면 조건부 컴파일을 사용하는 것이 간단합니다.

구성 파일에는 원하는 전처리 프로그램이 들어 있습니다. 예를 들어

#define GUI 

또는

#define CONSOLE 

그런 다음 당신은 당신이 다른

#include "gui_or_console.h" 

마지막으로 컴파일 할 각 파일에 설정 파일을 포함, 당신은 컴파일러에게 조건부 컴파일을 사용하는 처리 할 코드

#idfef GUI 

    // some GUI code 

#endif 

#ifdef CONSOLE 

// some CONSOLE code 

#endif 
1

런타임시이를 수행하는 일반적인 방법은 프로그램을 컴파일하여 Windows 응용 프로그램으로 연결하는 것입니다. 런타임에는 구성을 읽습니다. GUI 용으로 설정된 경우, 창을 작성하여 사용할 수 있습니다. 콘솔 모드로 설정되면 콘솔 창을 만들고 stdout/stdin/sterr 스트림을 첨부 할 수 있습니다.

이렇게 실행되는 프로그램을 작성했습니다. 전체 UI는 순수 가상 인터페이스 뒤에 추상화되어 있으며 구체적인 구현은 콘솔 구현과 GUI 구현을 제공합니다. 런타임에는 올바른 유형을 인스턴스화합니다. 생성자는 올바른 유형의 창을 만듭니다. 그러면 주 프로그램이 가상 Run 메서드를 호출합니다. 콘솔 구현은 main과 동등한 것을 호출합니다. GUI 구현은 이벤트 루프를 실행합니다.

정말 어려운 부분은 기존 콘솔 창을 시작하는 경우 (자체 콘솔 창을 시작하지 않고) 기존 콘솔 창에 연결하는 것입니다. Devstudio는 devstudio.com 및 devstudio.exe를 사용하여이 작업을 수행하지만 다소 복잡합니다.