[c++] Entfernen des Symbols aus den Windows-Titelleisten ohne Schließen der Schaltfläche oder des Systemmenüs?


2 Answers

Setzen WS_EX_DLGMODALFRAME erweiterten Stil WS_EX_DLGMODALFRAME .

Question

Ich entwickle eine MFC-Anwendung und suchte kürzlich nach einer guten Methode, um das Symbol aus einer Windows-Titelleiste zu entfernen, aber behalte die Schließen-Schaltfläche bei. Die zwei naheliegenden Kandidatenlösungen sind das Ausschalten des Systemmenüstils oder das Verwenden des Werkzeugfensterstils, aber ich würde es vorziehen, das Systemmenü nicht zu deaktivieren oder die Titelleiste des geschrumpften Werkzeugfensters zu verwenden. Viele MFC-Anwendungen verfügen über diese Funktionalität, daher frage ich mich: Fehlt mir eine Standardmethode dafür?




Ein Beispielcode in Delphi, der 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 funktionieren. Grundsätzlich müssen Sie nur WM_SETICON zu NULL an der richtigen Stelle.




Wie wäre es, das System-Menü loszuwerden und es dann wieder an einen anderen Ort zu bringen (sagen Sie neben dem Schließen-Button usw.)?




Related