7

文字列を出力し、作成した Window に表示する適切な方法が必要です。textout() 関数を使用していましたが、ウィンドウをペイントするだけなので、ウィンドウを最小化して元に戻すと、ウィンドウに表示されていたデータが消えます。また、表示するデータが Window のサイズを超える場合は、Window のサイズ分のデータのみを表示し、それ以外のデータは切り捨てます。ウィンドウにデータを出力する他の方法はありますか?

4

2 に答える 2

13

StaticまたはEditコントロール (ラベルとテキスト ボックス) をウィンドウに配置して、データを表示できます。

中に次のいずれかを呼び出しWM_CREATEます。

HWND hWndExample = CreateWindow("STATIC", "Text Goes Here", WS_VISIBLE | WS_CHILD | SS_LEFT, 10,10,100,100, hWnd, NULL, hInstance, NULL);

または

HWND hWndExample = CreateWindow("EDIT", "Text Goes Here", WS_VISIBLE | WS_CHILD | ES_LEFT, 10,10,100,100, hWnd, NULL, hInstance, NULL);

を使用するEditと、ユーザーはテキストをスクロールしたり、コピーして貼り付けたりすることもできます。

どちらの場合も、次を使用してテキストを更新できますSetWindowText()

SetWindowText(hWndExample, TEXT("Control string"));

( Daboyzuk 提供)

于 2013-03-15T13:55:53.910 に答える
6

TextOut は完全に正常に動作するはずです。これが WM_PAINT で行われる場合は、毎回描画する必要があります。(最小化とサイズ変更を含む)

LRESULT CALLBACK MyWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
        case WM_PAINT:
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);

            TextOut(hdc, 10, 10, TEXT("Text Out String"),strlen("Text Out String"));

            EndPaint(hWnd, &ps);
            ReleaseDC(hWnd, hdc);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

DrawText にも興味があるかもしれません

LRESULT CALLBACK MyWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    switch(message)
    {
        case WM_PAINT:
            PAINTSTRUCT ps;
            HDC hdc = BeginPaint(hWnd, &ps);

            RECT rec;
            //       SetRect(rect, x ,y ,width, height)
            SetRect(&rec,10,10,100,100);
            //       DrawText(HDC, text, text length, drawing area, parameters "DT_XXX")
            DrawText(hdc, TEXT("Text Out String"),strlen("Text Out String"), &rec, DT_TOP|DT_LEFT);

            EndPaint(hWnd, &ps);
            ReleaseDC(hWnd, hdc);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

指定された長方形のウィンドウにテキストを描画します。


テキストを描画すると、指定された四角形の内側でワード ラップが行われます。ウィンドウ全体を描画領域として使用する場合は、代わりに
使用できますGetClientRect(hWnd, &rec);SetRect(&rec,10,10,100,100);

于 2013-03-15T11:43:55.363 に答える