Windows编程DialogBox背景图片

有什么好的教程或方法来添加到Windows的DialogBox的背景图像?

类似的东西: 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,这将在任何非矩形控件下绘制位图,因此,根据“after”后面的文字将是位图背景上的黑色文字。

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

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

  • 将WS_CLIPCHILDREN样式添加到对话框中。 使用这种风格使得不可能使用像制表符或组合框这样的控件,因为它们依赖于未折叠的绘制矩形与其他控件进行合成。

有一个在这里:

如何在vc ++ 6.0的对话框中设置背景图片

处理WM_ERASEBKGND消息。