是否有任何好的教程或方法将背景图像添加到Windows DialogBox中?
类似的东西:
My 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
答案 0 :(得分:1)
答案 1 :(得分:1)
实际上只有一种实用的方法可以做到这一点。 在资源编辑器中添加静态图像控件很麻烦,因为图像需要调整大小以覆盖整个对话框,使得对话几乎无法编辑,因为所有点击都将出现在图像控件上。
您可以将图像控件的创建推迟到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样式添加到对话框中。使用此样式使得无法使用制表符或分组框等控件,因为它们依赖于未剪切的绘制作用以与其他控件合成。