Страница: 1 |
Страница: 1 |
Вопрос: Установить Visible, зная hWnd окна (контрола)?
Добавлено: 25.02.05 21:33
Автор вопроса: SyavX
Пробывал устанавливать Visible=True/False, используя SetWindowLong, но контрол "визуально" оставался. Знать бы какое сообщение нужно ему послать. А может есть другие варианты?..
Ответы
Всего ответов: 13
Номер ответа: 1
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #1
Добавлено: 25.02.05 23:51
устанавливать Visible=True/False, используя SetWindowLong
А как это делается ?
но контрол "визуально" оставался
где оставался?
Номер ответа: 2
Автор ответа:
SyavX
Вопросов: 25
Ответов: 149
Профиль | | #2
Добавлено: 26.02.05 00:48
Sorry за неудачную формулировку вопроса. Насчет использования GetWindowLong:
Public Function SetVisible(hWnd As Long, Optional bVisible As Boolean = True)
Dim lStyle As Long
lStyle = GetWindowLong(hWnd, GWL_STYLE)
If bVisible Then
If IsVisible(hWnd) = False Then
lStyle = lStyle + WS_VISIBLE
SetWindowLong hWnd, GWL_STYLE, lStyle
End If
Else
If IsVisible(hWnd) = True Then
lStyle = lStyle - WS_VISIBLE
SetWindowLong hWnd, GWL_STYLE, lStyle
End If
End If
'Посылаем что-то окну...
'SendMessage hWnd, WM_XXX, 0&, 0&
End Function
'### Ф-ция определяющая состояние свойства Visible
Public Function IsVisible(hWnd As Long) As Boolean
Dim lStyle As Long
lStyle = GetWindowLong(hWnd, GWL_STYLE)
If (lStyle And WS_VISIBLE) = WS_VISIBLE Then
IsVisible = True
Else
IsVisible = False
End If
End Function
А "визуально" оставался - это типа не исчезал после установки Visible=False, хотя уже ни на что не реагировал. (Опять как-то ломано получилось, просто не знаю как это по-умному написать).
Номер ответа: 3
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #3
Добавлено: 26.02.05 01:19
Слушай, у меня такое впечатление, что ты с Марса прилетел )))
не исчезал после установки Visible=False, хотя уже ни на что не реагировал
Это называется Enable=False
Для этого есть
Окно (или контрол) остаются видимыми, но при этом не реагируют ни на что - мышь, клавиатура
Активировать обратно:
Номер ответа: 4
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #4
Добавлено: 26.02.05 01:19
Слушай, у меня такое впечатление, что ты с Марса прилетел )))
не исчезал после установки Visible=False, хотя уже ни на что не реагировал
Это называется Enable=False
Для этого есть
Окно (или контрол) остаются видимыми, но при этом не реагируют ни на что - мышь, клавиатура
Активировать обратно:
Номер ответа: 5
Автор ответа:
SyavX
Вопросов: 25
Ответов: 149
Профиль | | #5
Добавлено: 26.02.05 01:40
Твоя Моя Не Понимать
Я не о том, чтобы установить Enable=False или True, а о том, что после установки Visible=False вышеуказанным способом все, что остается от контрола это "картинка" (Хотя сам он исчезает). Ну не могу я правильно обьяснить. Скорей всего по незнанию
Опять же, может есть другой способ?
Номер ответа: 6
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #6
Добавлено: 26.02.05 01:48
Какая картинка может оставаться от контрола, если он исчезает? Тень что-ли
Ну тогда может быть тебе надо
Вот этим способом, например контрол кнопка исчезает, при этом она была с картинкой + с иконкой. Исчезает всё: и кнопка и её картинка и её иконка.
Если и это не то, то тебе к экстрасенсам надо
Номер ответа: 7
Автор ответа:
mc-black
ICQ: 308-534-060
Вопросов: 20
Ответов: 1860
Web-сайт:
Профиль | | #7
Добавлено: 26.02.05 09:19
crasta, он спрашивает, какое сообщение windows ему послать окну через SendMessage. или как это можно сделать другим способом.
Номер ответа: 8
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #8
Добавлено: 26.02.05 10:50
или как это можно сделать
У этого "ЭТО" есть имя или описание? ЧТО он хочет сделать - непонятно Как делать - это другой вопрос...
Если сделать, чтобы контрола не было видно - ShowWindow
Если сделать, чтобы контрол не реагировал -EnableWindow
Что ещё можно сделать с контролом - не знаю, может, чтобы наполовину был виден? А на вторую половину был disable?
Номер ответа: 9
Автор ответа:
SyavX
Вопросов: 25
Ответов: 149
Профиль | | #9
Добавлено: 26.02.05 11:09
О великий земной брат cresta, ты все-таки написал то, чего я хотел. ShowWindow с константами SW_HIDE и SW_SHOW вполне подходит.
Как говорят у нас на Марсе: "Сенк ю вэри мач"
А если хочешь понять о чем я так невнятно говорил до этого, попробуй использовать SetVisible из вышеуказанного кода. Если не в лом, опиши что происходит с окном после использования SetVisible(hWnd, False)
Номер ответа: 10
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #10
Добавлено: 26.02.05 11:29
Если использовать твой SetVisible, то после этого надо будет ещё и перерисовывать родителя этого контрола, т.е. refresh.
На всякий случай (на будущее):
Окно можно заставить перерисоваться так:
InvalidateRect hWnd, 0, True
И тогда следы от твоего контрола исчезнут.
Но чем городить столько кода, проще использовать
ShowWindow.
Номер ответа: 11
Автор ответа:
SyavX
Вопросов: 25
Ответов: 149
Профиль | | #11
Добавлено: 26.02.05 11:35
Теперь уже натуральное спасибо
Просто ShowWindow до этого не замечал...
Номер ответа: 12
Автор ответа:
SyavX
Вопросов: 25
Ответов: 149
Профиль | | #12
Добавлено: 26.02.05 12:31
InvalidateRect с окнами работает, а с контролами - нет
Номер ответа: 13
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #13
Добавлено: 26.02.05 12:58
Всё правильно, с контролами не работает, поэтому перерисовывать целиком всё окно. Проще и быстрее ShowWindow