Рейтинг блогов

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

дата добавления: 03 мая 2003 / 20:30, просмотров: 3964, комментариев: 0

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

 

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

Комментарий автора, сентябрь 2007 г.:
Вот каким «редиской» я был несколько лет назад, какие не хорошие слова употреблял, просто ужась :)))

 

Если вы не читали прошлую статью, то обязательно прочитайте, поскольку вам придется делать 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-кнопки, надеюсь это поможет вам в создании остальных контролов.

Файлы (всего: 1)

+ Пример MDI-формы в стиле XP (10.15 Kb)

Комментарии (всего: 0)

Добавить комментарий rss

В этой записи пока еще нет комментариев...

Добавить комментарий

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