Как заставить диалог использовать иконку при минимизации
|
Стандартное диалоговое окно Windows не имеет иконки при минимизации. Однако, диалоговое окно можно заставить показывать иконку путём замены стандартного класса диалогового окна своим классом. В стандартном классе диалогового окна в поле hIcon структуры WNDCLASS указано значение NULL. Поэтому при минимизации диалога иконка не рисуется. Иконку можно указать заставив диалог использовать другой класс:
- Регистрируем наш класс.
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.
- Заставляем диалоговое окно использовать наш класс.
В шаблоне диалога используем выражение CLASS, чтобы заставить его использовать наш класс: IDD_MYDIALOG DIALOG 0, 0, 186, 92 CLASS "MyDlgClass" : - Создаём диалоговое окно при помощи DialogBox() или CreateDialog().
DialogBox (hinst, MAKEINTRESOURCE (IDD_MYDIALOG), NULL, (DLGPROC)MyDlgFunc); MyDlgFunc() это диалоговая функция, которая присутствует в приложении. Когда диалог минимизируется, то он начинает использовать иконку, указанную в нашем классе.
|