Мой Kbyte.Ru
Рассылка Kbyte.Ru
Группы на Kbyte.Ru
Партнеры Kbyte.Ru
Реклама
Сделано руками
Сделано руками
> Статьи - Алексей Немиро -

Visual Basic 5.0/6.0 - Окна и формы

Все статьи / Интерфейс / Окна и формы

Создание MDI-формы в стиле Windows XP

Автор: Алексей Немиро | добавлено: 03.03.2010, 14:41 | просмотров: 3920 (1+) | комментариев: 0 | рейтинг: *x7

Внимание. Во времена Windows 7 статья само-собой не актуальна, ибо писалась для Windows 9x. Тем не менее, статья может быть интересна тем, кто интересуется созданием нестандартных окон, а также в целом графическими функциями Visual Basic 6.0.


В прошлый раз я рассказывал о том, как можно сделать XP-окно без использования дополнительных элементов управления ("Разработка окна в стиле Windows XP"), я продолжу эту тему, но на этот раз расскажу как можно сделать MDI-форму в таком же стиле.

 

Хочу сразу сказать, что данная статья, как и прошлая, всего лишь указывает на метод, при помощи которого можно создать "иллюзию" XP-окна. Конечно, можно написать все, начиная с изменения размеров и кончая потерей фокуса, но тогда ваш мозг просто на просто уснет и никогда не проснется, и придется вам всю жизнь использовать чужой мозг, и вместо эволюции вы начнете деградировать и превращаться в "зеленого ламера". Вы уж не обижайтесь, уважаемые читатели, но это факт.

 

Если вы не читали прошлую статью, то обязательно прочитайте, поскольку вам придется делать XP-окна и понадобится исходник.

 

Визуальная часть

 

Для создания MDI-окна, чтобы не делать дважды одно и тоже, мы возьмем пример их прошлой статьи ("Разработка окна в стиле Windows XP"), frmMain переименуем в frmMDIForm и добавим еще одно, точно такое же, окно, которое назовем frmMDIChild, по размерам оно должно быть немного меньше fmrMDIForm. Как вы уже наверное поняли, frmMDIForm будет у нас родительской(материнской) формой, а frmMDIChild - дочерней. В процессе разработки, я столкнулся с небольшой проблемой, когда поместил frmMDIChild в frmMDIForm, поскольку у форм нет заголовка (он скрыт), то дочерняя форма при перетаскивании заходила на заголовок родительской формы. Я не стал загружать голову математикой, да и вам не советую, и для решения этой проблемы решил использовать PictureBox со свойством BorderStyle = 0, и именем picMDI , который должен быть размещен на родительской форме (frmMDIForm).

 

Рис. 1. Родительская форма

 

Рис. 1. Родительская форма

 

Кодинг

 

Как обычно, начнем с модуля (mdlMainModul), в него надо добавить новую функцию, которая позволит нам поместить frmMDIChild в frmMDIForm:

 

Public Declare Function SetParent Lib "user32" (ByVal hWndChild As Long, ByVal hWndNewParent As Long) As Long

 

Затем перейдем к родительской форме (fmrMDIForm) и в событие Form_Resize добавим следующий код:

 

picMDI.BackColor = RGB(236, 233, 216)

picMDI.Left = (2 * Screen.TwipsPerPixelX): picMDI.Top = imgCaption.Height

picMDI.Width = Me.Width - (4 * Screen.TwipsPerPixelX)

picMDI.Height = Me.Height - imgCaption.Height - (2 * Screen.TwipsPerPixelY)

 

Для того чтобы поместить дочернюю форму (frmMDIChild) в родительскую (fmrMDIForm) в событие Form_Load родительской формы надо добавить следующий код:

 

frmMDIChild.Show 'Показываем дочернюю форму

SetParent frmChild.hwnd, Me.picMDI.hwnd 'Перемещаем дочернюю форму в родительскую

frmMDIChild.Move (picMDI.Width - frmMDIChild.Width) / 2, (picMDI.Height - frmMDIChild.Height) / 2 'Выравниваем по центру

 

Happy Конец

 

Как и в прошлый раз, все оказалось просто. На рисунке №2 вы можете наблюдать результат нашей работы.

 

Рис. 2. Результат работы

 

Рис. 2. Результат работы

 

Для примера, на дочерней форме я разместил образец XP-кнопки, надеюсь это поможет вам в создании остальных контролов.

 

Пример можно скачать здесь

+ Добавить в избранное
    ? Помощь
Об авторе

Алексей Немиро

Интернет-деятель. Автор многочисленных статей и переводов статей по программированию и информационным технологиям. Работы Алексея можно найти в популярных печатных изданиях компьютерной тематики. Автор проекта Kbyte.Ru.
Сейчас Алексей занимается профессиональным Web-программированием на базе технологий .NET Framework. Иногда пишет различные программки и компоненты для Windows и Android. В свободное время занимается Web-дизайном, увлекается фото- и видеосъемкой.

См. также:
Профиль автора
Алексей Немиро
Последние комментарии (всего: 0)

Добавлять комментарии могут только зарегистрированные пользователи сайта.
Если у Вас уже есть учетная запись на Kbyte.Ru, пройдите процедуру авторизации OpenID.
Если Вы еще не зарегистрированы на Kbyte.Ru - зарегистрируйтесь.


Нет комментариев...

Авторизация
 
OpenID
Зарегистрируйся и получи 10% скидку на добавление своего сайта в каталоги! Подробнее »
Поиск по сайту
Реклама
Счетчики