Перетаскивание формы (разбор кода)

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

Перетаскивание формы (разбор кода)

Сообщение Diamock » 28.11.2010 (Вс) 22:02

Здравствуйте Уважаемые!
Всем известен код перетаскивания формы за любое место.
Код: Выделить всё
Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Sub ReleaseCapture Lib "User32" ()
Private Const WM_NCLBUTTONDOWN = &HA1
Private Const HTCAPTION = 2

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, x As Single, Y As Single)
Dim ReturnValue As Long
If Button = 1 Then
Call ReleaseCapture
ReturnValue = SendMessage(Me.hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
End If
End Sub

Разбирая его у меня возникло несколько вопросов.
Функция ReleaseCapture - фиксирует указатель мыши в процедуре Form_MouseDown.
Это понятно.
Функция SendMessage - посылает сообщение окну, с определёнными параметрами.
И здесь всё ясно.
Теперь о самих параметрах.
    Me.hwnd - дескриптор нашего окна.
    WM_NCLBUTTONDOWN - передоваемое сообщение.
    HTCAPTION - дополнительное сообщение
Насколько я разобрался, сообщение WM_NCLBUTTONDOWN посылается, если пользователь нажимает левую кнопку мыши, в то время, когда курсор находится в нерабочей области окна. Это сообщение посылается в окно, которое содержит этот курсор. А, HTCAPTION, является одним из параметров сообщения WM_NCHITTEST и определяет местоположене указателя мыши, в нашем случае - это область заголовка.
Из всего этого, я сделал следующий вывод: при выполнении этого кода мы фактически перетаскиваем форму за заголовок, перехватив клик мыши на форме и зафиксировав её.
Правильно?
С уважением...
In der Beschrankung zeigt sich erst der Meister
Графоманю...

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

Re: Перетаскивание формы (разбор кода)

Сообщение Хакер » 29.11.2010 (Пн) 0:05

Diamock писал(а):Функция ReleaseCapture - фиксирует указатель мыши в процедуре Form_MouseDown.
Это понятно.

Чушь.

Насколько я разобрался, сообщение WM_NCLBUTTONDOWN посылается, если пользователь нажимает левую кнопку мыши, в то время, когда курсор находится в нерабочей области окна

Неклиентской.

Diamock писал(а):окно, которое содержит этот курсор.

Окно не содержит курсор. Курсор находится над окном.

Правильно?

Предположение верное. А почти все формулировки — нет.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.


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

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

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

    TopList