有什么好的教程或方法可以将背景图像添加到 Windows 对话框中吗?类似的内容:
我的 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/