c++ - Windows编程对话框背景图片

标签 c++ windows background bitmap dialog

有什么好的教程或方法可以将背景图像添加到 Windows 对话框中吗?类似的内容:http://dl.dropbox.com/u/26234/dialogbox_background_image.jpg

我的 Recourse 文件(略微修整):

#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 样式添加到对话框。使用这种样式使得无法使用选项卡或组框等控件,因为它们依赖于未剪切的绘画矩形与其他控件合成。

关于c++ - Windows编程对话框背景图片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4395515/

相关文章:

c++ - 如何摆脱 "The documentation for this class was generated from the following files"段?

c++ - mysql C++ 从所有列中选择所有行

c# - 在同一网络上通信的计算机

c - 串行端口 : Read data problem with loopback, 未读取任何内容

c++ - 在我调用 cuCtxDestroy 之后重用 cuMemAlloc 内存是否安全?

Dynamic_cast 的 C++ 安全替代方案

html - 一行中可以并排放置 2 张背景图片吗?

android - 在后台运行 Android 应用程序的良好做法

c++ - Windows SDK 是否限制符合条件的 Windows 版本?

objective-c - IOS 7 后台获取