Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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:

'### Функция для установки свойства Visible = True/False
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
Для этого есть

EnableWindow hWnd, 0


Окно (или контрол) остаются видимыми, но при этом не реагируют ни на что - мышь, клавиатура

Активировать обратно:

EnableWindow hWnd, 1

Ответить

Номер ответа: 4
Автор ответа:
 cresta



Вопросов: 117
Ответов: 1538
 Профиль | | #4 Добавлено: 26.02.05 01:19
Слушай, у меня такое впечатление, что ты с Марса прилетел :))))

не исчезал после установки Visible=False, хотя уже ни на что не реагировал

Это называется Enable=False
Для этого есть

EnableWindow hWnd, 0


Окно (или контрол) остаются видимыми, но при этом не реагируют ни на что - мышь, клавиатура

Активировать обратно:

EnableWindow hWnd, 1

Ответить

Номер ответа: 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
Какая картинка может оставаться от контрола, если он исчезает? :( Тень что-ли :)

Ну тогда может быть тебе надо
ShowWindow hWnd,SW_HIDE


Вот этим способом, например контрол кнопка исчезает, при этом она была с картинкой + с иконкой. Исчезает всё: и кнопка и её картинка и её иконка.

Если и это не то, то тебе к экстрасенсам надо :(

Ответить

Номер ответа: 7
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #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

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам