He buscado por algunos días, ahora a encontrar una posibilidad para mostrar texto en mi GDI+ de la aplicación.

He intentado utilizar la DrawString() función de GDI+, pero la referencia en MSDN no funciona ya que no coincide con la lista de parámetros. Estoy utilizando Visual C++ 2010 Express.

He cambiado el MSDN ejemplo para que se compile, como este:

LinearGradientBrush* myBrush = new LinearGradientBrush(Rect(0,0,width,height),Color::Red, Color::Yellow, LinearGradientMode::LinearGradientModeHorizontal);
Font* myFont = new Font(hdc);
RectF rect = RectF(10,10,100,100);
graphics.DrawString(TEXT("Look at this text!"),100, myFont,rect,&StringFormat(0,0), myBrush);

También he probado otras dos funciones:

TextOut(hdc,10,10,TEXT("Text"),6);
DrawText(hdc,TEXT("Text"),0,LPRECT(0),0);

Ninguno de ellos muestra un texto en la pantalla. Dibujo de líneas, elipses, etc. funciona sin problemas.

¿Por qué no en el texto anterior-dibujo de la rutina de trabajo? ¿Alguien puede proporcionar un ejemplo de trabajo?

¿Por qué está usted diciendo que la cadena Look at this text! es de 100 caracteres?
He cambiado a 18, pero no funciona bien.
Yo tenía una compilación de problema y ahora, al menos, la función textout obras. Pero drawtext no funciona.
Donde están recibiendo graphics? También ¿por qué va a asignar myBrush por new (lo pregunto porque usted podría tener una buena razón, yo no estoy snob)?

OriginalEl autor Toast | 2011-09-04

2 Comentarios

  1. 15

    Usted está haciendo bastante clásico error de no verificar el valor de retorno de Gráficos::DrawString(), te dirá que lo has hecho mal. InvalidParameter es bastante probable que aquí. También es bastante claro en qué contexto se ejecuta este código, que mejor estar dentro del controlador de mensaje WM_PAINT o nunca vas a ver la salida. Tampoco hay evidencia de limpieza de código, como se ha dado el código de fugas de objetos mal.

    Vamos a trabajar a partir de un ejemplo completo, a partir de la repetitivo código generado por el Proyecto Win32 plantilla. Sé que tienes algo de esto ya está trabajando, pero podría ser interesante para las personas que lean esta respuesta. Empezar dando el necesario #incluye:

    #include <assert.h>
    #include <gdiplus.h>
    using namespace Gdiplus;
    #pragma comment (lib, "gdiplus.lib")

    Busque la función WinMain, necesitamos inicializar GDI+:

    //TODO: Place code here.
    GdiplusStartupInput gdiplusStartupInput;
    ULONG_PTR           gdiplusToken;
    Status st = GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL);
    assert(st == Ok);
    if (st != Ok) return FALSE;

    y al final de la función después de que el bucle de mensajes:

    GdiplusShutdown(gdiplusToken);
    return (int) msg.wParam;

    Ahora busque el procedimiento de ventana (WndProc) y hacer que el mensaje WM_PAINT caso similar a este:

    case WM_PAINT: {
        hdc = BeginPaint(hWnd, &ps);
        Graphics gr(hdc);
        Font font(&FontFamily(L"Arial"), 12);
        LinearGradientBrush brush(Rect(0,0,100,100), Color::Red, Color::Yellow, LinearGradientModeHorizontal);
        Status st = gr.DrawString(L"Look at this text!", -1, &font, PointF(0, 0), &brush);
        assert(st == Ok);
        EndPaint(hWnd, &ps);
    } break;

    Que produce esto:

    Dibujo de Texto con GDI+

    Modificar este código como mejor le parezca, el afirma que le mantendrá alejado de los problemas.

    OriginalEl autor Hans Passant

Dejar respuesta

Please enter your comment!
Please enter your name here