tareas rapido quitar puede ocultar menus malwarebytes mac iconos icono herramientas eliminar desplazamiento dela como barras barra acceso c++ windows user-interface mfc

c++ - rapido - ¿Desea eliminar el icono de las barras de título de Windows sin abandonar el botón Cerrar o el menú del sistema?



como se puede eliminar iconos dela barra de herramientas de acceso rapido (6)

¿Qué hay de deshacerse del menú del sistema y luego ponerlo en otro lugar (por ejemplo, al lado del botón Cerrar, etc.)?

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?


Podría usar un ícono completamente transparente.


Puede usar WM_NCRBUTTONDOWN para detectar si el usuario ha hecho clic derecho en su título y luego abrir el menú del sistema.


Establezca el estilo extendido WS_EX_DLGMODALFRAME .


Sin el icono, el único método que podría 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 cuadro 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); }


Un código de muestra 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 debería funcionar para MFC. Básicamente, solo necesita WM_SETICON para NULL en el lugar correcto.