C/Visual C - Problemas la etiqueta de los botones en VC++

 
Vista:

Problemas la etiqueta de los botones en VC++

Publicado por Jordi (15 intervenciones) el 18/10/2001 18:31:00
Hola, ¿que puedo hacer para que al aumentar el tamaño de la fuente del texto de un boton el texto permanezca centrado? Antes de cambiar la fuente esta centrado, pero despues no.

Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Centrado de texto en un botón al cambiar el tamaño de la fuente

Publicado por Alejandro (913 intervenciones) el 17/10/2024 00:24:31
Jordi, cuando cambias el tamaño de la fuente de un botón en una aplicación de Windows (usando MFC o WinAPI), el texto puede descentrarse debido a que el botón no ajusta automáticamente su tamaño o la posición del texto. Aquí hay algunas estrategias que puedes seguir para asegurarte de que el texto permanezca centrado:

1. Ajustar el tamaño del botón



Asegúrate de que el tamaño del botón se ajuste al nuevo tamaño de la fuente. Puedes hacerlo manualmente o programáticamente. Aquí hay un ejemplo de cómo hacerlo en MFC:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void CMyDialog::OnInitDialog() {
    CDialogEx::OnInitDialog();
 
    // Cambiar la fuente del botón
    CFont* pFont = new CFont();
    pFont->CreatePointFont(120, _T("Arial")); // 120 es el tamaño de la fuente
    GetDlgItem(IDC_MY_BUTTON)->SetFont(pFont);
 
    // Ajustar el tamaño del botón
    CRect rect;
    GetDlgItem(IDC_MY_BUTTON)->GetWindowRect(&rect);
    ScreenToClient(&rect);
    rect.InflateRect(10, 10); // Ajusta el tamaño según sea necesario
    GetDlgItem(IDC_MY_BUTTON)->MoveWindow(&rect);
 
    // Centrar el texto
    GetDlgItem(IDC_MY_BUTTON)->Invalidate(); // Redibuja el botón
}

2. Usar `DrawText` para centrar el texto



Si estás utilizando un botón personalizado, puedes manejar el dibujo del texto tú mismo. Esto te permite centrar el texto independientemente del tamaño de la fuente. Aquí hay un ejemplo de cómo hacerlo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void CMyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItem) {
    CDC dc;
    dc.Attach(lpDrawItem->hDC);
 
    // Obtener el rectángulo del botón
    CRect rect = lpDrawItem->rcItem;
 
    // Establecer la fuente
    CFont* pOldFont = dc.SelectObject(&m_font); // m_font es tu fuente personalizada
 
    // Calcular el tamaño del texto
    CString strText;
    GetWindowText(strText);
    CSize textSize = dc.GetTextExtent(strText);
 
    // Calcular la posición para centrar el texto
    int x = rect.left + (rect.Width() - textSize.cx) / 2;
    int y = rect.top + (rect.Height() - textSize.cy) / 2;
 
    // Dibujar el texto
    dc.TextOut(x, y, strText);
 
    // Restaurar la fuente
    dc.SelectObject(pOldFont);
    dc.Detach();
}

3. Usar estilos de botón



Si estás utilizando un botón estándar, asegúrate de que el estilo del botón esté configurado para centrar el texto. Esto se puede hacer en el recurso del botón en el editor de recursos de Visual Studio.

4. Redibujar el botón



Después de cambiar la fuente, asegúrate de invalidar el botón para que se redibuje correctamente:

1
GetDlgItem(IDC_MY_BUTTON)->Invalidate();

Resumen



- Ajusta el tamaño del botón para que se adapte al nuevo tamaño de la fuente.
- Si es necesario, dibuja el texto manualmente para asegurarte de que esté centrado.
- Asegúrate de invalidar el botón después de realizar cambios para que se redibuje correctamente.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar