1

私はいくつかのネイティブWindowsコンソール機能をいじっていますが、使いやすさではないにしても、その速度に感銘を受けています。

とにかく、私は次のコードがいくつかの興味深い文字を生成することを長い間知っていました

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++;
}

ネイティブ関数でこれらの文字を書くための比較的便利な方法を知っている人はいますか?

ちなみに、私はWindows7x64でVisualStudio2010を使用しています。

4

2 に答える 2

1

Unicode 文字を使用している FillConsoleOutputCharacterW の代わりに FillConsoleOutputCharacterA を使用してみてください。正しく取得するには少し知識が必要です。

編集FillConsoleOutputCharacterA を使用してみましたが、最初のケースと同等の出力が得られます。

于 2012-06-04T00:13:10.693 に答える
0

FillConsoleOutputCharacterAcout 関数が行うのと同じ文字セットを書き込む必要があります。これらの文字は、コンソールの現在のコード ページによって決まります。

FillConsoleOutputCharacterW を使用すると、同じ文字 (およびコンソール フォントに含まれる追加の文字) をすべて生成できますが、これらの文字には 8 ビットではなくUnicode (16 ビット) コードを使用する必要があります。 cout で使用されるコード。

Windows は、0 ~ 1,112,063 を使用する適切な Unicode ではなく、文字が 16 ビット (0 ~ 65536) に制限された古いバージョンの Unicode を内部的に使用することに注意してください (ただし、これらのコードのほとんどは割り当てられていません)。コンソールの Unicode 文字セットは、基本的な多言語プレーンである Unicode のプレーン 0 に対応していると思います。

制御文字または現在のフォントに含まれていない文字を記述すると、疑問符が表示されます。

于 2012-06-04T00:19:13.393 に答える