Статья: Реализация стиля Office XP

Статья: Реализация стиля Office XP




👉🏻👉🏻👉🏻 ВСЯ ИНФОРМАЦИЯ ДОСТУПНА ЗДЕСЬ ЖМИТЕ 👈🏻👈🏻👈🏻




























































Недавно я пытался найти в сети ToolBar-элемент в стиле Office XP. Поиски мои не увенчались успехом - все элементы были либо сложны в встраивании в проект, либо платны. Тогда я принял отчаянные меры - написал сам... А, как оказалось, в написании тулбара не было оссобенных проблем. Вот как я сделал.
Создал MFC SDI проект с именем StyleXP. С помощью ClassWizard'а добавил новый класс CToolBarXP, наследованный от CToolBar (CToolBar в списке нет, но я выбрал CToolBarCtrl и вручную изменил имя предка). Дальше встал вопрос: "Какие функции перегружать?". Просмотрев весь предоставленный список в ClassWizard'е, я выбрал WM_PAINT. Долго я с ним провозился, но таки вышло вот что:
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
// Выщитываем цвет бэк-граунда(для пущей красоты
// я решил слегка отклониться от стандартного цвета).
// Таким же образом выщитываем цвет выделенной кнопки...
shdw = GetSysColor(COLOR_3DSHADOW);
BtnLength = LOWORD(GetToolBarCtrl().GetButtonSize());// Получаемширинукнопки
for(int i = 0, x = 0, n = 0; i != GetToolBarCtrl().GetButtonCount(); i++)
GetToolBarCtrl().GetButton(i, &btn);// Получаемданныеокнопке
if(btn.fsStyle & TBSTYLE_SEP)// Сепаратор ?
dc.MoveTo(x+2, 2);// Рисуем вертикальную линию
if(m_nSelected == i)// Накнопкемышка?
GetToolBarCtrl().GetImageList()->Draw(&dc, n, CPoint(x+2, 2), 0);
else if(!btn.fsStyle & TBSTYLE_SEP)// Кнопкавобычномсостоянии
GetToolBarCtrl().GetImageList()->Draw(&dc, n, CPoint(x+3, 3), 0);
// Do not call CToolBarCtrl::OnPaint() for painting messages
Так, сразу пока не отвлёкся - в класс надо добавить переменную:
class CToolBarXP : public CToolBarCtrl
//***********************************************
int m_nSelected;// Номер кнопки под мышкой :-)
В конструкторе класса надо надо инициализировать сию переменную числом -1.
Теперь добавляем через КлассВизард обработку перемещений мышкой:
void CToolBarXP::OnMouseMove(UINT nFlags, CPoint point)
CToolBar::OnMouseMove(nFlags, point);
for(int i = 0; i != GetToolBarCtrl().GetButtonCount(); i++)
GetToolBarCtrl().GetButton(i, &btn);// Получаемданныеокнопке
GetItemRect(i, rt);// Получаем рект кнопки
if(btn.fsStyle & TBSTYLE_SEP) continue;// Сепараторы пропускаем
if(rt.PtInRect(point) && m_nSelected != i)// Мышканадэтой?
m_nSelected = i;// Сохраняемвыделение
SetTimer(11, 100, NULL);// Пускаемтаймер
void CToolBarXP::OnTimer(UINT nIDEvent)
if(nIDEvent == 11)// На всякий пожарный
// Проверка на наличие внутри курсора
// Если мыши нет то оставляем слежение
// И убиваем таймер ("А зачем нам кузнец? Нам кузнец не нужен...") ;)
Фу... Вроде всё. А! Теперь лезем в MainFrame.h и меняем тип переменной m_wndToolBar с CToolBar на CToolBarXP, незабыв перед этим #include'ть файл с нашим тулбаром. Теперь всё! Жмём F7, ждём пока проект скомпилируется и F5. Лицезреем красочный тулбар.
Так, тулбар есть. Далее - CReBarXP. Ну это вообще проще пареной репы: создаём MFC проект с помеченной галочкой Internet Explorer ReBars. Добавляем новы класс CReBarXP, наследованный от CReBar, перегружаем у него WM_PAINT и вписываем туда вот что:
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
shdw = GetSysColor(COLOR_3DSHADOW);
for(UINT i = 0; i != GetReBarCtrl().GetBandCount(); i++)
GetReBarCtrl().GetRect(i, rBand);// Получаемрект
for(int y = 4; y != rBand.Height()-4; y+=2)// Ресуемсимпатичнуюзакраску
dc.MoveTo(rBand.left+3,rBand.top+y);
dc.LineTo(rBand.left+6,rBand.top+y);
// Do not call CReBar::OnPaint() for painting messages
Всё! Теперь только меняем тип ReBar на CReBarXP(обязательно вставив перед объявлением класса include-команду).
Так, так... ToolBarXP и ReBarXP есть. Теперь StatusBar'ом займёмся. Проект как создавать я писать не буду, сразу переходим к делу.
Добавляем новый класс CStatusBarXP, наследованный от CStatusBar. В нём переопределяем OnPaint и пишим тудыва:
CPaintDC dc(this); // device context for painting
// Высчитываем цвета(большая часть кода:))
shdw = GetSysColor(COLOR_3DSHADOW);
// А вот непосредственно рисование:
for(int i = 0; i != GetCount(); i++)
GetStatusBarCtrl().GetRect(i, rPane);
GetPaneText(i, Text);// Получаемтекст
dc.Rectangle(rPane);// Рисуем рамку
if(GetPaneStyle(i)) dc.TextOut(rPane.left+3, rPane.top+1, Text);
if(GetPaneStyle(i)) dc.DrawText(Text, rPane, 0);
Усё! Теперь только меняем тип переменной с CStatusBar на CStatusBarXP и глядим. Вид, конечно, до первых двух классов не дотягивает, но... "сойдёт для сельской местности".

Название: Реализация стиля Office XP
Раздел: Рефераты по информатике, программированию
Тип: статья
Добавлен 04:57:05 05 марта 2007 Похожие работы
Просмотров: 28
Комментариев: 16
Оценило: 3 человек
Средний балл: 5
Оценка: неизвестно   Скачать

Срочная помощь учащимся в написании различных работ. Бесплатные корректировки! Круглосуточная поддержка! Узнай стоимость твоей работы на сайте 64362.ru
Если Вам нужна помощь с учебными работами, ну или будет нужна в будущем (курсовая, дипломная, отчет по практике, контрольная, РГР, решение задач, онлайн-помощь на экзамене или "любая другая" учебная работа...) - обращайтесь: https://clck.ru/P8YFs - (просто скопируйте этот адрес и вставьте в браузер) Сделаем все качественно и в самые короткие сроки + бесплатные доработки до самой сдачи/защиты! Предоставим все необходимые гарантии.
Привет студентам) если возникают трудности с любой работой (от реферата и контрольных до диплома), можете обратиться на FAST-REFERAT.RU , я там обычно заказываю, все качественно и в срок) в любом случае попробуйте, за спрос денег не берут)
Да, но только в случае крайней необходимости.

Статья: Реализация стиля Office XP
Сочинение Про Город Туймазы
Отчет по практике по теме Организации производства на предприятии ОАО 'Камволь'
Курсовая Работа На Тему Разработка Программ С Использованием Динамической Памяти
Салауатты Өмір Салты Балабақшада Эссе
Курсовая работа по теме Интернет-маркетинг в структуре рекламной деятельности
Подсудность В Уголовном Процессе Курсовая
Реферат: Правовой порядок, методы и инструменты регулирования денежной массы и денежного обращения
Доклад по теме Бизнес–план развития открытого акционерного общества "Ресторан "Арбат" на 2007 год
Курсовая работа: Human being hypostases in "Gulliver’s travels" by Johnatan Swift
Доклад: Броневой Леонид Сергеевич
Эссе Про Загрязнение Окружающей Среды
Готовые Контрольные Работы По Геометрии 7 Класс
Растровая Электронная Микроскопия Реферат
Отчет по практике по теме Исследование работы компании "Панорама"
Реферат: Определение содержания бизнес-плана
Реферат: Charles Dickens Great Expectations Essay Research Paper
Дипломная работа по теме Условия возникновения, развития и итоги промышленного переворота с 1800 по 1861 год
Определение коэффициента аргументированности
Реферат по теме Политические партии Германии
Дипломная работа по теме Широкополосные беспроводные сети передачи информации
Реферат: Значение ученого, инженера в обществе. Проблема ответственности
Реферат: Первые эмансипированные женщины
Реферат: Производство гальванических фосфатных покрытий стальных деталей на базе гальванического цеха завода Точмаш

Report Page