问题标签 [nonclient-area]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
422 浏览

c# - 改变窗户风格?

如何让我的应用看起来像 chrome 窗口?没有标题文字和非常纤细的边框。或者像没有边框(或填充排序)的 spotify。

0 投票
1 回答
1473 浏览

winapi - WM_NCHITTEST 不改变鼠标光标

我有一个分层窗口 (WS_EX_LAYERED),它实现了自定义 NCHITTEST 和 NCCALCSIZE,以使我的窗口的客户端矩形与窗口矩形相同。我的窗户尺寸和油漆正确;当光标靠近窗口的底部边缘时,我可以从 WM_NCHITTEST 返回 HTBOTTOM 以导致从底部开始垂直调整窗口大小类型的操作。但是,我没有得到垂直调整大小光标。有没有办法解决这个问题而不必实现 WM_SETCURSOR 并测试指针的位置与窗口的边缘?

这是我的代码片段:

0 投票
3 回答
3079 浏览

c# - 如何正确确定 Aero 的非客户区大小?

为 COMPILED 应用程序激活 Aero 时,如何使用 VBNET 或 C# 代码正确确定非客户区大小?(是的,这个问题只发生在运行编译的应用程序时,而不是从 IDE 启动应用程序时

当我调整表单大小或执行与表单的高度/宽度相关的任何操作时,我永远不会得到预期的结果。

例如这是一个简单的两种形式的对接代码的一部分:

VB-NET:

C#:

举个例子,我将展示我的一个程序。

上面的代码在 Aero 未激活时运行完美:

在此处输入图像描述

...但是如果 Aero 被激活,那么结果如下:

在此处输入图像描述

请注意右侧的表单如何位于左侧表单的非客户端边框下方。

...或者这是左侧表单位于右侧表单的非客户端边框下方的其他图像:

在此处输入图像描述

我的问题是解决这个问题的方法是什么?

更新:

扩展框架解决方案不起作用。

表格1:

表格2:

结果:

在此处输入图像描述

另外我想记住: 这个问题只发生在运行编译的应用程序时,而不是从 IDE 启动应用程序时

**

更新:

**

测试了 GetWindowRect 解决方案,总是返回一个 0,对我不起作用,也许我做错了什么:

**

更新:

**

再次尝试使用 GetWindowRect,这次代码正确编写但没有解决问题:

在此处输入图像描述

我要记住:这个问题只发生在win7/Vista上运行编译的应用程序时,而不是从IDE启动应用程序时

0 投票
1 回答
124 浏览

.net - 如何获取 NonClient 上边框大小?

我需要将辅助表单与其他表单的右边框对齐。

当我们在启用 AERO 的情况下编译和运行COMPILED应用程序(而不是从 IDE 运行它)时,会发生以下情况:

在此处输入图像描述

因此,感谢GJKH的伟大回答:如何正确确定 Aero 的非客户区大小?

...现在我可以将辅助窗体对齐到主窗体的右侧,但是辅助窗体仍然未对齐顶部的一些像素:

在此处输入图像描述

这是我正在使用的代码:

0 投票
1 回答
1379 浏览

c++ - 如何处理非客户区的按钮事件

编辑:我使用以下代码在窗口的非客户区(标题栏)上绘制了一个按钮。所以我的问题是:是否可以从此按钮处理鼠标单击事件?

0 投票
0 回答
1386 浏览

c++ - 处理 WM_NCPAINT WinEvent 时如何保持航空玻璃

我正在处理 WM_NCPAINT WinEvent 以在窗口的非客户区绘制一个按钮。但如下图所示,航空玻璃边框消失了,我的窗口没有边框。所以我找到了这个答案:Handling WM_NCPAINT "breaks" DWM glass rendering on Vista/Aero,我尝试在我的项目中应用该页面上提出的解决方案,但没有结果。我做错了什么?

我的窗口截图:

在此处输入图像描述

在我的 .pro 文件中,我添加了:

这里是我的代码:

0 投票
1 回答
890 浏览

c++ - 在非客户区绘制时如何保持控制框响应

我正在使用以下代码绘制在窗口的非客户区扩展的图像。代码有效,但控制框(最小化、最大化和关闭按钮)保持无响应,单击时没有任何反应。如何在非客户区绘制保持我的控制箱响应?

这是我在 Windows 7 上运行的应用程序的屏幕截图: 我的应用

我的代码:

0 投票
1 回答
636 浏览

c# - 调整窗体大小后将窗体捕获到位图

在 C# 中工作我有一个项目需要捕获位图ControlForm位图。我有一个类,它Control在构造函数中接受一个参数,然后执行以下代码(为本示例简化)以保存Control.

为我需要捕获的每个控件创建此类的一个实例,使用位图(在本例中将其绘制到屏幕上),并在不再需要时处理该对象。这很好用,并为我提供了指定Controlor的位图,Form在后者的情况下包括非客户区,如下所示:

http://i.imgur.com/ZizXjNX.png

但是,如果我尝试Form再次捕获 a,我会遇到问题。如果我Form在再次捕获之前调整了它的大小,第二次捕获将显示非客户区不正确。

下面是一张图片来说明这一点 - 左边是表单在屏幕上的样子(正确),右边是上面的代码如何捕获它(不正确)。

http://i.imgur.com/y46kFDj.png

我没有从我自己的搜索中找到任何东西,所以想知道是否有人能指出我做错了什么/没有做什么?

0 投票
0 回答
556 浏览

c# - 在客户区包含标题栏

我正在寻找一些建议...我想做的是扩展表单的客户区以包括标题栏和窗口边框。我希望能够在非客户区添加一个按钮和绘画。我读过 这篇文章,但它是用 C++ 编写的,而且我正在使用 C#(Visual Basic 也可以)。阅读后,我想出了这段代码:

所有这一切都是使窗口更大,它对非客户区没有任何作用。我整天都在谷歌上搜索它,但没有遇到更好的东西。这件事困扰了我一段时间,所以如果有人有任何想法,请留下回复。

另外,这是我的第一篇文章,所以如果我做错了什么,请告诉我。

0 投票
1 回答
1317 浏览

delphi - 自己处理 WM_NCPAINT 时强制重绘 TMainMenu

我在一个相当大的应用程序中自定义绘制了我的标题栏,它有多种形式,并决定尝试通过自己处理一些消息并在处理 WM_NCPAINT 时将绘图以老式方式进行。

这幅画本身进展顺利,基本上可以工作。一件不起作用的事情是绘制 TMainMenu。要么我有默认的 WM_NCACTIVATE 处理程序在绘制之前绘制整个非客户区(我必须在我的 WM_NCPAINT 处理程序中执行 WM_NCACTIVATE 消息),这会导致闪烁,这似乎无济于事。或者我可以尝试让 WM_NCPAINT 的默认处理程序仅绘制包含 TMainMenu 的 Rect,这会产生平滑的结果,但不会重新绘制菜单。

我的问题是:

  • 当我自己处理 WM_NCPAINT 时,如何才能有一个 TMainMenu 并且只重绘一个 TMainmenu?

我已经尝试了几次,我认为我走在正确的道路上,但正在碰壁;我对自己在做什么没有足够的了解,似乎也找不到关于它的明确文档。我的代码中最重要的部分是:

我认为这正是问题所在。(或者更确切地说,是我计算“MenuRegion”的代码。我只是不知道它是否出错是因为我使用了错误的坐标系,或者是因为我正在以完全错误的方式处理这个问题。

这是我的代码的简化版本,它将在 delphi (xe3) 中“按原样”编译和运行: