c++ - Win32 API调用TextOut()出现乱码
PHP中文网
PHP中文网 2017-04-17 14:26:34
0
1
727

问题出现在WM_PAINT里,具体代码如下:

        case WM_PAINT:
            hdc = BeginPaint(hwnd, &ps);
            SelectObject(hdc, GetStockObject(BLACK_PEN));
            SelectObject(hdc, GetStockObject(WHITE_BRUSH));
            //BLOCK是宏定义的常量
            Rectangle(hdc, 0, 0, 25 * BLOCK, 50 * BLOCK);
            TextOut(hdc, 26 * BLOCK, 5 * BLOCK, text1, sizeof(text1));
            TextOut(hdc, 26 * BLOCK, 15 * BLOCK, text2, sizeof(text2));
            EndPaint(hwnd, &ps);
            break;

其中

    const char *text1 = _T("下一个:");
    const char *text2 = _T("得分:");

运行结果如下

原本text1后面也出现上图中的乱码,我把TextOut()最后一个参数的值+1再运行就没了,可是text2用同样方法就不行,把sizeof改为lstrlen就不会出现乱码了,求解其中原因.

PHP中文网
PHP中文网

认证0级讲师

全員に返信(1)
黄舟

TextOut 最後のパラメータは文字列の長さです。定義したマクロ定数は _T で追加されます。コンパイルに UNICODE 文字セットを選択した場合、対応する文字列の長さは「いくつ」である必要があります。 UNICODE 文字」を記述するため、正しく計算するには lstrlen である必要があります。

sizeof を使用してバイト数を計算できます。UNICODE 文字の長さは 1 バイトではないため、sizeof を使用して計算される値は、UNICODE の実際の文字数よりも大きくなります。 🎜> このエラーが発生しました。文字列の長さにより、文字列の後のデータが文字として表示されます。これが文字化けしたコードです。 TextOut

別: コンパイルに

文字セットを指定せず、UNICODE に従ってエンコードすると、表示される内容は正しいかもしれませんが、ANSI の計算は次のようになります。以下にsizeofもありますが、この

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート