「已注销」 2019-05-30 09:32 采纳率: 0%
浏览 616
已采纳

WM_WINDOWPOSCHANGING消息中的WINDOWPOS->flags成员怎么清除相应位SWP_DRAWFRAME???

WM_WINDOWPOSCHANGING消息备注:

对于具有WS_OVERLAPPED或WS_THICKFRAME样式的窗口,DefWindowProc函数将WM_GETMINMAXINFO消息发送到窗口。

这样做是为了验证窗口的新大小和位置,并强制执行CS_BYTEALIGNCLIENT和CS_BYTEALIGNWINDOW客户端样式。

通过不将WM_WINDOWPOSCHANGING消息传递给DefWindowProc函数,应用程序可以覆盖这些默认值。

在处理此消息时,修改WINDOWPOS中的任何值会影响窗口在Z顺序中的新大小,位置或位置。应用程序可以通过设置或清除WINDOWPOS的flags成员中的相应位来阻止对窗口的更改。

WINDOWPOS结构成员flags描述

flags 类型:UINT

该成员可以是以下一个或多个值。

值 含义

SWP_DRAWFRAME
0×0020

在窗口周围绘制一个框架(在窗口的类描述中定义)。与SWP_FRAMECHANGED标志相同。

SWP_FRAMECHANGED 0×0020

即使窗口的大小未更改,也会向窗口 发送WM_NCCALCSIZE消息。如果未指定此标志,则仅在更改窗口大小时发送WM_NCCALCSIZE。

    case WM_NCCALCSIZE:return 0;
    case WM_WINDOWPOSCHANGING:
    {
        WINDOWPOS *pos = (LPWINDOWPOS)lParam;
        pos->flags;//怎么清除相应位SWP_DRAWFRAME???
        return 0;
    }

WM_NCCALCSIZE消息返回0后可以无边框,但是最大化时会发生位移

不正常(-8, -8)-(1374, 776), 1382x784 (最大化)

正常(0,0)-(1366,768)(最大化)

清除相应位SWP_DRAWFRAME后应该就可以实现正常,但怎么实现???

  • 写回答

2条回答 默认 最新

  • Eleven 2019-05-30 09:37
    关注

    pos->flags &= ~SWP_DRAWFRAME;

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 oracle集群安装出bug
  • ¥15 关于#python#的问题:自动化测试
  • ¥20 问题请教!vue项目关于Nginx配置nonce安全策略的问题
  • ¥15 教务系统账号被盗号如何追溯设备
  • ¥20 delta降尺度方法,未来数据怎么降尺度
  • ¥15 c# 使用NPOI快速将datatable数据导入excel中指定sheet,要求快速高效
  • ¥15 再不同版本的系统上,TCP传输速度不一致
  • ¥15 高德地图点聚合中Marker的位置无法实时更新
  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题