Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Янг Майкл Дж. -> "Visual С++ 6. Полное руководство: В 2 т.(том2)" -> 17

Visual С++ 6. Полное руководство: В 2 т.(том2) - Янг Майкл Дж.

Янг Майкл Дж. Visual С++ 6. Полное руководство: В 2 т.(том2) — Бином, 2006. — 530 c.
Скачать (прямая ссылка): vicualcc2006t2.djvu
Предыдущая << 1 .. 11 12 13 14 15 16 < 17 > 18 19 20 21 22 23 .. 173 >> Следующая

CClientDC ClientDC (this); OnPrepareDC (SClientDC); CRect Rect = m_RectSaraple; ClientDC.LPtoDP (SRect); InvalidateRect (SRect) ; UpdateWindow ();
void CFormDemoView::OnUpdateOptionsLight(CCmdUI* pCmdUI) (
// TODO: Здесь добавьте собственный код обработчика pCmdUI->SetRadio (m_Intensity = INT_LIGHT);
}
void CFormDemoView::OnRed() {
// TODO: Здесь добавьте собственный код обработчика m_Red = IsDlgButtonChecked (IDC_RED);
CClientDC ClientDC (this); OnPrepareDC (SClientDC); CRect Rect = m_RectSample; ClientDC.LPtoDP (&Rect); InvalidateRect (SRect); UpdateWindow ();
}
void CFormDemoView::OnGreen() {
// TODO: Здесь добавьте собственный код обработчика m_Green = IsDlgButtonChecked (IDC_GREEN);
CClientDC ClientDC (this); OnPrepareDC (&ClientDC); CRect Rect = m_RectSample; ClientDC.LPtoDP (6Rect); InvalidateRect (SRect); UpdateWindow ();
void CFormDemoView::OnBlue() {
// TODO: Здесь добавьте собственный код обработчика m_Blue = IsDlgButtonChecked (IDC_BLUE);
CClientDC ClientDC (this); OnPrepareDC (SClientDC); CRect Rect = m_RectSample; ClientDC.LPtoDP (SRect);
InvalidateRect (SRect); UpdateWindow ();
>
Новый код напоминает код, добавленный к обработчикам сообщений программы DlgDemo. Так как интенсивность цвета устанавливается с помощью команд меню, а не переключателей, программа должна предоставить обработчики, обновляющие каждую такую команду (OnUpdateOptionsDark и OnUpdateOptionsLight). Обратите внимание: обработчики вызывают функцию CCmdUI: : SetRadio вместо CCmdUI: : SetCheck, чтобы выбранная команда меню была отмечена специальным переключателем, а не флажком (переключатели обычно используются для обозначения группы взаимоисключающих опций).
Как и в программе DlgDemo, обработчики сообщений делают недействительной прямоугольную область диалогового окна, в котором отображен цветовой образец. Однако они сначала преобразовывают координаты области образца из логических в координаты устройства. Этот шаг необходим, потому что класс окна представления косвенно порожден от класса CScrollView и, если все элементы управления не помещаются внутри окна представления, можно прокручивать его содержимое. Таким образом, логические координаты области образца, сохраненные в переменной m_RectSample, отличаются от координат устройства (последние должны передаваться в функцию InvalidateRect). Это преобразование рассмотрено в параграфе '"Преобразование координат" гл. 13.
8. Чтобы добавить в класс представления переопределенную версию функции OnDraw, откройте окно мастера ClassWizard. (Для программы просмотра формы мастер AppWizard по умолчанию не включает функцию OnDraw.) После открытия диалогового окна мастера откройте вкладку Message Map, выберите класс CFormDemoView в списках Class Name и Object Ids. Затем выберите обработчик OnDraw в списке Messages и щелкните на кнопке Add Function, после чего щелкните на кнопке Edit Code и добавьте следующие операторы.
void CFormDemoView::OnDraw(CDC* pDC) {
// TODO: Здесь добавьте собственный код обработчика сообщения
// и/или вызов базового класса
COLORREF Color = RGB
(m_Red ? (m_Intensity==INT_DARK ? 128 : 255) : О, m_Green ? (m_Intensity==INT_DARK ? 128 : 255) : 0, m_Blue ? (m_Intensity=INT_DARK ? 128 : 255) : 0) ;
CBrush Brush (Color);
pDC->FillRect (&m_RectSample, SBrush);
>
Эти операторы работают так же, как и добавленные в программу DlgDemo.
9. Используя ту же методику, что и в пункте 8, добавьте в класс представления переопределенную версию виртуальной функции OnlnitialUpdate.
void CFormDemoview::OnlnitialUpdate()
{
CFormView::OnlnitialUpdate(); GetParentFrame()->RecalcLayout() ; ResizeParentToFit();
GetDlgltem (IDC_SAMPLE)->GetWindowRect (6m_RectSaraple); ScreenToClient (?nt_RectSample);
int Border = (m_RectSample. right - m_RectSanrple. left) / 8 ; m_RectSample.InflateRect (-Border, -Border);
>
Виртуальная функция OnlnitialUpdate класса представления вызывается непосредственно перед первым отображением документа в окне представления (см. гл. 13).
Для размещения всех управляющих панелей программы (в программе FormDemo они отсутствуют) код, сгенерированный мастером AppWizard, после вызова версии функции OnlnitialUpdate базового класса вызывает функцию RecalcLayout объекта главного окна. Чтобы главное окно отображало содержимое окна представления, программа вызывает функцию CScrollView::ResizeParentToFit.
Четыре новых оператора совпадают с операторами, добавленными в функцию OnlnitDialog программы DlgDemo. Этот код добавлен в функцию OnlnitialUpdate, а не в функцию OnlnitDialog, потому что окно представления не получает сообщения wm_initdialog, и, следовательно, функция OnlnitDialog никогда не получила бы управление.
При вызове функции OnlnitialUpdate окно представления еще не было прокручено, поэтому в переменной mRect Sample сохраняются координаты устройства, совпадающие с логическими координатами области образца. После прокрутки окна в этой переменной будут находиться только логические координаты.
10. Добавьте в конструктор класса представления в файле FormDemoView.cpp код инициализации переменной m_intensity.
Предыдущая << 1 .. 11 12 13 14 15 16 < 17 > 18 19 20 21 22 23 .. 173 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100