加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

windows – 无边框窗口.如何添加阴影并删除1px边框?

发布时间:2020-12-14 02:50:57 所属栏目:Windows 来源:网络整理
导读:我需要创建一个具有指定背景颜色的无边框窗口.我知道如何删除非客户区域并得到这样的东西: 这很酷但不是我想要的.如果你仔细看看任何一个航空窗口 – 它周围有一个阴影(实际上这不是阴影,而是一些发光).我找到了一个可以使用此代码添加阴影的地方: const M
我需要创建一个具有指定背景颜色的无边框窗口.我知道如何删除非客户区域并得到这样的东西:

这很酷但不是我想要的.如果你仔细看看任何一个航空窗口 – 它周围有一个阴影(实际上这不是阴影,而是一些发光).我找到了一个可以使用此代码添加阴影的地方:

const MARGINS shadow_on = { 1,1,1 };
DwmExtendFrameIntoClientArea(hwnd,&shadow_on);

这几乎是做它的工作(认为这对我来说绝对不清楚 –
文档没有提到关于阴影和这个函数的关系).几乎.窗户周围出现了一个薄边框.看起来它是半透明的,它打破了窗口的外观和感觉:

我知道这是可能的 – 视觉工作室甚至以某种方式改变了这个边界的颜色!

更新:正如IInspectable在评论中注意到的,我可以在DwmExtendFrameIntoClientArea()中使用负边距.我设置了-1值并得到了这个结果:

正如你所看到的 – 它甚至更奇怪.我试图用颜色填充背景,但没有运气.

解决方法

要在调用此函数后删除一个像素边框:

const MARGINS shadow_on = { 1,&shadow_on);

您需要覆盖WndProc WM_NCCALCSIZE消息,并返回0作为结果.
您还需要使用WS_CAPTION样式创建窗口. (在Windows XP上,此代码不会生成矩形窗口,但WinXP上没有阴影,因此在Windows XP上应该回退到WS_POPUP窗口样式)
顺便说一下,要添加阴影,使用此边距就足够了:
const MARGINS shadow_on = {1,0};

这里是干净的windows API代码示例如何创建这样的窗口,它是在Delphi上编写的:https://stackoverflow.com/a/44489430/877099

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读