더북(TheBook)

5.1.5 프로그램 구동 시 빈 창 띄우지 않기

Photoshop과 같은 일반적인 상용 프로그램들은 프로그램이 처음 실행될 때 빈 창이 화면에 나타나지 않는다. 그러나 MFC 응용 프로그램 마법사가 만들어준 응용 프로그램은 실행될 때마다 항상 비어 있는 차일드 프레임 윈도우가 화면에 나타난다. 이러한 빈 창이 영상 처리 알고리즘 구현에는 큰 영향을 끼치지는 않으나 불필요해 보인다. 간단한 코드를 추가하여 초기 빈 창이 나타나지 않도록 해보자.

ImageTool 프로그램 시작 시 빈 창을 띄우는 코드는 CImageToolApp 클래스의 InitInstance 함수에 작성되어 있다. 그러므로 이 부분의 코드를 수정하여 빈 창이 나타나는 것을 방지할 수 있다. InitInstance 함수에서 수정할 사항을 소스 5-4에 나타내었다.

소스 5-4 응용 프로그램 시작 시 빈 창 띄우지 않기(ImageTool.cpp)
BOOL CImageToolApp::InitInstance()
{
    …
    // 표준 셸 명령, DDE, 파일 열기에 대한 명령줄을 구문 분석합니다.
    CCommandLineInfo cmdInfo;
    ParseCommandLine(cmdInfo);

    // 프로그램 시작 시 빈 창을 띄우지 않습니다.
    if (cmdInfo.m_nShellCommand == CCommandLineInfo::FileNew)
        cmdInfo.m_nShellCommand = CCommandLineInfo::FileNothing;
…
}

소스 5-4에서 아래쪽 if 문이 빈 창을 띄우지 않게 만들기 위해 새로 추가한 내용이다. 주석을 제외한 두 줄의 코드를 추가함으로써 빈 창이 생성되는 것을 방지할 수 있다. 여기서 사용되는 CCommandLineInfo라는 클래스는 응용 프로그램 시작 시 명령 행 인자command line argument의 정보 해석을 돕는 클래스이다. 명령 행 인자란 과거 도스 시절 또는 리눅스 같은 콘솔 환경에서 프로그램을 실행할 때, 프로그램 이름 뒤에 추가로 입력하는 문자열을 의미한다. Windows의 시작 메뉴에서 보조 프로그램의 명령 프롬프트를 실행시키면 명령 프롬프트 창(도스창)이 나타나는데, 여기에 다음과 같은 형태로 프로그램 이름과 BMP 파일 이름을 연속하여 입력하면 응용 프로그램 실행과 동시에 해당 BMP 파일을 불러오게 된다.

D:\source\ch05\ImageTool>ImageTool.exe lenna.bmp

MFC 응용 프로그램은 기본적으로 프로그램이 시작될 때, 명령 행 인자를 확인하여 아무런 파일 이름이 발견되지 않으면 빈 창을 만들게 설정되어 있다. 이 설정이 cmdInfo.m_nShellCommandCCommandLineInfo::FileNew라는 값으로 기록되어 있기 때문에, 이를 조사하여 값을 CCommandLineInfo::FileNothing 형태로 바꿔주면 빈 창이 생성되지 않는다.

이제 다시 ImageTool 프로그램을 빌드하여 실행해보자. 그리고 화면에 빈 창이 나타나지 않는지 확인하기 바란다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.