即使调用“SetWindowPos()”后,“SetWindowLong()”函数也不会更改窗口样式

2024-02-23

我使用以下代码创建静态控件:

hWnd = CreateWindowExW( 0,
                        L"STATIC",
                        Content.c_str(),
                        SS_LEFT | WS_VISIBLE | WS_CHILD /*| SS_SUNKEN*/,
                        200,
                        120,
                        120,
                        40,
                        hWndParent,
                        NULL,
                        hInstance,
                        NULL);

如果我启用SS_SUNKEN上面的创建代码中的style,创建的静态控件成功出现凹陷。

但是,我想做的是在创建后更改控件样式。
我试过这个:

void BaseWindowClass::AddStyle(DWORD NewStyle)
{
    // NewStyle     = 0x00001000 = SS_SUNKEN
    LONG oldstyle, changedstyle;
    oldstyle=SetWindowLongW(hWnd, GWL_STYLE, changedstyle=GetWindowLongW(hWnd, GWL_STYLE) | NewStyle);
    UpdateWindowStyles();
    // oldstyle     = 0x50000000
    // changedstyle = 0x50001000 (everything looks normal)
}
void BaseWindowClass::UpdateWindowStyles()
{
    BOOL success;
    success=SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED);
    // success = 0x00000001 (non-zero: SetWindowPos sucseeded)
}

文档:
设置窗口长() http://msdn.microsoft.com/en-us/library/windows/desktop/ms633591%28v=vs.85%29.aspx
设置窗口位置() http://msdn.microsoft.com/en-us/library/windows/desktop/ms633545%28v=vs.85%29.aspx

I call SetWindowPos()打电话后SetWindowLongW()因为在 SetWindowLong 的文档中,它说:

某些窗口数据会被缓存,因此使用 SetWindowLong 所做的更改只有在调用 SetWindowPos 函数后才会生效。具体来说,如果更改任何框架样式,则必须使用 SWP_FRAMECHANGED 标志调用 SetWindowPos 才能正确更新缓存。

而且,在 SetWindowPos 的文档中,它说:

如果您使用 SetWindowLong 更改了某些窗口数据,则必须调用 SetWindowPos 才能使更改生效。对 uFlags 使用以下组合:SWP_NOMOVE | SWP_NOMOVE | SWP_NOMOVE | SWP_NOMOVE SWP_NOSIZE | SWP_NOSIZE SWP_NOZORDER | SWP_NOZORDER SWP_FRAMECHANGED。

即使改变之后SetWindowLongW() and SetWindowPos()我的静态控件的样式没有改变。

我做错了什么,或者我错过了什么?


SS_SUNKEN有效设定WS_EX_STATICEDGE在扩展样式中(GWL_EXSTYLE)窗口很长,所以你可以更新GWL_EXSTYLE适当地重新定位,就像你目前正在做的那样。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

即使调用“SetWindowPos()”后,“SetWindowLong()”函数也不会更改窗口样式 的相关文章

  • EF Core Group By 翻译支持条件总和

    听说 EF Core 2 1 将支持翻译小组 我感到非常兴奋 我下载了预览版并开始测试它 但发现我在很多地方仍然没有得到翻译分组 在下面的代码片段中 对 TotalFlagCases 的查询将阻止翻译分组工作 无论如何 我可以重写这个以便我
  • 如何使用 C# 中的参数将用户重定向到 paypal

    如果我有像下面这样的简单表格 我可以用它来将用户重定向到 PayPal 以完成付款
  • C 编程 - 文件 - fwrite

    我有一个关于编程和文件的问题 while current NULL if current gt Id Doctor 0 current current gt next id doc current gt Id Doctor if curre
  • 没有强命名的代码签名是否会让您的应用程序容易被滥用?

    尝试了解authenticode代码签名和强命名 我是否正确地认为 如果我对引用一些 dll 非强命名 的 exe 进行代码签名 恶意用户就可以替换我的 DLL 并以看似由我签名但正在运行的方式分发应用程序他们的代码 假设这是真的 那么您似
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 为什么两个不同的 Base64 字符串的转换会返回相等的字节数组?

    我想知道为什么从 base64 字符串转换会为不同的字符串返回相同的字节数组 const string s1 dg const string s2 dq byte a1 Convert FromBase64String s1 byte a2
  • 秒表有最长运行时间吗?

    多久可以Stopwatch在 NET 中运行 如果达到该限制 它会回绕到负数还是从 0 重新开始 Stopwatch Elapsed返回一个TimeSpan From MSDN https learn microsoft com en us
  • 不支持将数据直接绑定到存储查询(DbSet、DbQuery、DbSqlQuery)

    正在编码视觉工作室2012并使用实体模型作为我的数据层 但是 当页面尝试加载时 上面提到的标题 我使用 Linq 语句的下拉控件往往会引发未处理的异常 下面是我的代码 using AdventureWorksEntities dw new
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • SetCurrentDirectoryW 中的错误 206

    在我之后之前不清楚的问题 https stackoverflow com questions 44389617 long path name in setcurrentdirectoryw 我以某种方式能够创建一个具有长路径名的目录 但是
  • C++ OpenSSL 导出私钥

    到目前为止 我成功地使用了 SSL 但遇到了令人困惑的障碍 我生成了 RSA 密钥对 之前使用 PEM write bio RSAPrivateKey 来导出它们 然而 手册页声称该格式已经过时 实际上它看起来与通常的 PEM 格式不同 相
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 链接器错误:已定义

    我尝试在 Microsoft Visual Studio 2012 中编译我的 Visual C 项目 使用 MFC 但出现以下错误 error LNK2005 void cdecl operator new unsigned int 2
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • 如何在Xamarin中删除ViewTreeObserver?

    假设我需要获取并设置视图的高度 在 Android 中 众所周知 只有在绘制视图之后才能获取视图高度 如果您使用 Java 有很多答案 最著名的方法之一如下 取自这个答案 https stackoverflow com a 24035591
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 如何使用 postgresql 验证 Rails 中的重叠时间

    我有一个Event model具有start at时间和end at我的日程应用程序中的时间 我想在保存之前验证重叠时间 我创建了我的 Rails 应用程序Cloud9 我的视图图像如下 Day1 07 00 07 20 event1 10
  • JMESpath 表达式,用于按属性过滤对象并返回设置了此属性的对象名称列表

    是否可以编写 JMESPath 表达式来返回设置了特定子属性值的对象名称列表 在下面的示例中 我想获取所有主机名的列表 其中文件存在 stat 存在设置为 true 我的目标是使用 Ansible hostvars 结构来获取存在特定文件的
  • 相当于 .NET 中的 Windows 错误代码

    Microsoft 为 Windows 提供了一系列标准化错误代码 http msdn microsoft com en us library ms681381 VS 85 aspx 当适用时 我发现它们可以在我自己的应用程序中参考 而不是
  • 如何比较相似的代码库?

    我们有几个基于相同代码库构建的 C 项目 它们之间有很多相似之处和共同的代码 但它们是独立开发的 来源未以任何方式共享 即使底层代码没有改变 并且个别行将被调整 更改和替换 类和文件也将被重命名 我希望能够比较不同的代码库并找出有多少代码仍
  • 理解 jQuery 中的 $.proxy()

    From docs http api jquery com jquery proxy 我明白那个 proxy 会改变作为参数传递的函数的范围 有人可以更好地向我解释一下吗 我们为什么要这样做 它最终要做的是确保this函数中将是您想要的值
  • 从 Arrays.asList 返回的列表是否保持与原始数组集合相同的顺序?

    我有一个 ArrayList 我对其进行了多次迭代 并且看起来它没有保持迭代的顺序 我更深入地研究 似乎为这次迭代编写的自定义迭代器标记 由其他人 首先获取传入的 ArrayList 并在迭代之前使用 Arrays asList 将其桥接到
  • 如何从内存字节创建“假”dart:io 文件?

    我有一个 blob 的内存字节 但我想要处理这个 blob 的 API 只接受 dart io File 对象 有没有办法创建一个 假 dart io File 简单地包装我的内存字节 以便我可以将这个 假 文件传递给我的API 假设文件系
  • 在 C++ 程序上使用 mpicc 链接失败

    我正在运行 Ubuntu 11 04 64 位 我已经安装了 OpenMPI 我正在尝试构建以下代码 这是 Gropp Lusk Skjellum 所著的 Using MPI 一书中测试问题的片段 include
  • 在java中如何拥有具有唯一键的HashMap?

    在 Java 中如何获得具有唯一键的 HashMap 或者甚至在 HashMap 中拥有唯一的键是否有意义 或者默认情况下键是唯一的 我是新手 谢谢 哈希映射键是唯一的 添加重复的密钥 然后它将被覆盖 HashMap hm new Hash
  • PE文件中的MZ签名有什么用?

    我正在开发一个程序 它将解析 PE 对象以获取各种信息 但阅读规范后 我无法找出为什么存在 MZ 字节 因为我无法在这 2 个字节应该代表的机器类型列表中找到它 谁能澄清一下吗 MZ 签名是 MS DOS 可重定位 16 位 EXE 格式使
  • 即时搜索算法

    哪种类型的算法对于搜索正在搜索的内容最快 我意识到这已经很接近于问谷歌即时搜索是如何工作的了 但我不是算法专家 而且我对它们越来越感兴趣 像这样的搜索是使用后缀树或类似的东西完成的吗 我想我只是对查询小字符串感兴趣 而不是像谷歌那样查询大量
  • 将 HttpClient 与 SOAP 结合使用

    我一直在尝试使用 Net Framework 4 7 中的 HTTPClient 对象来创建简单的 SOAP 请求 我已经使用了 Postman 中的参数 它工作得很好 这是我的代码 string url http webservices
  • 在 Java 中获取“外部”IP 地址

    我不太确定如何获取机器的外部 IP 地址 因为网络外部的计算机会看到它 我的以下 IPAddress 类仅获取计算机的本地 IP 地址 public class IPAddress private InetAddress thisIp pr
  • ASP.NET 健康监控 404 事件

    HealthMonitoring 是否有捕获 404 错误的内置事件 我已尝试设置所有事件 通过使用 webBaseEvent 并且搜索了两天 但我无法找到或触发未找到文件的事件 我可以创建自己的活动 但希望有一个内置的活动 不 事实并非如
  • window.onload 似乎在 DOM 加载之前触发(JavaScript)

    我遇到了问题window onload and document onload事件 我读到的所有内容都告诉我 在 DOM 完全加载所有资源之前 这些不会触发 这似乎不会发生在我身上 我在 Chrome 4 1 249 1036 41514
  • Twitter 引导下拉菜单在点击时禁用了按钮的原始功能

    所以我刚刚开始使用引导程序的下拉菜单 这很方便 但我有一个问题 为了让下拉菜单发挥作用 似乎在添加 html 属性时完全禁用了触发下拉的元素 dropdown toggle 的原始功能data toggle dropdown 这是有道理的
  • 如何找到未记录的 .NET / COM 库函数?

    如何找出从某些 NET 函数返回的 COM 对象的属性和方法 而这些函数似乎没有记录 在我正在查看的特定示例中 我使用以下函数将图片插入 Excel 中 Set NewPic ActiveSheet Pictures Insert File
  • 无法确定主机“github.com(192.30.252.128)”的真实性

    我正在尝试使用 sudo npm install 为用 Node js 编写的应用程序安装所有依赖项 我的操作系统是 Ubuntu 13 04 但是 我不断收到此警告 The authenticity of host github com
  • 为什么将演示文稿保存到类似文件的对象会产生空白演示文稿?

    作为回应这个答案 https stackoverflow com a 46980767 1868136对于我之前的问题 我编写了以下简短的程序来尝试重现该问题 from pptx import Presentation from io im
  • 即使调用“SetWindowPos()”后,“SetWindowLong()”函数也不会更改窗口样式

    我使用以下代码创建静态控件 hWnd CreateWindowExW 0 L STATIC Content c str SS LEFT WS VISIBLE WS CHILD SS SUNKEN 200 120 120 40 hWndPar