Windows编程对话框背景图片

2024-02-29

有没有什么好的教程或方法可以将背景图像添加到 Windows 对话框中?

Something similar to this: http://dl.dropbox.com/u/26234/dialogbox_background_image.jpg

我的资源文件(稍微修剪一下):

#include <afxres.h>
#include "WindowSettings.h" // for IDC_?, IDD_DLG

// Dialog Box Template for IDD_DLG
//
IDD_DLG DIALOGEX 200, 100, 200, 350
STYLE DS_SETFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION DLG_NAME
FONT 8, "MS Sans Serif", 0, 0, 0x0
BEGIN
    LTEXT           "Display Device", IDC_STATIC, 10, 5, 50, 10
    COMBOBOX        IDC_DIS, 10, 15, 180, 64, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP
    LTEXT           "Resolution", IDC_STATIC, 10, 35, 50, 10
    COMBOBOX        IDC_RES, 10, 45, 180, 50, CBS_DROPDOWNLIST | WS_DISABLED | WS_VSCROLL | WS_TABSTOP
    DEFPUSHBUTTON   "Go", IDC_GO, 40, 205, 50, 15, WS_DISABLED
    PUSHBUTTON      "Cancel", IDCANCEL, 110, 205, 50, 15
END

实际上只有一种实用的方法可以做到这一点。 在资源编辑器中添加静态图像控件是一件痛苦的事情,因为需要调整图像大小以覆盖整个对话框,这使得对话框几乎无法编辑,因为所有单击都将在图像控件上进行。

您可以将图像控件的创建推迟到 WM_INITDIALOG,但反对使用控件的第二个标志是窗口控件在重叠时无法优雅地绘制。

因此,您需要手动执行此操作,在 WM_INITDIALOG 中加载位图,存储 HBITMAP,并将其绘制在 WM_ERASEBKGND 消息上。

如果您另外将 HBITMAP 转换为 HBRUSH,则可以处理 WM_CTLCOLORSTATIC (和其他 WM_CTLCOLORxxx)消息并从消息中返回 HBRUSH,这将在任何非矩形控件下绘制位图,因此,根据您的“之后”屏幕截图,之后的文本将是位图背景上的黑色文本。

最后一个问题是,如果对话框可调整大小,它会闪烁。有一些方法可以尝试解决这个问题,但没有一个是 100% 成功的:

  • 将 WS_EX_COMPOSITED 样式添加到您的对话框中。 Windows 2000 中添加了这种样式,使对话框(实际上是任何窗口)一次性将所有子窗口渲染到后台缓冲区,然后将其渲染到屏幕上,从而消除闪烁。然而,实现 Vista 的 Aero Glass 效果的桌面窗口管理器并不支持它,因此从 Windows 6.0 开始,此功能已被破坏。

  • 将 WS_CLIPCHILDREN 样式添加到对话框中。使用这种样式使得无法使用选项卡或组框等控件,因为它们依赖于未剪切的绘制矩形来与其他控件组合。

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

Windows编程对话框背景图片 的相关文章

随机推荐

  • 如何在 JavaScript 中有效地将大块细分为许多大小为 2 的幂的小块

    建设关闭这个答案 https stackoverflow com questions 66253424 how to efficiently segment a large block of predefined size into sma
  • Android 编译器上的 Delphi PATH 错误

    我刚刚在我办公室的 DELL 工作站中安装了 Delphi 10 Seattle 并且能够编译 32 位和 64 位 当我选择Android时 出现这样的错误 执行错误 命令 PATH C Program 文件 Java jdk1 7 0
  • 使用 OpenCV 2.2 实施 Sift

    有人知道 SIFT 实现示例与 OpenCV 2 2 的链接吗 问候 下面是一个最小的例子 include
  • 如何知道 Cosmos 中的 Cygnus 通知表名称?

    我正在使用 Cygnus 通过 httpfs 向 Cosmos 发送 Orion Context Broker 通知 Hive 历史记录中发送到 Cosmos 的数据存储在哪里 存储 Cygnus 数据的表的名称是什么 Cygnus 在 C
  • Flask URL Route:将所有其他 URL 路由到某个函数

    我正在使用 Flask 0 9 我有使用 Google App Engine 的经验 在 GAE 中 url 匹配模式按照它们出现的顺序进行评估 先到先得 Flask 中也是同样的情况吗 在 Flask 中 如何编写 url 匹配模式来处理
  • Android 多屏限定符定义

    我想创建一个与大量设备和屏幕兼容的布局 我一直在研究 发现最常见的屏幕分辨率是 249x320 480x800 600x1024 720x1280 以及与这些成比例的其他一些屏幕 好吧 阅读文档后我发现有两种方法可以做到这一点 到 3 2
  • 使用 J2V8 从 .js 执行函数

    我正在使用 J2V8 在 Android 上执行 JavaScript 代码 在我的 Java 代码中 我可以访问和执行单独 js 文件的 JavaScript 函数吗 如果可以的话 我该怎么做 与许多 JavaScript 环境一样 您只
  • Anorm 中的原子 MySQL 事务

    我编写了一个简单的命中计数器 它使用 Anorm 更新 MySQL 数据库表 我希望交易是原子的 我认为最好的方法是将所有 SQL 字符串连接在一起并执行一个查询 但这对于 Anorm 似乎是不可能的 相反 我将每个选择 更新和提交放在单独
  • 如何在 PyTorch 中保存模型架构?

    我知道我可以通过以下方式保存模型torch save model state dict FILE or torch save model FILE 但两者都不保存模型的架构 那么我们如何在 PyTorch 中保存模型的架构 就像创建一个 p
  • R CMD 氧气无法识别

    我刚刚尝试了 Roxygen 套餐 在 R 中 我可以运行 Roxygen Vignette 中的示例 但是在命令行中 R CMD roxygen未被识别为有效命令 当我跑步时R CMD help 我可以看到全部INSTALL check
  • 如何设置超时来中止工厂或服务内的 $http.get() ?

    我有以下方法getData url 在我的factory它使用 http get url 从 URL 获取数据 angular module az app factory WebServiceFactory function http q
  • 使用 ResumableJS 取消、中止和重试单个文件上传

    我已经成功地使用以下方法将多个文件分块上传到服务器可恢复JS http www resumablejs com 在上传过程中 用户可以看到整体上传进度和单个文件上传百分比 还可以暂停 恢复整个上传 我现在想要的是允许用户取消 中止单个文件上
  • 无法从没有窗口的视图中呈现弹出窗口

    这个错误说明什么 Popovers cannot be presented from a view which does not have a window 救了我一命的事情 if self view window nil popoverC
  • 如何读取浏览器中所有存储的 Cookie

    我只想读取浏览器中存储的所有 cookie 使用标准 Javascript API 我无法阅读它 但有没有一种方法可以读取所有 cookie 而不仅仅是通过我的网站注册的 cookie 浏览器安全会故意阻止这种情况 如果你能做到这一点 你就
  • 从代码运行测试时在 Eclipse 中显示 JUnit 视图

    当我在 Eclipse 中运行 Testclass 时 我会看到显示树结构以及测试是否成功的 JUnit 视图 如果我从代码开始测试 JUnitCore core new JUnitCore core run SimpleTests cla
  • MySQL语句选择特定列的最新条目

    我正在使用 MySQL 并且该表是使用以下架构创建的 CREATE TABLE example id INT UNSIGNED NOT NULL AUTO INCREMENT version INT UNSIGNED NOT NULL te
  • 如何加载离子段内的其他页面?

    任何人都知道如何加载离子段内的其他页面 我正在使用 ionic v4 我有三页试图在离子段内部显示 概况 疫苗接种 发育 我想将页面的功能分开以便于维护 这是孩子的详细信息页面 https i stack imgur com pta0M p
  • BOOST_FUSION_ADAPT_STRUCT 的限制

    我尝试过玩BOOST FUSION ADAPT STRUCT宏并尝试了一些天真的事情 例如使用 Fusion 打印任何任意结构 从此开始文档中给出的示例代码 http www boost org doc libs 1 55 0 libs f
  • 为什么 Bert Transformer 使用 [CLS] 令牌进行分类而不是对所有令牌进行平均?

    我正在对 bert 架构进行实验 发现大多数微调任务都将最终的隐藏层作为文本表示 然后将其传递给其他模型以进行进一步的下游任务 Bert 的最后一层如下所示 我们获取每个句子的 CLS 标记 图片来源 https jalammar gith
  • Windows编程对话框背景图片

    有没有什么好的教程或方法可以将背景图像添加到 Windows 对话框中 Something similar to this 我的资源文件 稍微修剪一下 include