Estoy desarrollando una aplicación MFC y recientemente he estado buscando un buen método para eliminar el icono de una barra de título de Windows, pero conservo el botón Cerrar. Las dos soluciones candidatas obvias son desactivar el estilo de menú del sistema o usar el estilo de ventana de la herramienta, pero preferiría no deshabilitar el menú del sistema o usar la barra de título de la ventana de la herramienta reducida. Muchas aplicaciones MFC tienen esta funcionalidad, por lo que me pregunto: ¿me falta alguna forma estándar de hacer esto?¿Quitar el icono de las barras de título de Windows sin abandonar el botón de cerrar o el menú del sistema?
Respuesta
Puede utilizar WM_NCRBUTTONDOWN
para detectar si el usuario ha hecho clic-derecho en el título y luego abrir el menú del sistema.
¿qué hay de deshacerse del menú del sistema y luego ponerlo en otro lugar (por ejemplo, al lado del botón cerrar, etc.)?
Sin el ícono, el único método que pude imaginar para que los usuarios accedan al menú del sistema es haciendo clic con el botón derecho en la barra de título.
Si eso es lo que tenía en mente, podría manejar WM_RBUTTONDOWN en su marco principal y luego calcular si el clic derecho estaba en la barra de título.
int clickX = GET_X_LPARAM(lParam);
int clickY = GET_Y_LPARAM(lParam);
CRect frameRect;
mainFrame.GetWindowRect(&frameRect);
int titleBarHeight = GetSystemMetrics(SM_CYCAPTION);
if (clickX >= frameRect.left &&
clickX <= frameRect.right &&
clickY >= frameRect.top &&
clickY <= frameRect.top + titleBarHeight)
{
TrackPopupMenu(m_systemMenu);
}
Conjunto WS_EX_DLGMODALFRAME
estilo extendido.
Puede usar un ícono completamente transparente.
Un código de ejemplo en Delphi que elimina el icono:
const
WM_ResetIcon = WM_APP - 1;
type
TForm1 = class(TForm)
procedure FormShow(Sender: TObject);
protected
procedure WMResetIcon(var Message: TMessage); message WM_ResetIcon;
end;
implementation
procedure TForm1.FormShow(Sender: TObject);
begin
PostMessage(Handle, WM_ResetIcon, 0, 0);
end;
procedure TForm1.WMResetIcon(var Message: TMessage);
const
ICON_SMALL = 0;
ICON_BIG = 1;
begin
DestroyIcon(SendMessage(Handle, WM_SETICON, ICON_BIG, 0));
DestroyIcon(SendMessage(Handle, WM_SETICON, ICON_SMALL, 0));
end;
Un código similar debe trabajar para MFC. Básicamente, solo necesita WM_SETICON para NULL en el lugar correcto.
- 1. Qt cuadro de diálogo sin icono de ventana (menú del sistema)
- 2. qtip2 botón de cerrar sin una barra de título
- 3. Establecer el título de las barras de pestañas programáticamente
- 4. Iniciar el emulador de ICS sin el botón de menú
- 5. menú de iconos Android con el título: Título no muestra
- 6. Android 3.2 quitar el título de la barra de acciones
- 7. Perdiendo tiempo sin cambiar el reloj del sistema de Windows
- 8. ¿Cómo obtengo el título del botón MessageBox?
- 9. Obteniendo el título/descripción del código de error del sistema de Windows desde su número hexadecimal
- 10. icono en el título TitledBorder
- 11. Icono de la bandeja del sistema con C# Console La aplicación no mostrará el menú
- 12. Desactivar el botón de menú?
- 13. Formulario Delphi sin menú de sistema pero con botón de cierre
- 14. El icono de la bandeja del sistema aparece distorsionado
- 15. Menú contextual del botón derecho en la bandeja del sistema
- 16. Cómo quitar el foco del botón Enviar
- 17. El menú contextual de la bandeja del sistema Qt permanece cuando la aplicación pierde el foco
- 18. icono de Windows Shell menú contextual
- 19. iOS cómo quitar el botón Atrás?
- 20. Barras de menú estándar de Windows en Windows Forms
- 21. iTerm2 - ocultar las barras de título del panel dividido?
- 22. Extraiga el icono del archivo .lnk (acceso directo) de Windows
- 23. cómo cambiar el icono de menú de desbordamiento de Android
- 24. ¿Cómo eliminar el menú del sistema en WPF?
- 25. ¿Cómo puedo eliminar el botón Cerrar de las pestañas del editor en Eclipse?
- 26. cómo agregar el emblema al icono del archivo de Windows?
- 27. Quitar el retraso del menú desplegable de Superfish onmouseover, mientras mantengo el retraso de Hoverintent onmouseout
- 28. Mostrar el menú predeterminado del botón derecho del mouse - Delphi
- 29. Reemplazar el icono Cerrar por un cuadro de diálogo JQueryUI
- 30. ¿Cómo se muestra el icono en la barra de título de QDockWidget?
Esto debería haber sido la respuesta. – c00000fd