首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

你如何在WPF中进行AppBar对接(屏幕边缘,如WinAmp)?

在WPF中进行AppBar对接,可以通过使用Windows API(WinAPI)来实现。以下是一个简单的示例,展示了如何在WPF应用程序中实现AppBar功能。

  1. 首先,需要在项目中添加对System.Windows.Interop和System.Runtime.InteropServices的引用。
  2. 在WPF窗口中,需要设置WindowStyle为None,并且AllowsTransparency为True,以便让窗口具有透明度。
代码语言:csharp
复制
WindowStyle="None"
AllowsTransparency="True"
  1. 在代码中,需要定义一些常量和API函数,以便与WinAPI进行交互。
代码语言:csharp
复制

private const int WM_ACTIVATEAPP = 0x001C;

private const int WM_NCLBUTTONDOWN = 0x00A1;

private const int WM_LBUTTONDOWN = 0x0201;

private const int WM_NCRBUTTONDOWN = 0x00A5;

private const int WM_RBUTTONDOWN = 0x0204;

private const int WM_NCRBUTTONUP = 0x00A6;

private const int WM_NCMOUSEMOVE = 0x00A0;

private const int WM_MOUSEMOVE = 0x0200;

private const int WM_NCHITTEST = 0x0084;

private const int WM_KEYDOWN = 0x0100;

private const int WM_KEYUP = 0x0101;

private const int WM_SYSKEYDOWN = 0x0104;

private const int WM_SYSKEYUP = 0x0105;

private const int WM_SYSCOMMAND = 0x0112;

private const int WM_MOVE = 0x0003;

private const int WM_SIZE = 0x0005;

private const int WM_SIZING = 0x0214;

private const int WM_CAPTURECHANGED = 0x0215;

private const int WM_EXITSIZEMOVE = 0x0232;

private const int WM_ENTERSIZEMOVE = 0x0231;

private const int WM_GETMINMAXINFO = 0x0024;

private const int WM_WINDOWPOSCHANGING = 0x0046;

private const int WM_WINDOWPOSCHANGED = 0x0047;

private const int WM_NCCALCSIZE = 0x0083;

private const int WM_NCPAINT = 0x0085;

private const int WM_PRINT = 0x0317;

private const int WM_PRINTCLIENT = 0x0318;

private const int WM_THEMECHANGED = 0x031A;

private const int WM_DWMCOMPOSITIONCHANGED = 0x031E;

private const int WM_DWMNCRENDERINGCHANGED = 0x031F;

private const int WM_DWMCOLORIZATIONCOLORCHANGED = 0x0320;

private const int WM_DWMWINDOWMAXIMIZEDCHANGE = 0x0321;

private const int WM_DWMSENDICONICTHUMBNAIL = 0x0323;

private const int WM_DWMSENDICONICLIVEPREVIEWBITMAP = 0x0326;

private const int WM_GETTITLEBARINFOEX = 0x033F;

private const int WM_HANDHELDFIRST = 0x0358;

private const int WM_HANDHELDLAST = 0x035F;

private const int WM_AFXFIRST = 0x0360;

private const int WM_AFXLAST = 0x037F;

private const int WM_PENWINFIRST = 0x0380;

private const int WM_PENWINLAST = 0x038F;

private const int WM_APP = 0x8000;

private const int WM_USER = 0x0400;

DllImport("user32.dll")

private static extern int RegisterWindowMessage(string lpString);

DllImport("user32.dll")

private static extern bool ReleaseCapture();

DllImport("user32.dll")

private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, IntPtr wParam, IntPtr lParam);

DllImport("user32.dll")

private static extern bool GetWindowRect(IntPtr hWnd, ref RECT lpRect);

DllImport("user32.dll")

private static extern bool MoveWindow(IntPtr hWnd, int X, int Y, int nWidth, int nHeight, bool bRepaint);

DllImport("user32.dll")

private static extern bool SetWindowPos(IntPtr hWnd, IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);

DllImport("user32.dll")

private static extern bool GetClientRect(IntPtr hWnd, ref RECT lpRect);

DllImport("user32.dll")

private static extern bool AdjustWindowRectEx(ref RECT lpRect, uint dwStyle, bool bMenu, uint dwExStyle);

DllImport("user32.dll")

private static extern bool IsZoomed(IntPtr hWnd);

DllImport("user32.dll")

private static extern bool IsIconic(IntPtr hWnd);

DllImport("user32.dll")

private static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

DllImport("user32.dll")

private static extern bool IsWindowVisible(IntPtr hWnd);

DllImport("user32.dll")

private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert);

DllImport("user32.dll")

private static extern bool EnableMenuItem(IntPtr hMenu, uint uIDEnableItem, uint uEnable);

DllImport("user32.dll")

private static extern bool DrawMenuBar(IntPtr hWnd);

DllImport("user32.dll")

private static extern bool GetMonitorInfo(IntPtr hMonitor, MONITORINFO lpmi);

DllImport("user32.dll")

private static extern IntPtr MonitorFromWindow(IntPtr hwnd, uint dwFlags);

DllImport("user32.dll")

private static extern bool GetCursorPos(ref POINT lpPoint);

DllImport("user32.dll")

private static extern bool ScreenToClient(IntPtr hWnd, ref POINT lpPoint);

DllImport("user32.dll")

private static extern bool SetCursorPos(int X, int Y);

DllImport("user32.dll")

private static extern bool GetKeyboardState(byte[] lpKeyState);

DllImport("user32.dll")

private static extern uint MapVirtualKey(uint uCode, uint uMapType);

DllImport("user32.dll")

private static extern IntPtr GetFocus();

DllImport("user32.dll")

private static extern bool AttachThreadInput(IntPtr idAttach, IntPtr idAttachTo, bool fAttach);

DllImport("user32.dll")

private static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

DllImport("user32.dll")

private static extern bool GetKeyState(int nVirtKey);

DllImport("user32.dll")

private static extern bool SetForegroundWindow(IntPtr hWnd);

DllImport("user32.dll")

private static extern bool BringWindowToTop(IntPtr hWnd);

DllImport("user32.dll")

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

WPF 使用 AppBar 将窗口停靠在桌面上,让其他程序不占用此窗口的空间(附我封装的附加属性)

本文介绍如何使用 Windows 的 AppBar 相关 API 实现固定停靠在桌面上的特殊窗口。 ---- 停靠窗口 可能并不明白停靠窗口是什么意思。...OneNote 给出的名称叫做“停靠窗口”,于是这可以代表微软希望用户对这个概念的理解名词。 只是,这个概念在 Windows API 的名称叫做 AppBar。...从图中我们可以发现,我们的示例窗口停靠在了右边,其宽度就是我们在 XAML 设置的窗口宽度(当然这是我封装的逻辑,而不是 AppBar 的原生逻辑)。...docking (to screen edge, like WinAmp) in WPF?...- Stack Overflow mgaffigan/WpfAppBar: AppBar implementation for WPF .net - How to dock an application

61720

『Flutter』手势交互

1.前言经过上篇文章的介绍,已经将跨页面之间跳转的时候传参的方式介绍给大家了,本篇文章将给大家介绍如何在 Flutter 中使用手势交互。...2.手势交互2.1.简介Flutter的手势系统是一个强大且灵活的方式,允许开发者捕获并响应触摸屏上的各种用户交互。2.2.常见手势类型与常用属性Tap(点击):onTap: 当用户轻触屏幕时触发。...onTapDown: 当用户触摸屏幕并开始点击时触发。onTapCancel: 当用户取消点击时触发。Double Tap(双击):onDoubleTap: 当用户在短时间内连续点击屏幕两次时触发。...onScaleUpdate: 在缩放过程连续触发。onScaleEnd: 缩放结束时触发。...Scaffold的appBar属性设置为一个AppBar,其中包含一个Text,显示"Gesture Demo"。

25051

作为一个程序员,了解 win 上有哪些必装的软件吗

它的优点 可以任意形状截取 可以截取窗口 可以滚动截图,比如这篇文章的长图:6 大神器在手,难怪是无敌的 可以录屏,经过测试,录制完的视频还很清晰。...体积小,可以隐藏在屏幕边缘 可以对截图进行二次编辑 免费,无广告 如果经常写博客或者公众号,经常要截图,那么这款软件是的不二选择。...Gif图录制 在博客插入一个 gif 图效果会更好,读者也更有兴趣阅读,也有助于理解的博客内容。 这里推荐一个软件:LICEcap,绿色无广告,体积小,非常轻便,可自由录制任意大小区域。...强大的插件功能,直接从 Winamp 继承的插件功能,能够直接使用 winamp 的音频,输入,视觉效果插件,而通过独有的扩展能力,只要你喜欢,可以选择使用不同解码器对各种格式进行解码。...界面使用了与 winamp2 相似的皮肤格式,制做方便,来源广泛。 IDE 不同技术方向选择的工具是不同的,这里具体不做特别建议,但有个原则:不要安装可以完成相似功能的多个软件。

93220

Flutter 密码锁定屏幕

在任何情况下,最新的Andriod先决条件所指出的那样,您需要在生物识别认证被破坏或受损的偶然机会上提供选择性的认证策略。 在在本文中,我们将探讨「Flutter」 的「密码锁定屏幕」。...屏幕可适应颜色,大小,文本样式等。它将显示在flutter应用程序中使用密码屏幕时如何解锁屏幕。 该演示视频演示了如何在Flutter创建密码锁定屏幕。...当我们运行应用程序时,我们应该获得屏幕的输出,屏幕下方的截图所示。...「在屏幕内部,我们将添加标题,内置的圆圈配置和键盘。我们将添加一个」passwordEnteredCallback」方法。在此方法,添加_passcodeEntered小部件,我们将在下面进行定义。...如果密码有效,则对屏幕进行身份验证。当我们运行应用程序时,我们应该获得屏幕的输出,屏幕下方的截图所示。 img 不要忘记关闭流。用户可以处理它。

4.9K30

带你快速掌握Flutter的视图(Widgets)

通过这篇文章的学习,将为揭开这些答案。 谁是FlutterView? 在Android,View是屏幕上显示的所有内容的基础, 按钮、工具栏、输入框等一切都是View。...在Flutter,您可以使用Widgets库的核心布局小部件 Container, Column, Row, 和 Center,关于Widget的更多内容可参考:Layout Widgets目录...另外推荐大家在widget catalog查看 Flutter提供的布局。 如何在布局添加或删除组件?...在Android,可以使用Canvas 与 Drawable 在屏幕上绘制出自定义形状和图片; 在 iOS 上,可以通过 CoreGraphics 来在屏幕上绘制线条和形状; 在RN我们通常是由react-native-canvas...要了解如何在Flutter实现签名Painter,可参阅Collin在StackOverflow上的答案。 ?

10.9K10

开始使用-编写的第一个Flutter应用程序 顶

将会修改这个初学者应用程序来创建完成的应用程序。 在这个codelab将主要编辑Dart代码所在的lib / main.dart。 提示:将代码粘贴到应用程序时,缩进可能会变形。...应该看到下面的屏幕。 ? 意见 本示例创建一个Material应用程序。 Material是一种视觉设计语言,在移动设备和网络上是标准的。 Flutter提供了一套丰富的Material小部件。...从MyApp删除Scaffold和AppBar实例。 这些将由RandomWordsState管理,这使得用户在下一步从一个屏幕导航到另一个屏幕时,可以更轻松地更改应用栏的路由名称。...稍后,您将添加与心脏图标进行交互的功能。...lib/main.dart 第6步:导航到新的屏幕 在这一步,您将添加一个显示收藏夹的新屏幕(在Flutter称为路由)。 您将学习如何在主路由和新路由之间导航。

9.5K20

Flutter构建布局 顶

将学到什么? Flutter的布局机制如何工作。 如何垂直和水平布局小部件。 如何构建一个Flutter布局。 这是在Flutter构建布局的指南。 您将构建以下屏幕截图的布局: ?...然后本指南回过头来解释Flutter的布局方法,并说明如何在屏幕上放置一个小部件。 在讨论如何水平和垂直放置小部件之后,会介绍一些最常见的布局小部件。...将第一行文本放入Container可以添加填充。 列的第二个子项(也是文本)显示为灰色。 标题行的最后两项是一个红色的星形图标和文字“41”。 将整行放在容器,并沿着每个边缘填充32像素。...如果您愿意,可以构建仅使用小部件库的标准小部件的应用程序。 如何在Flutter布置单个小部件? 本节介绍如何创建一个简单的小部件并将其显示在屏幕上。...例如,以下截图中的行对于设备的屏幕来说太宽: ? 通过使用“扩展”窗口小部件,可以将窗口小部件的大小设置为适合行或列,这在下面的“调整窗口小部件”部分进行了描述。

43K10

『Flutter』布局组件 Container、Row、Column、Stack

Container可以包含一个单独的子元素,但不是专门用来做子元素布局的,对于布局,Flutter提供了其他组件Row、Column或Stack。...margin: 围绕容器外边缘的空白空间。 width 和 height: 容器的宽度和高度。 alignment: 控制子Widget如何在容器内对齐。...Stack 在Flutter,Stack组件用于将多个子组件重叠在一起。Stack允许子组件相对于其边缘或相对于其他子组件的位置进行定位,非常适合用来创建重叠的布局。...在 Stack ,这些容器会按照列表的顺序层叠显示,最先出现的在底部,最后出现的在顶部。...3.2.实现定位 在Flutter,使用Stack和Positioned组件可以实现类似CSS的绝对定位效果。Positioned组件可以指定子组件在Stack的确切位置。

33230

Flutter 流体滑块

它用于从一系列值中进行选择。下面的演示视频显示了如何在颤动创建流畅的滑块。它显示了如何在flutter应用程序中使用flutter_fluid_slider软件包来工作流体滑块传送带。...当我们运行应用程序时,我们应该获得屏幕的输出,屏幕下方的截图所示。 img 现在,我们将创建另一个FluidSlider()。...当我们运行应用程序时,我们应该获得屏幕的输出,屏幕下方的截图所示。 img 现在,我们将创建第三个“流体”滑块。...在此滑块,我们将在value方法添加一个变量,滑块颜色,onChanged,mapValueToString表示将双精度值映射到String文本的回调函数。...运行应用程序时,我们应该获得屏幕的最终输出,如下。

11.6K20

如何让 WPF 程序更好地适配 UI 自动化

Windows 很早就内置了 UI 自动化机制(UIAutomation 从 Windows XP SP3 就开始提供了),WPF 第一个版本开始也提供了 UI 自动化的支持。...所以按道理说如果使用了 WPF,那么的 UI 做准备好了随时可被自动化的准备。...控件名 翻译 semanticzoom SemanticZoom appbar AppBar 不过从实际测试情况来看,微软自家都已经不用这两种特殊控件了,而是使用前面那些常用控件的组合来替代这两个特殊的控件...毕竟 WPF 默认也不太好将全部控件暴露给 UI 自动化,否则对 UI 自动化测试软件或读屏软件来说,将面临着 WPF 可视化树般复杂和庞大的 UI 自动化树。...本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

33920

Flutter 实现刮刮卡效果

在这个博客,我们将探讨 Flutter 刮刮卡 效果。我们将了解如何在flutter应用程序中使用scratcher包实现刮板卡。...目录 刮刮卡 属性 引入 如何在dart文件实现代码 代码文件 结论 刮刮卡 刮刮卡是您在不同的购物应用程序和支付应用程序上可以看到的著名事物之一。这些刮刮卡用于为用户提供奖品和现金返还。...该演示视频演示了如何在Flutter创建刮刮卡。它显示了刮卡将如何工作使用scratcher在Flutter应用程序包。它显示打开的对话框,然后显示刮刮卡,您将获得收入。它会显示在您的设备上。...在此屏幕,我们将创建一个Container,并将对齐方式设置为中心。内部子属性添加一个**FlatButton。...运行应用程序时,我们应该获得屏幕输出,屏幕下方的捕获。

5.1K20

Flutter性能揭秘之RepaintBoundary

在这篇博客理,我们将探讨Flutter的RepaintBoundary。我们将看到如何实现RepaintBoundary的演示程序以及如何在您的flutter应用程序中使用它。...首先,需要了解什么是Flutter的RepaintBoundary。它是一个为它的Child设置不同的展示层级的Widget。...这是因为,如果其中一个RenderObjects被设定为dirty,Flutter可能会对类似Layer的其他RenderObjects进行重新绘制。...= _offset; } 当我们运行应用程序时,我们应该得到下面屏幕的输出,屏幕下的视频。如果试图在屏幕上移动指针,应用程序将非常滞后,因为它重新绘制背景,需要昂贵的计算。...我解释了FlutterRepaintBoundary的基本结构;可以根据的选择来修改这个代码。

35420
领券