es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Utilice MFC CRichEditCtrl para mostrar un código QR con el tamaño adecuado.

Estoy intentando mostrar un código QR en un CRichEditCtrl de MFC, pero el tamaño resultante es demasiado pequeño.

Este es el código que estoy usando para insertar el QR en el control de edición:

SETTEXTEX TextInfo = {0};
TextInfo.flags = ST_SELECTION;
TextInfo.codepage = CP_UTF8;
LRESULT res = ::SendMessage(m_editQR.m_hWnd, EM_SETTEXTEX, (WPARAM)&TextInfo, (LPARAM)buffer);

El parámetro “buffer” es una matriz de char; su contenido se lee de un archivo UTF-8 que contiene la cadena de código QR. Este archivo se muestra de la siguiente manera en Notepad ++:

QR como se muestra en Notepad ++

El código QR también se muestra correctamente si imprimo el mismo búfer en una aplicación de consola que hice para pruebas.

Sin embargo, el código QR se muestra en mi aplicación de prueba MFC de la siguiente manera:

Tiny QR shown in MFC rich edit ctrl

Parece un problema con el tamaño de la fuente utilizada para renderizar el código QR (estoy usando la predeterminada para el control de Rich Edit). Entonces intenté cambiar la fuente y su tamaño.

Este es el código que estoy usando para configurar el formato de caracteres:

CHARFORMAT selCharformat;
m_editQR.GetSelectionCharFormat(selCharformat);
selCharformat.cbSize = sizeof(CHARFORMAT);
selCharformat.dwMask = CFM_FACE | CFM_SIZE | CFM_CHARSET;
selCharformat.yHeight = 20*8;
selCharformat.bCharSet = DEFAULT_CHARSET;
selCharformat.bPitchAndFamily = FIXED_PITCH | FF_DONTCARE;
lstrcpy(selCharformat.szFaceName, _T("Console")); 
BOOL bRes = m_editQR.SetSelectionCharFormat(selCharformat);

Pero entonces el código QR está mal, como este:

QR code in edit control after changing its char format

Supongo que hay un problema con la configuración de mi Rich Edit ctrl, pero no puedo encontrar la configuración correcta (no tengo mucha experiencia con MFC).

¿Podrían ayudarme?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está en la fuente y el tamaño que se utiliza para renderizar el código QR en el CRichEditCtrl.

    Para solucionar este problema, intenta establecer la fuente y el tamaño del CRichEditCtrl en una fuente de ancho fijo como Courier y aumenta el tamaño para que coincida con el tamaño del código QR.

    Puedes probar el siguiente código para establecer la fuente y el tamaño:

    “`c ++
    CHARFORMAT cf;
    cf.dwMask = CFM_FACE | CFM_SIZE | CFM_CHARSET;
    cf.cbSize = sizeof (CHARFORMAT);
    cf.yHeight = <tamaño del=”” código=”” qr=””>;
    cf.bPitchAndFamily = FF_MODERN;
    lstrcpy (cf.szFaceName, _T (“Courier”));

    m_editQR.SetDefaultCharFormat(cf); // Establece el formato de caracteres predeterminado para el control de edición
    m_editQR.SetSel (0, -1); // Selecciona todo el texto en el control
    m_editQR.SetSelectionCharFormat(cf); // Aplica el formato de caracteres al texto seleccionado
    “`

    Asegúrate de reemplazar <tamaño del="" código="" qr=""> con el tamaño adecuado para tu código QR. También puedes probar a experimentar con diferentes tamaños y tipos de fuentes para ver cuál funciona mejor para tu situación.

    Además, asegúrate de que las dimensiones del CRichEditCtrl estén establecidas correctamente para acomodar el tamaño del código QR. Puede que necesites ajustar el tamaño del control para mostrar el código correctamente.

    ¡Espero que esto ayude!</tamaño></tamaño>

Comments are closed.