15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как заставить диалог использовать иконку при минимизации

Стандартное диалоговое окно Windows не имеет иконки при минимизации. Однако, диалоговое окно можно заставить показывать иконку путём замены стандартного класса диалогового окна своим классом.

В стандартном классе диалогового окна в поле hIcon структуры WNDCLASS указано значение NULL. Поэтому при минимизации диалога иконка не рисуется.

Иконку можно указать заставив диалог использовать другой класс:

  1. Регистрируем наш класс.
          WNDCLASS wc;
    
          wc.style = CS_DBLCLKS | CS_SAVEBITS | CS_BYTEALIGNWINDOW;
          wc.lpfnWndProc = DefDlgProc;
          wc.cbClsExtra = 0;
          wc.cbWndExtra = DLGWINDOWEXTRA;
          wc.hInstance = hinst;
          wc.hIcon = LoadIcon(hinst, "DialogIcon");
          wc.hCursor = LoadCursor(NULL, IDC_ARROW);
          wc.hbrBackground = COLOR_WINDOW + 1;
          wc.lpszMenuName = NULL;
          wc.lpszClassName = "MyDlgClass";
          RegisterClass(&wc); 

    ЗАМЕЧАНИЕ: Заданная по умолчанию процедура диалогового окна DefDlgProc(), используется как оконная процедура класса. Это заставляет окна этого класса вести себя как стандартные диалоги. Поле cbWndExtra должно указывать на DLGWINDOWEXTRA - в этих дополнительных байтах диалоговое окно хранит информацию о состоянии. Иконка, которая будет отображаться при минимизации диалогового окна, указывается в поле hIncon.

  2. Заставляем диалоговое окно использовать наш класс.

    В шаблоне диалога используем выражение CLASS, чтобы заставить его использовать наш класс:
          IDD_MYDIALOG DIALOG 0, 0, 186, 92
          CLASS "MyDlgClass"
          : 
  3. Создаём диалоговое окно при помощи DialogBox() или CreateDialog().
          DialogBox (hinst,
                     MAKEINTRESOURCE (IDD_MYDIALOG),
                     NULL,
                    (DLGPROC)MyDlgFunc); 

    MyDlgFunc() это диалоговая функция, которая присутствует в приложении. Когда диалог минимизируется, то он начинает использовать иконку, указанную в нашем классе.