如何制作像 Windows 7 通知弹出窗口这样的窗口,(WS_THICKFRAME 但不可调整)

     2023-02-25     235

关键词:

【中文标题】如何制作像 Windows 7 通知弹出窗口这样的窗口,(WS_THICKFRAME 但不可调整)【英文标题】:How to make a window like Windows 7 Notifications Flyouts, (WS_THICKFRAME but NOT-RESIZABLE) 【发布时间】:2011-11-16 13:12:05 【问题描述】:

我刚刚在 Delphi 7 中创建了一个small app here,它模拟了默认系统图标,如音量、电池、时钟、网络。

我正在尝试在http://msdn.microsoft.com/en-us/library/aa511448.aspx#flyouts这里遵循所有 Microsoft 建议

为了让一个窗口看起来像一个弹出窗口,我使用了这个代码:

//declaration

TForm1 = class(TForm)

protected
  procedure CreateParams(var Params: TCreateParams); override;
end;

实现

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.Style := WS_POPUP or WS_THICKFRAME;
  Params.ExStyle := Params.ExStyle or WS_EX_TOPMOST;
end;

我的问题是 WS_THICKFRAME 允许用户调整窗口大小。我该如何解决这个问题?

【问题讨论】:

是的,WS_THICKFRAME 可以调整大小。 WS_BORDER 就够了,Aero 也让它变胖了。 您可以使用Spy++之类的工具来确定窗口样式的值和Battery Meter窗口的扩展样式,然后将这些值应用到Params.StyleParams.ExStyle @RRUZ 我在发帖之前已经尝试过了,但没有成功。样式:0x94800000 ExStyle:0x00000008 但之后我的窗口不可见。 img641.imageshack.us/img641/5403/prtscrcapturen.jpg @Hans Passant:如果这是解决方案,请将您的评论作为答案。 我发现如果你在设计时给表单 BorderStyle:=bsNone 窗口不是很大的。 【参考方案1】:

您可以通过处理WM_GETMINMAXINFO 来防止调整大小。

但是,这不会阻止使用调整大小光标。为此,您可以处理WM_NCHITTEST

【讨论】:

不是最好的解决方案,无论如何是唯一有效的解决方案。我尝试了几乎所有样式组合,没有人给我与 WM_THICKFRAME 相同的视觉效果。【参考方案2】:

只需处理WM_NCHITTEST 消息并始终返回HTCLIENT 值。

这对于操作系统来说意味着它位于应用的客户区之上。然后它不会显示调整大小的光标。

我在 WPF 应用程序中使用这种方法。

【讨论】:

【参考方案3】:

试试这种风格: WS_DLGFRAME (0x00400000)

【讨论】:

【参考方案4】:

使用以下代码,您将摆脱调整大小的鼠标光标。

unit Unit1;

interface

uses
  Windows, Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TForm1 = class(TForm)
  private
     Private declarations 
  public
     Public declarations 
  protected
    procedure CreateParams(var Params: TCreateParams); override;
    procedure WMNCHitTest(var Message: TWMNCHitTest); message WM_NCHITTEST;
  end;

var
  Form1: TForm1;

implementation

$R *.dfm

procedure TForm1.CreateParams(var Params: TCreateParams);
begin
  inherited;
  Params.Style := Params.Style or WS_THICKFRAME;
end;

procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
begin
  inherited;
  with Message do begin
    Result := HTCLIENT;
  end;
end;

end.

【讨论】:

如何在浏览器中自定义推送通知的权限请求弹出窗口?

】如何在浏览器中自定义推送通知的权限请求弹出窗口?【英文标题】:HowcanIcustomizeapermissionrequestpopupforpushnotificationsinabrowser?【发布时间】:2017-10-2002:22:46【问题描述】:我看到一些网站有一个花哨的推送通知权限请求弹出窗... 查看详情

如何在android中建立一个像弹出窗口一样的facebook评论?

】如何在android中建立一个像弹出窗口一样的facebook评论?【英文标题】:howtobuildafacebookcommentlikepopupinandroid?【发布时间】:2015-01-0321:24:09【问题描述】:我想制作一个类似于facebookandroid应用程序的弹出框,它会在按下cmets按钮时... 查看详情

GUI是如何真正制作的?

...9【问题描述】:我的问题是像Qt这样的Gui库,可以说用于Windows操作系统他们如何创建所有这些图形用户界面(Windows等)。是否每个操作系统都提供API或其他东西来这样做?如果是,那么操作系统如何绘制所有这些窗口和东西。... 查看详情

AngularJS Iframe 弹出窗口像fancybox?

...数来打开一个弹出窗口并在弹出窗口中呈现一个新页面。如何在AngularJS中打开像i-frame弹出窗口这样的花哨的框?【问题讨论】:解决方案是否驻留 查看详情

多个弹出窗口迅速[关闭]

...:我正在尝试实现一个像imovie这样的帮助系统,我想知道如何在一个视图控制器的特定位置显示多个弹出框。【问题讨论】:请在寻求编程帮助时发布您正在进行的实现。【参考方案1】:我怀疑这些实际上是完整的UIPopoverControll... 查看详情

如何在 iPhone 中使用 UIBezierPath 创建像 UIPopover 这样的视图?

】如何在iPhone中使用UIBezierPath创建像UIPopover这样的视图?【英文标题】:HowtocreateaviewlikeUIPopoverusingUIBezierPathsiniPhone?【发布时间】:2015-12-1603:08:02【问题描述】:我有一个应用程序,其中有很多弹出窗口,每个弹出窗口都有很多... 查看详情

如何让来自 Firebase 控制台的通知像 Facebook 和其他应用一样弹出?

】如何让来自Firebase控制台的通知像Facebook和其他应用一样弹出?【英文标题】:HowtomakeanotificationcomingfromFirebaseconsoletopopuplikeFacebookandotherapps?【发布时间】:2017-08-2413:56:15【问题描述】:我正在使用Firebase云消息将通知推送到我... 查看详情

JavaFX - 从通知弹出窗口中检索对象

】JavaFX-从通知弹出窗口中检索对象【英文标题】:JavaFX-Retrieveobjectsfromnotificationpopups【发布时间】:2018-10-1515:17:16【问题描述】:我正在开发的JavaFX应用程序遇到问题,这是检索用于创建通知弹出窗口的数据的方法。情况是这样... 查看详情

在 Windows Phone 7 中建立推送通知

】在WindowsPhone7中建立推送通知【英文标题】:establishingpushnotificationinwindowsphone7【发布时间】:2011-07-0611:11:53【问题描述】:我必须在我的项目中实现推送通知。它有sender(windows手机窗口应用),wcf服务和客户端(windows手机应... 查看详情

如何显示自定义弹出窗口而不是 UIMenuController

】如何显示自定义弹出窗口而不是UIMenuController【英文标题】:HowtodisplayCustompopupinsteadofUIMenuController【发布时间】:2013-07-0211:41:41【问题描述】:我正在创建一个包含UITextView的应用程序,其中包含大量文本。当我双击任何文本而... 查看详情

如何像在 Windows 中拖动应用程序窗口一样拖动堆栈面板(而不是拖放)

】如何像在Windows中拖动应用程序窗口一样拖动堆栈面板(而不是拖放)【英文标题】:Howtodragastackpanel(notdrag-drop)likedraggingaapplicationwindowinwindows【发布时间】:2021-11-1917:46:27【问题描述】:我正在制作一个uwpApp,它是一个widgets应... 查看详情

如何使chrome扩展程序窗口始终位于顶部(代码片段)

...300");window.close();然后,您必须将弹出窗口的内容放在popup_windows.html文件中我希望这可以帮到你。 查看详情

php如何制作弹出窗口

Javascript属于网络的脚本语言,用来给HTML网页增加动态功能。Javascript弹出窗口的方法:    1,弹出包含提示信息窗口 在script标签中 加入 alert("要现实的内容");    2,弹出新窗口,window对象的open方法可实现弹出窗口,具体... 查看详情

单击某行时如何制作弹出窗口

】单击某行时如何制作弹出窗口【英文标题】:howtomakeapop-upwindowwhenclickonsomerow【发布时间】:2021-11-1113:16:11【问题描述】:我的代码中有这些行:output$ex1<-DT::renderDataTable(DT::datatable(df[df$country=="usa",]))output$ex2<-DT::renderDataTable... 查看详情

Win32API:如何向父窗口请求嵌入式 Windows 事件通知

】Win32API:如何向父窗口请求嵌入式Windows事件通知【英文标题】:Win32API:Howtorequestembeddedwindowseventnotificationsouttoaparentwindow【发布时间】:2010-02-0518:42:14【问题描述】:场景:我想要一个窗口控件,它是我的对话框中的子窗口(子... 查看详情

反应本机接收通知但不显示在android中的弹出窗口

】反应本机接收通知但不显示在android中的弹出窗口【英文标题】:ReactnativeReceivenotificationbutnotshowpop-upinandroid【发布时间】:2021-04-0520:51:15【问题描述】:AndroidManifest.xml这是我的android清单文件,通知正常出现,但不像其他应用... 查看详情

React Native:如何使用自定义内容制作推送通知?

】ReactNative:如何使用自定义内容制作推送通知?【英文标题】:ReactNative:Howtomakeapushnotificationwithcustomcontent?【发布时间】:2020-05-0502:40:27【问题描述】:我在我的ReactNative项目中使用OneSignal,并想创建类似于此图像的东西,其中... 查看详情

outlook如何设置新邮件到达桌面通知?

参考技术A其实最简单的方法是点击任务栏右侧的OUTLOOK图标,在弹出的菜单中勾选“显示新邮件桌面通知”但这个方法还是不行时,显示新邮件桌面通知,但就是不出现提示播放声音,怎么办,大家可以选择“文件”选项卡在“... 查看详情