问题标签 [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 回答
441 浏览

c# - 将按钮添加到 WPF 中的非客户区

作为我之前关于Non Client Area在Window Chrome(也Windows Forms称为 WPF我需要在Non Client Area或 Window Chrome 中添加一些按钮,类似于 Firefox 4

例子

据我所知,在 WPF 中更容易做到这一点。我不知道从哪里开始。如果可能的话,有人可以给我一些关于如何做到这一点的指导吗?

0 投票
1 回答
761 浏览

windows - Windows 标题栏上的 DrawText 不再有效

为了在标题栏的右端写一些文本,我的程序捕获WM_NCPAINT,获取设备上下文,计算写文本的位置,然后调用DrawText. 此代码过去可以工作,但在 Windows 8 和 Windows 10 中,它不再工作。在这些较新版本的 Windows 中,您似乎根本无法在标题栏上绘画。

使用 Win API(不是 MFC)获取设备上下文如下:-

Windows 开发中心中对此进行了描述:-

GetWindowDC函数检索整个窗口的设备上下文 (DC),包括标题栏、菜单和滚动条。窗口设备上下文允许在窗口中的任何位置进行绘制,因为设备上下文的来源是窗口的左上角而不是客户区。

没有提及此功能是特定于 Windows 版本的,但它所描述的内容不再有效。DrawText用一个大的黑色矩形 (-300,-300,1000,1000)替换对的调用,使标题栏保持完好无损,表明绘制整个窗口矩形是不可能的。

我尝试按如下方式获取设备上下文:-

如. _ WM_NCPAINT只要窗口类使用或之一注册CS_CLASSDC,则返回 an (如果不返回零)。但这有完全相同的问题。CS_OWNDCCS_PARENTDChDChDC

我尝试了上面的变体,因为剪辑看起来很可疑。我试过了:-

毕竟文档都说DCX_WINDOW:-

值: DCX_WINDOW

含义:返回对应于窗口矩形而不是客户矩形的 DC。

此设备上下文也展示了相同的行为。

如何获得允许我DrawText在标题栏上或确实绘制任何内容的设备上下文?

0 投票
2 回答
349 浏览

c# - 自定义winforms框架的最佳方法?

我想在窗口框架上绘制一些简单的矩形和文本,使其看起来像 Visual Studio。可以完成还是我应该制作一个无边框窗口并自己处理移动和调整大小?

编辑:我写了这个。但是我现在怎么画?

0 投票
1 回答
87 浏览

c - 如何删除任意 HWND 边框 (WinAPI)?

长话短说,我正在构建一个 i3 风格的平铺窗口管理器,并且需要覆盖任意窗口的镶边以强制删除边框、标题栏和相关按钮。

在尝试了几乎所有与镀铬相关的 WS_STYLE 和 WS_EX 样式的逻辑组合后,我对大多数应用程序一无所获。简单的本机程序(终端按预期工作)没问题,但对于绝大多数其他应用程序,也会出现同样的问题;

边界问题

大多数情况下都会出现上述结果。有一个大小相同的周围边框,但每个应用程序的行为不同。据我所知,这是用于鼠标拖动命中测试的“透明”(在这种情况下显然不是)边框(尽管在样式中禁用了框架,但这不应该存在)。似乎该区域中的帧缓冲区没有被清除(即,如果将窗口调整为自身大小,则边框将被该位置的先前像素填充)。

这是一个快速的周末项目——我的工作与 WinAPI 编程无关,所以这对我来说是全新的,但如果我假设正确,那么这个边界实际上是非客户区吗?换句话说,非客户区必须归零,以便客户区占据整个窗口矩形。我试图通过使用 GWL_WNDPROC 对所有目标窗口进行子类化并将 WM_NCCALCSIZE 归零来处理这个问题,但我得到了相同的结果。

如何强制任意窗口(不是我自己创建的)完全删除它的整个非客户区?

0 投票
1 回答
419 浏览

windows - 在 Win32 中平滑 WM_NCPAINT

我想处理 WM_NCPAINT 消息来绘制我自己的窗口框架。我写了一些简单的代码来绘制一个矩形,它应该在它周围给出一个黑色边框。这是代码:

但是,这有几个问题。在左边缘或上边缘调整窗口大小时,会导致窗口在下边缘和右边缘严重闪烁。第二个问题是在窗户的上角,有圆角,我的画似乎没有发生。(这是 Windows 10)。据我了解,不应该有任何闪烁,因为我在收到 WM_NCPAINT 消息后立即绘制窗口,但似乎并非如此。有人可以告诉我我做错了什么以及如何避免这些问题吗?

顺便说一句,这就是圆角的样子,在左上角和右上角。 窗户圆角

0 投票
1 回答
348 浏览

c++ - 如何绘制像 Visual Studio 这样的关闭按钮?

Visual Studio 的窗口有一个关闭按钮(以及其他框架控件),它们融合到标题颜色中,如下所示:

在此处输入图像描述

我想知道是否有一种可接受的方式来绘制这样的控件。像这样的控件是使用DrawFrameControlorDrawThemeBackground还是完全使用另一种方法?

感谢您提供任何信息。