Как применить стиль окна не к о всему классу, а выборочно?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Как применить стиль окна не к о всему классу, а выборочно?

Сообщение arthur2 » 16.03.2008 (Вс) 20:20

Помогите, пожалуйста, разобраться! С помощью стилей я делаю тень у окна. Всё бы хорошо, но тень появляется сразу у всех окон того же класса, а мне нужно только у некоторых.

Как добиться, чтобы стиль применялся выборочно?

Чтобы было понятно, в чём проблемма, прикладываю файл:
Вложения
Shadow.zip
(2.14 Кб) Скачиваний: 79

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.03.2008 (Вс) 21:17

arthur2
Ты не поверишь, но SetWindowLong.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Сообщение arthur2 » 16.03.2008 (Вс) 21:53

Ты не поверишь, но я пробовал (следы в примере остались - закоментированые).

Толку никакого. Иногда вообще не срабатывает, а иногда - всё равно действует на весь класс (причём, логики, когда срабатывает, а когда нет, я не понял).

Может я, конечно, что-то делал не так, но что?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.03.2008 (Вс) 22:10

Код: Выделить всё
Private Sub Form_Load()
        SetParent pic1.hWnd, 0
        SetWindowLong pic1.hWnd, -8, hWnd
        SetParent pic2.hWnd, 0
        SetWindowLong pic2.hWnd, -8, hWnd

    Call SetWindowLong(pic1.hWnd, GCL_STYLE, GetWindowLong(pic1.hWnd, GCL_STYLE) Or CS_DROPSHADOW)
End Sub

У меня исправно работает.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.03.2008 (Вс) 22:15

Стоп. Это же стиль класса.

Стиль класса можно применять только к классу.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Сообщение arthur2 » 16.03.2008 (Вс) 22:47

Не знаю, SetWindowLong у меня почему-то не срабатывает вообще.

Те разы, в которых она у меня "сработала" я повторить специально не могу. Подозреваю, что это просто оставался результат от предыдущих запусков с SetClassLongA (а стиль сохраняется, как оказалось, пока не перезапущен весь бейсик - если остановить программу, когда у пикчей уже включена тень, при новом запуске тень уже будет)

Да, вроде бы, действует только на весь класс. А что же делать?

Я, как обычно, пошёл в обход - положил нужные мне окна в другие контейнеры и всю эту котовасию со стилями применил к контейнерам. И всё-таки любопытство осталось - как решить проблемму принципиально?

Может возможно исхитриться как-нибудь из класса-пикчи соорудить подкласс-пикчуСТенью и стиль применять уже к подклассу?

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 16.03.2008 (Вс) 23:04

arthur2
Правильное решение проблемы - использование отличного от ThunderPictureBoxDCкласса.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

arthur2
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1688
Зарегистрирован: 23.01.2008 (Ср) 14:35

Сообщение arthur2 » 17.03.2008 (Пн) 1:07

Собстенно, в оригинале у меня юзерконтроллы. Решил, поместив квадратные контроллы в пикчебоксы и уже к ним приделав тень. А те контроллы, что мультики, оставил как есть.

Собственно, проблемма из этого и появилась - тень к контроллу сложной формы рисуется ни чуть не хуже, чем к квадратным, и даже симпатично получается. Но если форма контролла начинает меняться, тень за ней не поспевает.

Спасибо.

А такой вопрос: тень ведь работает только начиная с ХР, так вот: нужно ли делать проверку на ось, или в старых виндах этот код просто безопасно ничего не сделает?


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot и гости: 96

    TopList