본문 바로가기
C++/공부

[C++/Console Engine] WinAPI로 커스텀 콘솔 엔진 구현하기(7) wchar_t Log

by 왹져박사 2025. 2. 3.

이어지는 글

2025.01.20 - [C++/공부] - [C++/Console Engine] WinAPI로 커스텀 콘솔 엔진 구현하기(4) Log

 

[C++/Console Engine] WinAPI로 커스텀 콘솔 엔진 구현하기(4) Log

이전 글!2025.01.17 - [C++/공부] - [C++/Console Engine] WinAPI로 커스텀 콘솔 엔진 구현하기(3) Key 입력 정의 가져오기, 메모리 누수 검사 기능 추가 [C++/Console Engine] WinAPI로 커스텀 콘솔 엔진 구현하기(3) Key

narmhye.tistory.com

 

 

위 글에서 맛보기만 한 wide character로 Log함수를 다시 구현해 보았다. 

 

 

처음에는 기존의 Log 기반의 c++ 출력으로 구현해 봤다. 

std::wcout << ESC << (L"%dm", VT_FOREGROUND_YELLOW) << buffer;

 

 

그러던 도중, C++과 C로 모두 가능하다면 C로 구현하는 것이 성능이 좋다는 말이 기억나서 C스타일 출력으로 변경했다. 

wprintf(ESC L"%dm%s", VT_FOREGROUND_YELLOW, buffer);

 

 

마지막으로, 가독성이 더 좋게 만들고 싶어

다음과 같이 switch문에서 출력하는 것이 아니라 color만 할당해 주는 것으로 변경하였다. 

template<typename... T>
void Log(ELogCategory category, const wchar_t* logTemp, T&&... args)
{
	//출력 모드를 가상 터미널 시퀀스 핸들 모드로 변경
	HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
	DWORD dwMode = 0;
	dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;

	//전달받은 문자열 주소값을 버퍼에 저장
	wchar_t buffer[1024];
	swprintf(buffer, sizeof(buffer), logTemp, args ...);

	int color = VT_FOREGROUND_WHITE;
	//상세 로그 수준에 따른 출력 변화
	//색 변경하기, ESC: \x1b[
	switch (category)
	{
	case(ELogCategory::Logging):
		color = VT_FOREGROUND_WHITE_BRIGHT;
		break;
	case(ELogCategory::Warning):
		color = VT_FOREGROUND_YELLOW;
		//wprintf(ESC L"%dm%s", VT_FOREGROUND_YELLOW, buffer);
		//std::wcout << ESC << (L"%dm", VT_FOREGROUND_YELLOW) << buffer;
		break;
	case(ELogCategory::Error):
		color = VT_FOREGROUND_RED;
		break;
	}
	wprintf(ESC L"%dm%s", color, buffer);
}

 

다음은, wchar로 파일을 읽어 출력하는 기능을 만들 예정이다. 

 

 

https://learn.microsoft.com/ko-kr/cpp/c-runtime-library/unicode-the-wide-character-set?view=msvc-170

 

유니코드: 와이드 문자 집합

Microsoft C 런타임의 유니코드 와이드 문자 집합을 소개합니다.

learn.microsoft.com

 

https://learn.microsoft.com/ko-kr/cpp/c-runtime-library/format-specification-syntax-printf-and-wprintf-functions?view=msvc-170

 

형식 사양 구문: 'printf' 및 'wprintf' 함수

Microsoft C 런타임 'printf' 및 'wprintf' 함수의 형식 지정자 구문을 설명합니다.

learn.microsoft.com