Windows-программирование DialogBox фоновое изображение - PullRequest
2 голосов
/ 09 декабря 2010

Есть ли хороший учебник или способ добавить фоновое изображение в 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

Ответы [ 2 ]

1 голос
/ 09 декабря 2010

На самом деле есть только один практический способ сделать это. Добавление статического элемента управления изображением в редакторе ресурсов является трудной задачей, поскольку необходимо изменить размер изображения, чтобы охватить весь диалог, что делает редактирование практически невозможным, поскольку все щелчки будут на элементе управления изображением.

Вы можете отложить создание элемента управления изображением до 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 в диалоговое окно. Использование этого стиля делает невозможным использование элементов управления, таких как вкладки или групповые блоки, так как они полагаются на несвязанные фрагменты рисования для объединения с другими элементами управления.

1 голос
/ 09 декабря 2010

Есть один здесь:

как установить фоновое изображение в диалоговом окне в vc ++ 6.0

Дескриптор WM_ERASEBKGND сообщения.

...