如何将非客户区域扩展到小于16像素的窗口中?

gitbox

我正在做一个项目,要求我在屏幕上水平绘制一条细线并将其垂直拖动。为了增加一些个性,我尝试向窗口添加DWM玻璃效果,以使其与Windows 7和8中的窗口合并器匹配(尽管我知道在Windows 8中不会获得透明性)。

通过使用DwmExtendFrameIntoClientArea这样的玻璃技巧,通过将非客户区域扩展到客户区域来创建子窗口,从而画出了一条线

MARGINS margins = { -1, -1, -1, -1 };
DwmEnableComposition(DWM_EC_ENABLECOMPOSITION);
DwmExtendFrameIntoClientArea(DIV_HWND, &margins);

我创建这样的窗口:

HWND DIV_HWND = CreateWindow(DIV_NAME,
    NULL,
    WS_VISIBLE,
    0, 0, mon_info.rcWork.right, mon_info.rcWork.top + 3,
    top->hwnd, NULL,
    hInstance, NULL);

和这样的窗口类:

const wchar_t DIV_NAME[] = L"DIV";

WNDCLASS DIV = {};
DIV.lpfnWndProc = DIV_PROC;
DIV.hInstance = hInstance;
DIV.lpszClassName = DIV_NAME;
DIV.hCursor = LoadCursor(NULL, IDC_SIZEALL);

RegisterClass(&DIV);

通过处理WM_GETMINMAXINFO消息并返回2作为ptMinTrackSize.x和y,我已将窗口缩小到16个像素的宽度,并具有希望在窗口边框周围看到的所有漂亮边框和阴影效果。似乎比它小。

我可以在通过SetWindowRgn设置的区域上使用DwmEnableBlurBehindWindow来获得“玻璃状”窗口,但是即使它处于焦点位置,其颜色也是背景窗口的颜色。另外,我想念轻微的阴影和边框。

由于每个边框的宽度为8像素,因此由于边框的尺寸,我似乎可能遇到了尺寸限制。

任何帮助是极大的赞赏!

gitbox

我找到了答案,所以我会把它留在这里,以免其他人需要它。我要做的就是打电话DwmSetWindowAttribute(hwmd, DWMWA_NCRENDERING_POLICY, DWMNCRP_ENABLED, sizeof(int));确保DWM渲染策略不基于窗口样式。这使我可以使用WS_POPUP窗口在玻璃填充得很好的内部获得所需的尺寸。

这里有一些错误:

  1. 如果窗口的Y尺寸小于16px,则顶部和底部会出现一个奇怪的阴影。
  2. 在Vista \ 7上,圆形的窗口边缘使窗口具有奇怪的椭圆形形状。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将UICollectionViewCell的可触摸区域扩展到其范围之外?

来自分类Dev

如何将 yAxis 网格线扩展到 Highcharts 中的完整绘图区域?

来自分类Dev

如何将main div扩展到整个浏览器窗口高度?

来自分类Dev

如何将 UWP 应用程序的窗口扩展到多个屏幕

来自分类Dev

如何将阶梯线区域扩展到折线图和堆积图Power BI中的图形边缘

来自分类Dev

如何将控件扩展到父母的范围之外?

来自分类Dev

如何将“ ==”行为扩展到包含NA的向量?

来自分类Dev

如何将背景扩展到网格之外-Bootstrap

来自分类Dev

如何将dll的方法扩展到同名的类?

来自分类Dev

如何将输入字段扩展到div结束

来自分类Dev

如何将代码/描述扩展到复杂对象?

来自分类Dev

Tkinter:如何在画布窗口中获取框架以扩展到画布的大小?

来自分类Dev

如何将add()扩展到扩展arraylist的静态类?

来自分类Dev

如何理解Gtk +属性并使GtkGrid扩展到可用区域?

来自分类Dev

将主体元素的宽度扩展到超出窗口的宽度

来自分类Dev

WPF将内容扩展到窗口之外

来自分类Dev

如何使用GParted将分区扩展到非相邻的可用空间?

来自分类Dev

如何使用GParted将分区扩展到非相邻的可用空间?

来自分类Dev

如何将网格拉伸和扩展到父边缘

来自分类Dev

KendoTreeView:如何将树扩展到第一级?

来自分类Dev

如何将融合容器的尺寸限制扩展到50以上?

来自分类Dev

如何将这个Gabor面片扩展到边界框的大小?

来自分类Dev

如何将正在运行的应用程序扩展到PCR?

来自分类Dev

如何将单节点Kafka扩展到多节点集群?

来自分类Dev

如何将子div的高度扩展到父高度?

来自分类Dev

如何将应用程序扩展到多个公司

来自分类Dev

如何将视图扩展到抽屉式布局之外?

来自分类Dev

如何将选择扩展到EditText中的整个单词?

来自分类Dev

在UICollectionView中点击时如何将图像扩展到全屏视图?

Related 相关文章

  1. 1

    如何将UICollectionViewCell的可触摸区域扩展到其范围之外?

  2. 2

    如何将 yAxis 网格线扩展到 Highcharts 中的完整绘图区域?

  3. 3

    如何将main div扩展到整个浏览器窗口高度?

  4. 4

    如何将 UWP 应用程序的窗口扩展到多个屏幕

  5. 5

    如何将阶梯线区域扩展到折线图和堆积图Power BI中的图形边缘

  6. 6

    如何将控件扩展到父母的范围之外?

  7. 7

    如何将“ ==”行为扩展到包含NA的向量?

  8. 8

    如何将背景扩展到网格之外-Bootstrap

  9. 9

    如何将dll的方法扩展到同名的类?

  10. 10

    如何将输入字段扩展到div结束

  11. 11

    如何将代码/描述扩展到复杂对象?

  12. 12

    Tkinter:如何在画布窗口中获取框架以扩展到画布的大小?

  13. 13

    如何将add()扩展到扩展arraylist的静态类?

  14. 14

    如何理解Gtk +属性并使GtkGrid扩展到可用区域?

  15. 15

    将主体元素的宽度扩展到超出窗口的宽度

  16. 16

    WPF将内容扩展到窗口之外

  17. 17

    如何使用GParted将分区扩展到非相邻的可用空间?

  18. 18

    如何使用GParted将分区扩展到非相邻的可用空间?

  19. 19

    如何将网格拉伸和扩展到父边缘

  20. 20

    KendoTreeView:如何将树扩展到第一级?

  21. 21

    如何将融合容器的尺寸限制扩展到50以上?

  22. 22

    如何将这个Gabor面片扩展到边界框的大小?

  23. 23

    如何将正在运行的应用程序扩展到PCR?

  24. 24

    如何将单节点Kafka扩展到多节点集群?

  25. 25

    如何将子div的高度扩展到父高度?

  26. 26

    如何将应用程序扩展到多个公司

  27. 27

    如何将视图扩展到抽屉式布局之外?

  28. 28

    如何将选择扩展到EditText中的整个单词?

  29. 29

    在UICollectionView中点击时如何将图像扩展到全屏视图?

热门标签

归档