이어지는 글
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
형식 사양 구문: 'printf' 및 'wprintf' 함수
Microsoft C 런타임 'printf' 및 'wprintf' 함수의 형식 지정자 구문을 설명합니다.
learn.microsoft.com
'C++ > 공부' 카테고리의 다른 글
[C++] 유니코드 특수문자 출력하기 (0) | 2025.02.11 |
---|---|
[C++/Console Engine] WinAPI로 커스텀 콘솔 엔진 구현하기(6) DLL 사용하기 (0) | 2025.01.23 |
[C++/Console Engine] WinAPI로 커스텀 콘솔 엔진 구현하기(5) 실행 프로젝트.exe 생성 후 설정 (0) | 2025.01.20 |
[C++/Console Engine] WinAPI로 커스텀 콘솔 엔진 구현하기(4) Log (0) | 2025.01.20 |
[C++/Console Engine] WinAPI로 커스텀 콘솔 엔진 구현하기(3) Key 입력 정의 가져오기, 메모리 누수 검사 기능 추가 (0) | 2025.01.17 |