我需要创建一个具有指定背景颜色的无边框窗口。我知道如何删除非客户区域并得到类似的内容:
很酷但不是我想要的。如果你仔细看看任何一个航空窗口 - 周围有一个阴影(实际上这不是阴影,而是一些发光)。我找到了一个可以使用此代码添加阴影的地方:
const MARGINS shadow_on = { 1, 1, 1, 1 };
DwmExtendFrameIntoClientArea(hwnd, &shadow_on);
这几乎是他的工作(认为这对我来说绝对不清楚 - 文档没有提到关于阴影和这个函数的关系)。几乎。窗户周围出现了一个薄边框。它看起来像是半透明的,它破坏了窗户的外观和感觉:
我知道这是可能的 - 视觉工作室甚至以某种方式改变了这个边界的颜色!
更新:由于IInspectable在评论中注意到我可以在DwmExtendFrameIntoClientArea()
中使用负边距。我设置了-1值并得到了这个结果:
正如你所看到的 - 它甚至更奇怪。我尝试用颜色填充背景,但没有运气。
答案 0 :(得分:2)
调用此函数后删除一个像素边框:
const MARGINS shadow_on = { 1, 1, 1, 1 };
DwmExtendFrameIntoClientArea(hwnd, &shadow_on);
您需要覆盖WndProc WM_NCCALCSIZE
消息,并返回0
作为结果。
您还需要使用WS_CAPTION
样式创建窗口。 (在Windows XP上,此代码不会生成矩形窗口,但WinXP上没有阴影,因此在Windows XP上应该回退到WS_POPUP
窗口样式)
顺便说一句,添加阴影就足以使用这个边距:
const MARGINS shadow_on = { 1, 0, 0, 0 };
这是干净的windows API代码示例如何创建这样的窗口,它是在Delphi上编写的:https://stackoverflow.com/a/44489430/877099