case 1.
#ifdef _DEBUG // 디버그 모드일 경우
#ifdef UNICODE // 유니코드일 경우
#pragma comment(linker, "/entry:wWinMainCRTStartup /subsystem:console")
#else // 멀티바이트일 경우
#pragma comment(linker, "/entry:WinMainCRTStartup /subsystem:console")
#endif
#endif
case 2.
AllocConsole() 함수를 이용해서 콘솔창을 띄울 수 있습니다.
설명
프로세스는 하나의 콘솔에만 연결할 수 있으므로 호출 프로세스에 콘솔이 이미 있는 경우 AllocConsole 함수가 실패합니다. 프로세스에서 FreeConsole 함수를 사용하여 현재 콘솔에서 분리한 다음, AllocConsole 을 호출하여 새 콘솔을 만들거나 AttachConsole을 호출하여 다른 콘솔에 연결할 수 있습니다.
호출 프로세스에서 자식 프로세스를 만드는 경우 자식은 새 콘솔을 상속합니다.
AllocConsole 은 새 콘솔에 대한 표준 입력, 표준 출력 및 표준 오류 핸들을 초기화합니다. 표준 입력 핸들은 콘솔의 입력 버퍼에 대한 핸들이고, 표준 출력 및 표준 오류 핸들은 콘솔의 화면 버퍼에 대한 핸들입니다. 이러한 핸들을 검색하려면 GetStdHandle 함수를 사용합니다.
이 함수는 주로 GUI(그래픽 사용자 인터페이스) 애플리케이션에서 콘솔 창을 만드는 데 사용됩니다. GUI 애플리케이션은 콘솔 없이 초기화됩니다. 콘솔 애플리케이션은 분리된 프로세스로 만들어지는 경우를 제외하고는 콘솔을 사용하여 초기화됩니다(DETACHED_PROCESS 플래그를 사용하여 CreateProcess 함수 호출).
void CMFCApplication1Dlg::OnBnClickedButton1()
{
// 콘솔창 생성.
if (AllocConsole()) {
// 콘솔창 타이틀 설정.
SetConsoleTitle(L"open console mode");
// 콘솔창 X버튼 비활성화.
::EnableMenuItem(::GetSystemMenu(::GetConsoleWindow(), FALSE), SC_CLOSE, MF_DISABLED);
::DrawMenuBar(::GetConsoleWindow());
//_cprintf_s("+-+-+-+-+-+-+-+-+-+-+-+-+-+-\n");
//_cprintf(" Open Console\n");
//_cprintf("+-+-+-+-+-+-+-+-+-+-+-+-+-+-\n");
Print_console("+-+-+-+-+-+-+-+-+-+-+-+-+-+-\n");
Print_console(" Open Console\n");
Print_console("+-+-+-+-+-+-+-+-+-+-+-+-+-+-\n");
Print_console("\n\n");
for (int i = 1; i < 5; ++i)
Print_console("OK!! \n", i);
}
else {
// 콘솔창 종료.
FreeConsole();
}
}
void CMFCApplication1Dlg::Print_console(char *p_strMsg, int a_num)
{
// 표준 출력 핸들 얻음
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
char strMsg[200];
sprintf(strMsg, "%d %s", a_num, p_strMsg);
// 출력
WriteFile(hConsole, strMsg, strlen(strMsg), NULL, NULL);
}
'MFC > MFC 코드기록' 카테고리의 다른 글
사용자 메시지 전달한 데이터 처리 (0) | 2024.07.09 |
---|---|
[MFC] 다이얼로그 창 크기 조절 (0) | 2024.01.22 |
실행 파일이 있는 현재 경로 구하는 코드 (0) | 2024.01.03 |
[MFC] SHGetSpecialFolderPath() 윈도우 다양한 특수 경로 구하기 (0) | 2023.12.29 |
MFC 컨트롤 색 변경 (0) | 2023.12.26 |