Ich entwickle eine MFC-Anwendung und ich habe kürzlich nach einer guten Methode gesucht, das Symbol aus einer Windows-Titelleiste zu entfernen, aber die Schließen-Schaltfläche beizubehalten. Die beiden naheliegenden Kandidaten sind das Deaktivieren des Systemmenüstils oder das Verwenden des Werkzeugfensterstils, aber ich würde es vorziehen, das Systemmenü nicht zu deaktivieren oder die verkleinerte Werkzeugfenstertitelleiste zu verwenden. Viele MFC-Anwendungen verfügen über diese Funktionalität. Daher frage ich mich: Fehle ich eine Standardmethode dafür?Entfernen des Symbols von Windows-Titelleisten, ohne die Taste oder das Systemmenü zu schließen?
Antwort
können Sie WM_NCRBUTTONDOWN
verwenden, um festzustellen, ob der Benutzer auf Ihrer Beschriftung rechts geklickt hat und dann das Systemmenü aufzurufen.
Wie wäre es, das Systemmenü loszuwerden und es dann an einen anderen Ort zu bringen, an dem Sie sich befinden (zum Beispiel neben dem Schließen-Knopf usw.)?
Ohne das Symbol, die einzige Methode, die ich mir vorstellen könnte, dass Benutzer auf das Systemmenü zugreifen, ist mit der rechten Maustaste auf die Titelleiste.
Wenn Sie das vorhaben, können Sie WM_RBUTTONDOWN auf Ihrem Hauptrahmen verarbeiten und dann berechnen, ob der Rechtsklick auf der Titelleiste war.
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);
}
Set WS_EX_DLGMODALFRAME
erweiterten Stil.
Sie könnten ein vollständig transparentes Symbol verwenden.
Ein Beispielcode in Delphi, das Symbol entfernt:
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;
Ein ähnlicher Code sollte für MFC arbeiten. Im Grunde brauchen Sie nur WM_SETICON zu NULL an der richtigen Stelle.
- 1. Qt-Dialog ohne Fenstersymbol (Systemmenü)
- 2. Erkennen, ob Windows-Schließen oder Anwendung versucht, vom Systemmenü (WM_CLOSE) zu schließen
- 3. Set DialogResult ohne das Dialogfeld zu schließen
- 4. Warum funktioniert das Hinzufügen des @ -Symbols?
- 5. Ändern des ActionMode Overflow-Symbols
- 6. Ursache für das Schließen des Formulars ermitteln
- 7. Fenster schließen ohne zu schließen Anwendung
- 8. Ändern des Aktionsleisten-Symbols
- 9. Aktionsmodus schließen Taste Textfarbe
- 10. Zweck des Scala-Symbols?
- 11. Scanner schließen, ohne System.in zu schließen
- 12. Wie schließe ich ein Jframe, ohne das Hauptprogramm zu schließen?
- 13. AppStore: Ändern des Symbols, nachdem die App veröffentlicht wurde?
- 14. Entfernen Sie die Taste Listener von Panel
- 15. Wie wird gesendet, ohne das Rich-Popup-Fenster zu schließen?
- 16. Warte auf das Entfernen von Dateien nach dem Schließen
- 17. Anzeige des 'x' Symbols in TBalloonHint
- 18. Ändern des Symbols der Navigationselementeinträge
- 19. QTabWidget: Schließen Sie die Tab-Taste nicht
- 20. Emacs: Schließen von Fenstermanager-Taste verhindern
- 21. Bootstrap Eingabegruppe Text ohne Taste nimmt die Hälfte des Platzes
- 22. Entfernen des Drilldown Plus-Symbols (+) aus MasterRow von GridView von GridView, wenn ChildRow keine Daten enthält
- 23. Schließen des Dialogformulars schließt das Elternformular
- 24. wie man einen Puffer von gvim entfernt, ohne das Fenster zu schließen
- 25. qtip2 close-Taste ohne Titelleiste
- 26. SimpleModal - Schließen iframe mit Schließen-Taste
- 27. IE vermasselt Größe des Symbols
- 28. Offset des Symbols 'Symbol' inkonsistent
- 29. Einen JFrame schließen, ohne einen anderen zu schließen?
- 30. Systemtablett Text anstelle des Symbols
Dies sollte die Antwort sein. – c00000fd