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


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

    Подготовка окна

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

    • установка стиля окна;
    • обработка сообщения WM_ERASEBACKGROUND и отказ от стирания фона;
    • установка pixel-формата;
    • создание контекста устройства (HDC) и контекста передачи (HGLRC);
    • специфическая обработка сообщения WM_SIZE;
    • обработка сообщения WM_PAINT;
    • освобождение контекстов при закрытии окна.

    Как было отмечено ранее, окнам, которые в своей клиентской области используют контекст передачи OpenGL, при создании следует задать биты стиля WS_CLIPCHILDREN и ws_CLiPSiBLiNGS. Сделайте это внутри существующего тела функции PreCreateWindow класса cocview, добавив нужные биты стиля к тем, что устанавливаются в заготовке:

    BOOL COGView::PreCreateWindow(CREATESTRUCT& cs)
    {
    //====== Добавляем биты стиля, нужные OpenGL
    cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
    return CView::PreCreateWindow(cs);
    }
    

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

    BOOL COGView::OnEraseBkgnd(CDC* pDC)
    {
    return TRUE;
    }
    

    Окно OpenGL имеет свой собственный формат пикселов. Нам следует выбрать и установить подходящий формат экранной поверхности в контексте устройства HDC, а затем создать контекст передачи изображения (HGLRC). Для описания формата пикселов экранной поверхности используется структура PIXELFORMATDESCRIPTOR. Выбор формата зависит от возможностей карты и намерений разработчика. Мы зададим в полях этой структуры такие настройки:

    • глубину цвета – 24;
    • тип буферизации – двойной;
    • схему образования цвета RGBA;
    • количество бит для буфера глубины – 32;
    • поддержку регулировки прозрачностью и другие специфические настройки выключим.

    В функцию OnCreate введите код подготовки окна OpenGL. Работа здесь ведется со структурой PIXELFORMATDESCRIPTOR. Кроме того, в ней создается контекст m_hRC и устанавливается в качестве текущего:

    int COGView::OnCreate(LPCREATESTROCT IpCreateStruct)
    {
    if (CView::OnCreate(IpCreateStruct) == -1)
    return -1;
    PIXELFORMATDESCRIPTOR pfd = // Описатель формата
    {
    sizeof(PIXELFORMATDESCRIPTOR), // Размер структуры
    1, // Номер версии
    PFD_DRAW_TO_WINDOW | // Поддержка GDI
    PFD_SUPPORT_OPENGL | // Поддержка OpenGL
    PFD_DOUBLEBUFFER, // Двойная буферизация
    PFD_TYPE_RGBA, // Формат RGBA, не палитра
    24, // Количество плоскостей
    //в каждом буфере цвета
    24, 0, // Для компонента Red
    24, 0, // Для компонента Green
    24, 0, // Для компонента Blue
    24, 0, // Для компонента Alpha
    0, // Количество плоскостей
    // буфера Accumulation
    0, // То же для компонента Red
    0, // для компонента Green
    0, // для компонента Blue
    0, // для компонента Alpha
    32, // Глубина 2-буфера
    0, // Глубина буфера Stencil
    0, // Глубина буфера Auxiliary
    0, // Теперь игнорируется
    0, // Количество плоскостей
    0, // Теперь игнорируется
    0, // Цвет прозрачной маски
    0 // Теперь игнорируется };
    
    Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.