Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 28 января!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Слушай, дружище, зачем так мучиться с этим языком С++, ты ведь не Билл Гейтс. Возьми тот же Python и программируй, он кроссплатформенный, под Windows тоже работает. Я сам давно заметил: то что на Си пишешь в страницу кода, на питоне решается в одну-две строки. При том, питон намного проще, я его сам недавно изучил по видеокурсу вот этому. Кстати, автор отлично там объясняет. Буквально день-два и уже будешь писать на нём, чего не скажешь про сложный С++.

Visual C++.NET
Урок 8. Рисуем по всему окну (класс CWindowDC)

Область окна можно условно разделить на две части - это внутренность окна (так называемая клиентская часть) и рамка окна (куда входит собственно рамка, заголовок, строка состояния, строка меню и др.).

Как нарисовать некоторый примитив в клиентский части окна мы рассматривали в уроке 5. Сейчас мы посмотрим, как можно рисовать по всему окну.

Для рисования по всему окну применяется класс CWindowDC. Он является потомком класса CDC. В своем конструкторе этот класс вызывает API-функцию CWindowDC, которая возвращает контекст устройства для всего окна. В своем деструкторе же этот класс вызывает API-функцию ReleaseDC.

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

void CAboutDlg::OnBnClickedButton1()
 
 {
 
     // TODO: Add your control notification handler code here
 
     //Берем все окно.
 
     CWindowDC dc(this);
 
     //Рисуем кружок.
 
     dc.Ellipse(0, 0, 20, 20);
 
 }

Теперь при нажатии на кнопке в диалоговом окне About в заголовке появится белый кружок:

Белый кружок в заголовке окна

В приведенном примере мы в конструктор класса CWindowDC передаем указатель на все окно this.

Для того, чтобы посмотреть, что в конструкторе дйествительно происходит вызов API-функции GetWindowDC, поставьте точку останова на строке

    ...
 
     CWindowDC dc(this);
 
     ...

и запустите программу по F5. Когда вы остановитесь на этой строке, то для захода в конструктор нажмите F11. Вы окажетесь в следующем коде из библиотеки MFC:

CWindowDC::CWindowDC(CWnd* pWnd)
 
 {
 
     ASSERT(pWnd == NULL || ::IsWindow(pWnd->m_hWnd));
 
 
 
     if (!Attach(::GetWindowDC(m_hWnd = pWnd->GetSafeHwnd())))
 
         AfxThrowResourceException();
 
 }

Видите? Тут мы как раз и вызываем API-функцию GetWindowDC. Кстати, чуть пониже в коде видно, что в деструкторе вызывается API-функция ReleaseDC:

 
 CWindowDC::~CWindowDC()
 
 {
 
     ASSERT(m_hDC != NULL);
 
     ::ReleaseDC(m_hWnd, Detach());
 
 }


<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS