首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Windows编程DialogBox背景图像

Windows编程DialogBox背景图像
EN

Stack Overflow用户
提问于 2010-12-09 14:31:49
回答 2查看 4.1K关注 0票数 2

有没有什么好的教程或者方法可以将背景图片添加到Windows DialogBox中?

类似于下面的内容:

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

代码语言:javascript
复制
#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
EN

回答 2

Stack Overflow用户

发布于 2010-12-09 14:37:09

这里有一个:

how to set background image in a dialog box in vc++6.0

处理WM_ERASEBKGND消息。

票数 1
EN

Stack Overflow用户

发布于 2010-12-09 17:48:37

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

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

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

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

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

  • 将WS_EX_COMPOSITED样式添加到对话框中。在Windows2000中添加了这种样式,使得对话框(实际上是任何窗口)在一次传递中将所有子窗口呈现到后台缓冲区,然后将其呈现到屏幕上以消除闪烁。但是,实现Vista的空气玻璃效果的桌面窗口管理器不支持它,因此从Windows6.0开始,此功能被破坏。
  • 将WS_CLIPCHILDREN样式添加到对话框。使用此样式将无法使用选项卡或分组框等控件,因为它们依赖于未剪裁的绘画矩形来与其他控件合成。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4395515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档