7

我想要一种正确的方式来输出字符串并将其显示在创建的窗口上。我一直在使用 textout() 函数,但由于它只绘制窗口,一旦窗口最小化并恢复回来,窗口上显示的数据就会消失。同样当要显示的数据超过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);

如果您使用 an ,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 回答