问题标签 [nonclient]

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 投票
4 回答
16513 浏览

c++ - 如何在非客户区绘图?

我希望能够在窗口的非客户区的菜单栏右侧进行一些绘图。

这可能吗,使用 C++ / MFC?

0 投票
1 回答
664 浏览

winapi - Windows:鼠标按下窗口装饰

在几乎所有 Windows 应用程序中,我注意到在非客户区按住鼠标按钮会导致绘制停止。为什么需要这个?

例如,我有一个 Managed Direct 3D 应用程序,它显示一个旋转的立方体。如果我将指针放在标题栏上并按住鼠标按钮,即使我没有将任何此类条件编码到我的循环中,立方体也会停止旋转。

为什么绘画停止了?有什么好处?最重要的是,我该如何解决这个问题?

0 投票
1 回答
8474 浏览

winapi - 在 Vista/Aero 上处理 WM_NCPAINT “破坏” DWM 玻璃渲染

我正在尝试制作一个窗口,该窗口WM_NCPAINT根据用户设置在 Aero/Glass 和自定义渲染框架(通过处理)之间交替。(Windows Vista)。

DwmComposition已启用。我的应用程序提供了玻璃框架,但是一旦我切换设置以触发自定义WM_NCPAINT代码路径然后切换回使用DefWindowProcWM_NCPAINT处理,本机框架现在永远停留在“Vista Basic”样式 - 它不再是半透明的并且标题按钮看起来与普通的 Aero/Glass 不同。

我已经尝试了几乎所有戳窗口的方法,从发送SWP_FRAMECHANGED到更改窗口样式,然后将其更改回来,隐藏它等等,但都无济于事。似乎只要我处理WM_NCPAINT玻璃窗而不是顺从DefWindowProc我的窗户就永远“坏了”。

我在 MSDN 上找到了一个 C#/WPF 示例(代码点 msdn dot microsoft dot com slash chrome),它似乎表明只需停止处理 WM_NCPAINT 并且玻璃会返回,但这似乎不适用于我自己的应用程序。

有没有办法干净地重置这个状态?我的代码在 C++ 中并位于此处:

http://bengoodger.dreamhosters.com/software/chrome/dwm/

0 投票
6 回答
6345 浏览

delphi - Delphi:在 Windows 7 中使用 aero 为 vista 以标题形式绘制文本

如何在 vista 上的标题栏中绘制文本(使用 onClick 事件),如 Windows 7 一样?

替代文字 http://img529.imageshack.us/img529/3643/immaginembl.jpg

delphi.about.com上的示例不适用于带有 Aero 的 Vista。你有什么想法?

谢谢大家。

对不起,我的英语不好。

0 投票
1 回答
1114 浏览

gdi - DWM 组合切换导致客户区丢失 alpha

我在这里有一个简单的 Windows 应用程序:

http://www.bengoodger.com/software/chrome/dwm/app.cc

我的应用程序在 DWM 合成处于活动状态时提供了一个自定义的玻璃框架,并在它处于非活动状态或不可用时提供了一个完全自定义的框架。

“自定义玻璃框架”由一个放大的标题栏区域组成,我的 WM _NCCALCSIZE 实现将其报告为客户区域的一部分,因为我想在其中呈现透明控件。为了使我的窗口的这个“高标题栏区域”部分是透明的,我用透明的黑色填充它(在上面的简单示例中为 BLACK_BRUSH),这导致它被 DWM 绘制为玻璃。

当系统 DWM 被切换时,例如通过使用外观设置控制面板切换到 Vista Basic 或 Windows Standard,或者当启动需要系统禁用 DWM 的应用程序时,我的应用程序通过处理 WM_NCPAINT 等切换到完全自定义渲染模式. 当我切换回来时,我会期待相反的情况,这主要发生,除了我的“高标题栏区域”现在是纯黑色。

我发现我可以通过获取窗口的位置、隐藏窗口然后在我的 WM_DWMCOMPOSITIONCHANGED 处理中再次设置窗口的位置来解决这个问题,但这会导致其他可怕的错误(其中至少是窗口 z-order munging)。

我的问题是 - 我在这里做错了什么?似乎窗口以某种方式被置于虚假状态,并且隐藏/显示它可以纠正它。我怎样才能防止这种情况发生?任何指导将不胜感激。

注意:我已经缩小了一些范围。当 DWM 玻璃生效时,在客户区域上渲染的任何被涂成黑色的客户区域部分都将被渲染为透明。我们注意到,当从非 Glass 返回到 Glass 时,客户区域呈现为纯黑色而不是透明。但是,当窗口最大化然后恢复时,窗口将恢复为透明状态。当我随后将窗口缩小时,顶部窗口保持透明。当我将它拖得更大时,窗口的顶部再次变黑。就好像 DWM 正在缓存窗口后面的像素,并且将窗口调整得更大会导致它无法在那里绘制任何东西,因为它的缓存不够大。我似乎找不到任何 DWM 功能来重置此状态。

0 投票
3 回答
131 浏览

php - 在 PHP 中访问非当前用户会话数据

除了当前连接的客户端($_SESSION)处于活动状态的会话之外,是否可以访问其他用户会话中的数据?

如果是这样,怎么做?

0 投票
1 回答
1665 浏览

winforms - 透明非客户区

我正在使用 Windows 窗体创建一个 TextBox 控件子类。我正在使用 WM_NCCALCSIZE 更改客户区(以扩大非客户区),但我还没有找到任何关于如何使非客户区透明的解决方案。是否有任何简单的方法可以以透明的方式绘制到 WM_NCPAINT 中的非客户区,以在子控件的相交区域中复制底层窗口的背景?

0 投票
1 回答
1014 浏览

c# - 没有客户区时我应该收到 WM_NCPAINT 吗?

在我的自定义控件中有一些我想了解的东西。我处理 WM_NCCALCSIZE 将客户区设置为整个窗口,换句话说,没有非客户区。我原以为不会收到 WM_NCPAINT 但每次窗口大小更改时我仍然会收到它。这是我的 WndProc 代码:

因此,当发生调整大小时,我检查并正确接收 WM_NCCALCSIZE,_drawManager.NcCalcSize 不修改“rect”,然后接收 WM_NCPAINT,我有义务比较边界和客户端矩形以检查是否应该发生任何非客户端绘画. 这是正常的吗?

0 投票
1 回答
313 浏览

winapi - 使用 IDirect3DDevice9::SetCursorProperties 时光标在非客户区闪烁

我有一个在 Direct3D9 下运行的应用程序。该应用程序使用 Direct3D HW 光标 API(IDirect3DDevice9::SetCursorProperties等)来控制光标。几乎一切正常:

  • 在应用程序窗口内时,显示由 SetCursorProperties 指定的光标
  • 在应用程序窗口之外时,桌面或其他窗口根据需要显示正常的操作系统光标

问题出在我窗口的非客户区(标题栏、屏幕边缘)。在非客户区移动时,会简单显示该区域功能对应的光标,但一旦停止移动,SetCursorProperties中设置的光标又会显示出来。

什么是正确的使用方法,IDirect3DDevice9::SetCursorProperties以便在我的窗口非客户区获得默认操作系统光标?

0 投票
1 回答
5617 浏览

c# - 改变winforms的样式(标题栏颜色、边框),也就是非客户区的样式

有没有什么简单的方法可以改变winforms的标题栏颜色,改变非客户区的观感?

我找到了这个链接,但对于初学者来说似乎很典型:

在 Windows 窗体中绘制自定义边框