• Сервис онлайн-записи на собственном Telegram-боте
    Тот, кто работает в сфере услуг, знает — без ведения записи клиентов никуда. Мало того, что нужно видеть свое расписание, но и напоминать клиентам о визитах тоже. Нашли самый бюджетный и оптимальный вариант: сервис VisitTime.
    Для новых пользователей первый месяц бесплатно.
    Чат-бот для мастеров и специалистов, который упрощает ведение записей:
    Сам записывает клиентов и напоминает им о визите;
    Персонализирует скидки, чаевые, кэшбэк и предоплаты;
    Увеличивает доходимость и помогает больше зарабатывать;
    Начать пользоваться сервисом


  • Иллюстрированный самоучитель по Visual Studio .NET

    Взаимодействие классов

    Реакция на выбор в окне выпадающего списка

    Теперь введем реакцию на выбор пользователем новой строки в окне выпадающего списка. Для этого выполните следующие действия:

    1. Откройте в окне редактора Studio .NET шаблон окна диалога IDD_PROPDLG.
    2. Поставьте фокус в окно выпадающего списка IDC_FILLMODE и переведите фокус окно Properties.
    3. Нажмите кнопку Control Events, расположенную на инструментальной панели окна Properties.
    4. Найдите строку с идентификатором уведомляющего сообщения CBN_SELCHANGE и в ячейке справа выберите действие <Add>, для того чтобы там появилось имя функции обработки OnSelchangeFillmode.
    5. Перейдите в окно PropDlg.cpp и введите следующие коды в заготовку функции OnSelchangeFillmode.
    LRESULT CPropDlg
    ::OnSelchangeFillmode(WORD/*wNotifyCode*/, WORD /*wID*/,
    HWND hWndCtl, BOOL& bHandled)
    {
    //====== Цикл пробега по всем объектам типа PropDlg
    for (UINT i = 0; i < m_nObjects; i++)
    {
    CComQIPtr<IOpenGL, &IID_IOpenGL> p(m_ppUnk[i]);
    // Выясняем индекс строки, выбранной в окне списка
    DWORD sel = (DWORD)SendMessage(hWndCtl, CB_GETCURSEL,0.0);
    // Преобразуем индекс в режим отображения полигонов
    sel = sel==0? GL_POINT
    : sel==l? GL_LINE: GL_FILL;
    //====== Устанавливаем режим в классе COpenGL
    if FAILED (p › SetFillMode(sel))
    {
    ShowError();
    return 0;
    }
    }
    bHandled = TRUE;
    return 0;
    }
    

    Обратите внимание на то, что нам пришлось убирать два комментария, чтобы сделать видимым параметры hWndCtl и bHandled.

    Реакция на нажатия кнопок

    При создании отклика на выбор режима изображения полигонов следует учесть попеременное изменение текста и состояния кнопки. Поставьте курсор на кнопку IDC_QUADS и в окне Properties нажмите кнопку Control Events. Затем найдите строку с идентификатором уведомляющего сообщения BN_CLICKED и в ячейке справа выберите действие <Add>. Текст в ячейке должен измениться и стать OnClickedQuads. Введите следующие коды в заготовку функции:

    LRESULT CPropDlg::OnClickedQuads(WORD /*wNotifyCode*/,
    WORD /*wID*/, HWND /*hWndCtl*/, BOOL& bHandled)
    {
    //====== По всем объектам PropDlg
    for (UINT i = 0; i < m_nObjects; i++)
    {
    //====== Добываем интерфейсный указатель
    CComQIPtr<IOpenGL, &IID_IOpenGL> p(m_ppUnk[i]);
    //====== Переключаем режим
    m_bQuad =!m_bQuad;
    //====== Устанавливаем текст на кнопке
    SetDlgltemText(IDC_QUADS, m_bQuad? "Quads": "Strip");
    if FAILED (p › SetQuad(m_bQuad))
    {
    ShowError();
    return 0;
    bHandled = TRUE;
    return 0;
    }
    

    Аналогичные, но более простые действия следует произвести в реакции на нажатие кнопки Выбор файла. Введите функцию для обработки этого события и вставьте в нее следующий код:

    LRESULT CPropDlg: rOnCl'ickedFilename (WORD /*wNotif yCode*/,
    WORD /*wID*/, HWND /*hWndCtl*/, BOOL& bHandled)
    {
    for (UINT i = 0; i < m_nObjects; i++)
    {
    CComQIPtr<IOpenGL, &IID_IOpenGL> p (m_ppUnk [i]);
    //====== Вызываем функцию класса COpenGL
    if FAILED (p › ReadData())
    {
    ShowError ();
    return 0;
    }
    bHandled = TRUE;
    return 0;
    }
    

    Постройте сервер и проверьте работу страницы свойств. Попробуйте прочесть другой файл, например тот, который был создан приложением, созданным в рамках MFC. Так как мы не изменяли формат данных, записываемых в файл, то все старые файлы должны читаться.

    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.