7

我有一个要最小化的窗口(到任务栏),所以我打电话ShowWindow

ShowWindow(Handle, SW_MINIMIZE);

除了将自身最小化(到任务栏)之外,窗口是图标化的:

在此处输入图像描述

窗口没有父级:

在此处输入图像描述

如何将窗口最小化到任务栏?


更新:

根据 2002 年的一些建议,我尝试设置WS_EX_APPWINDOW窗口样式和/或确保窗口没有所有者:

在此处输入图像描述

不幸的是,这改变了我的(Delphi)应用程序的行为,因为我的应用程序现在有两个任务栏图标,而不是一个:

在此处输入图像描述

这当然是 Delphi (5) 的神器;因为我试图解决另一个问题

但这不应该影响这个问题。我正在调用ShowWindow(..., SW_MINIMIZE)API,而不是最小化窗口 Windows 正在图标化应用程序。

如何将窗口最小化到任务栏?

4

2 回答 2

11

任务栏上的那个图标是应用程序(句柄)的图标,而不是主窗体的图标。

采用:

Application.Minimize;

编辑:但是从你的两个链接中,我知道你已经知道了……duh ;)

这适用于 MainForm:

TForm1 = class(TForm)
private
  procedure WMSysCommand(var Msg: TWMSysCommand); message WM_SYSCOMMAND;
protected
  procedure CreateParams(var Params: TCreateParams); override;

...

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  with Params do
  begin
    ExStyle := ExStyle or WS_EX_APPWINDOW;
    WndParent := GetDesktopWindow;
  end;
end;

procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
begin
  if Msg.CmdType = SC_MINIMIZE then
    ShowWindow(Handle, SW_MINIMIZE)
  else
    inherited;
end;

并从任务栏中隐藏 Application.Handle(仅具有 MainForm 的任务栏图标):Visible将此 Form 的属性设置为True并隐藏项目文件中的 Application:

Application.Initialize;
Application.CreateForm(TForm1, Form1);
ShowWindow(Application.Handle, SW_HIDE);
Application.Run;

对于这种形式,ShowWindow(Handle, SW_MINIMIZE);应该可以工作。在最小化或还原时,它还提供了 Windows 的默认缩放功能。

(在 XP 和 W7 上使用 D5 和 D7 测试)

于 2011-06-03T15:24:03.330 回答
0

一个超级简单的解决方法是禁用FORM上的最小化图标
【对象检查器】-【表单属性】-【边框图标】-【biMinimize】
点击任务栏上的APPLICATION图标仍然可以最小化和恢复应用程序

在此处输入图像描述

于 2020-03-19T09:37:41.280 回答