Диалог About. Внесение логики разработчика.
При нажатии кнопки в области картинок мы вызываем диалог About, от которого отказались при создании проекта. Цель такого поступка – самостоятельно создать диалог, поместить в него растровое изображение и ввести команду для его запуска в меню управления (Control menu) главного окна.
Создайте новый диалог (Project › Add Resource › Dialog › New), удалите из его окна кнопку Cancel, разместите в нем Static Control, Group Box и Picture Control.
Для картинки установите свойства: Type: Icon, ID: IDC_EYE, Image: IDI_EYELEFT. Обратите внимание на то, что свойство Image недоступно, пока вы не установите тип изображения Icon. Для окна диалога свойство ID задайте равным IDD_ABOUTBOX. В класс CLookDlg введите обработчик сообщения WM_SYSCOMMAND. Каркас приложения вызывает обработчик этого сообщения в те моменты, когда пользователь выбирает команды из меню управления или когда он пользуется кнопками сворачивания окна:
void CLookDlg::OnSysCommand(UINT nID, LPARAM IParam) { if ((nID & OxFFFO) == IDM_ABOUTBOX) CDialog(IDD_ABOUTBOX).DoModal(); else CDialog::OnSysCommand(nID, IParam); }
Здесь, как видно из кода, мы проверяем идентификатор команды, и если он соответствует команде About, то запускаем диалог в модальном режиме. Теперь необходимо вставить в меню управления окном команду About. Отметьте, что это меню создает каркас приложения и оно не имеет соответствующего ресурса в нашем приложении. Поэтому управление меню производится методами класса смени. Обычно это делают в функции OnlnitDialog. В этой же функции производят инициализацию элементов управления. Внесите в нее следующие изменения:
BOOL CLookDlg::OnlnitDialog() { //======= Добываем адрес меню управления окном CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu) { //====== Добавляем команду About pSysMenu › AppendMenu(MF_SEPARATOR); pSysMenu › AppendMenu(MF_STRING, IDM_ABOUTBOX, "About…"); } //====== Загружаем свой (нестандартный) значок HICON hMylcon =::Loadlcon(GetModuleHandle(0),(char*)(IDI_EYELEFT)); Setlcon(hMylcon, TRUE); // Set big icon Setlcon(hMylcon, FALSE); // Set small icon //====== Если не удалось найти файл, if (IReadErrors () } { PostMessage(WM_QUIT); // уходим return FALSE; } //====== Количество элементов в контейнере //=====преобразуем в строку m_Total.Format("%d",m_nltems); //====== Ищем и расшифровываем первый код ошибки Getlnfo(0); //====== Вызов родительской версии диалога CDialog::OnlnitDialog (); //====== Устанавливаем окно-двойник для счетчика m_Spin.SetBuddy(GetDlgItem(IDC_CURRENT)); //====== Диапазон изменения показаний счетчика m_Spin.SetRange(0, m_nlterns-1); //===== Диапазон изменения позиции ползунка m_Slider.SetRange(0, m_nlteras-l); //===== Устанавливаем цену делений для шкалы ползунка m_Slider.SetTicFreq(m_nltems/10); return TRUE; }