2012-06-03 2 views
1

네이티브 Windows 콘솔 기능 중 일부를 사용하고있어 사용하기 쉽지 않다면 속도에 깊은 인상을받습니다.FillConsoleOutputCharacter/WriteConsoleOutput 및 특수 문자

어쨌든, 나는 긴 다음 코드

for(int i = 0; i < 256; i++) 
{ 
    cout << char(i) << endl; 
} 

그러나 몇 가지 흥미로운 문자를 생산하는 것을 알고, 나는 (많은 사람들이 단순히 물음표로 표시) FillConsoleOutputCharacter 또는 WriteConsoleOutput 그 모든 문자를 생산하는 얻을 수 없습니다.

COORD spot = {0,0}; 
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); 
DWORD Written; 

for(int i = 0; i < 256; i++) 
{ 
    FillConsoleOutputAttribute(hOut, 7, 1, spot, &Written); 
    FillConsoleOutputCharacterW(hOut, char(i), 1, spot, &Written); 

    spot.Y++; 
} 

사람이 기본 기능으로 해당 문자를 작성하는 비교적 편리한 방법을 알고 있습니까 : 여기

내가 사용하고있는 코드의 예입니다?

그런데 저는 Windows 7 x64에서 Visual Studio 2010을 사용하고 있습니다.

답변

0

FillConsoleOutputCharacterA은 cout 기능과 동일한 문자 집합을 작성해야합니다. 이 문자는 콘솔의 현재 코드 페이지에 의해 결정됩니다.

FillConsoleOutputCharacterW를 사용하면 콘솔 글꼴에 포함될 수있는 추가 문자는 물론 모든 동일한 문자를 생성 할 수 있지만 이러한 문자에는 Unicode (16 비트) 코드를 사용해야합니다. cout과 함께 사용되는 8 비트 코드.

Windows는 내부적으로 0-1,112,063을 사용하는 유니 코드 적절한 대신 16 비트 (0-65536)로 제한된 문자로 유니 코드의 구 버전을 사용합니다 (대부분의 코드는 할당되지 않은 채로 있음). 콘솔의 유니 코드 문자 세트는 기본 다국어 평면 인 유니 코드의 평면 0에 해당합니다.

제어 문자 또는 현재 글꼴에 포함되지 않은 문자를 쓸 때 물음표가 나타납니다.

+0

고맙습니다. FillConsoleOutputCharacterA 및 WriteConsoleOutputA는 완벽하게 작동합니다. Windows 콘솔에서 유니 코드를 사용하는 것이 좋을까요? 필자가 (제한적으로는) 이해할 수있는 것은 콘솔에서의 출력은 256 자로 제한된다는 것입니다 (코드 페이지에 정의되어 있음). 관계없이,이 상세하고, 신속하고 유용한 답장을 보내 주셔서 감사합니다! – Kvothe

+0

유니 코드를 사용하면 코드 페이지가 생략되므로 여러 가지 문자를 사용할 수 있습니다 (256 자 제한 없음). 단, 콘솔의 글꼴에 포함 된 문자로 제한됩니다. 기본 글꼴에 원하는 문자가 포함되어 있지 않으면 다른 글꼴을 선택할 수 있습니다. –

1

올바르게 얻으려면 약간의 지식이 필요한 유니 코드 문자를 사용하는 FillConsoleOutputCharacterW 대신 FillConsoleOutputCharacterA를 사용해보십시오.

편집 나는 FillConsoleOutputCharacterA를 사용해 보았는데 첫 번째 경우와 동일한 결과를 보여줍니다.