![]() |
![]() ![]() v.5.2011.12.30 |
Хитрый стрелок экранов, Делай и делись снимками экранов! |
|
Visual Basic 5.0/6.0 - Окна и формыВсе статьи / Интерфейс / Окна и формыСоздание MDI-формы в стиле Windows XPАвтор: Алексей Немиро | добавлено: 03.03.2010, 14:41 | просмотров: 4320 (0+) | комментариев: 0 | рейтинг:
![]() Внимание. Во времена 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. Родительская форма
Кодинг
Как обычно, начнем с модуля (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. Результат работы
Для примера, на дочерней форме я разместил образец XP-кнопки, надеюсь это поможет вам в создании остальных контролов.
![]()
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Все статьи этого автора (всего: 35)
Добавлять комментарии могут только зарегистрированные пользователи сайта. Если у Вас уже есть учетная запись на Kbyte.Ru, пройдите процедуру авторизации ![]() Если Вы еще не зарегистрированы на Kbyte.Ru - зарегистрируйтесь. Нет комментариев... |
Зарегистрируйся и получи 10% скидку на добавление своего сайта в каталоги! Подробнее »
|
|