Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут
закрыты.
Читайте
требования к создаваемым темам.
-
Antonariy
-
- Повелитель Internet Explorer
-
-
- Сообщения: 4824
- Зарегистрирован: 28.04.2005 (Чт) 14:33
- Откуда: Мимо проходил
-
Antonariy » 03.07.2007 (Вт) 11:17
Пытаюсь отобразить сабжи на форме, где они выставлены в False:
- Код: Выделить всё
lRet = GetWindowLong(hwnd, GWL_STYLE)
SetWindowLong hwnd, GWL_STYLE, lRet Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX
Не отображаются
Несмотря на то, что пример взят с сайта MS.
Лучший способ понять что-то самому — объяснить это другому.
-
keks-n
-
- Доктор VB наук
-
-
- Сообщения: 2509
- Зарегистрирован: 19.09.2005 (Пн) 17:17
- Откуда: г. Москва
-
keks-n » 03.07.2007 (Вт) 11:42
Там надо сделать Update окна каким-то образом... Я делал через SetWindowRgn со вторым параметром 1, хоть это и криво.
-
Antonariy
-
- Повелитель Internet Explorer
-
-
- Сообщения: 4824
- Зарегистрирован: 28.04.2005 (Чт) 14:33
- Откуда: Мимо проходил
-
Antonariy » 03.07.2007 (Вт) 12:15
Не помогло. Только xp-шный стиль слетел.
Лучший способ понять что-то самому — объяснить это другому.
-
keks-n
-
- Доктор VB наук
-
-
- Сообщения: 2509
- Зарегистрирован: 19.09.2005 (Пн) 17:17
- Откуда: г. Москва
-
keks-n » 03.07.2007 (Вт) 12:31
Код почему-то начинает работать после клика по заголовку...
Также он вполне исправно работает в Form_Load...
-
Antonariy
-
- Повелитель Internet Explorer
-
-
- Сообщения: 4824
- Зарегистрирован: 28.04.2005 (Чт) 14:33
- Откуда: Мимо проходил
-
Antonariy » 03.07.2007 (Вт) 12:32
UpdateWindow тоже не помогло (frm.Refresh пробовал до этого, разве не то же самое?). Из Form_Load вызывать нельзя:
- Код: Выделить всё
Select Case Sizable
Case "sizable" ': Set frm = New frmSizable
Set frm = New frmFixed
frm.BorderStyle = 2
lRet = GetWindowLong(frm.hwnd, GWL_STYLE)
SetWindowLong frm.hwnd, GWL_STYLE, lRet Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX
Case "fixed": Set frm = New frmFixed
Case "mdi": Set frm = New MDIForm1
Case "mdichild": Set frm = New frmMDIChild
End Select
Лучший способ понять что-то самому — объяснить это другому.
-
GSerg
-
- Шаман
-
-
- Сообщения: 14286
- Зарегистрирован: 14.12.2002 (Сб) 5:25
- Откуда: Магадан
GSerg » 03.07.2007 (Вт) 13:37
MSDN писал(а):If you have changed certain window data using SetWindowLong, you must call SetWindowPos to have the changes take effect. Use the following combination for uFlags: SWP_NOMOVE | SWP_NOSIZE | SWP_NOZORDER | SWP_FRAMECHANGED.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас
-
Antonariy
-
- Повелитель Internet Explorer
-
-
- Сообщения: 4824
- Зарегистрирован: 28.04.2005 (Чт) 14:33
- Откуда: Мимо проходил
-
Antonariy » 03.07.2007 (Вт) 13:49
- Код: Выделить всё
Select Case Sizable
Case "sizable" ': Set frm = New frmSizable
Set frm = New frmFixed
frm.BorderStyle = 2
lRet = GetWindowLong(frm.hwnd, GWL_STYLE)
SetWindowLong frm.hwnd, GWL_STYLE, lRet Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX
SetWindowPos frm.hwnd, 0, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE Or SWP_NOZORDER Or SWP_FRAMECHANGED
Case "fixed": Set frm = New frmFixed
Case "mdi": Set frm = New MDIForm1
Case "mdichild": Set frm = New frmMDIChild
End Select
Все равно не работает.
Лучший способ понять что-то самому — объяснить это другому.
-
Antonariy
-
- Повелитель Internet Explorer
-
-
- Сообщения: 4824
- Зарегистрирован: 28.04.2005 (Чт) 14:33
- Откуда: Мимо проходил
-
Antonariy » 03.07.2007 (Вт) 14:43
Кстати в Form_Load тоже не работает.
Лучший способ понять что-то самому — объяснить это другому.
-
burik
-
- Постоялец
-
-
- Сообщения: 514
- Зарегистрирован: 03.11.2005 (Чт) 22:04
- Откуда: Беларусь, Рогачев
-
burik » 03.07.2007 (Вт) 18:40
У меня работает с SendMessage
- Код: Выделить всё
lRet = GetWindowLong(hwnd, GWL_STYLE)
SetWindowLong Me.hwnd, GWL_STYLE, lRet Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX
ReleaseCapture
SendMessage Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
P. S. Даже ReleaseCapture не надо:
- Код: Выделить всё
lRet = GetWindowLong(hwnd, GWL_STYLE)
SetWindowLong Me.hwnd, GWL_STYLE, lRet Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX
SendMessage Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман
-
burik
-
- Постоялец
-
-
- Сообщения: 514
- Зарегистрирован: 03.11.2005 (Чт) 22:04
- Откуда: Беларусь, Рогачев
-
burik » 06.07.2007 (Пт) 14:06
Кстати, щас реализовал это в своей проге. Для отображения достаточно просто изменить заголовок формы:
- Код: Выделить всё
me.Caption = me.Caption
Или скрыть, а потом отобразить форму:
- Код: Выделить всё
me.Hide
me.Show
Между слухов, сказок, мифов,
просто лжи, легенд сомнений
мы враждуем жарче скифов
за несходство заблуждений
Игорь Губерман
-
keks-n
-
- Доктор VB наук
-
-
- Сообщения: 2509
- Зарегистрирован: 19.09.2005 (Пн) 17:17
- Откуда: г. Москва
-
keks-n » 09.07.2007 (Пн) 16:07
Вопрос по теме...
Я сабклассю WM_NCCALCSIZE(кто не знает - определение клиентской области окна). Вопрос - как его спровоцировать? Просто применяются новые настройки только при изменении размеров окна, причём не програмно.
-
GSerg
-
- Шаман
-
-
- Сообщения: 14286
- Зарегистрирован: 14.12.2002 (Сб) 5:25
- Откуда: Магадан
GSerg » 09.07.2007 (Пн) 19:46
Вот в результате
этого WM_NCCALCSIZE как раз и посылается.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас
-
keks-n
-
- Доктор VB наук
-
-
- Сообщения: 2509
- Зарегистрирован: 19.09.2005 (Пн) 17:17
- Откуда: г. Москва
-
keks-n » 10.07.2007 (Вт) 1:34
Я это уже пробовал(SWP_FRAMECHANGED), но оно не работало.
Вернуться в Visual Basic 1–6
Кто сейчас на конференции
Сейчас этот форум просматривают: AhrefsBot, Google-бот, Majestic-12 [Bot], Yandex-бот и гости: 15