Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как заменить оконную процедуру своей? 
:(
    Опции темы
cardinal
Дата 19.3.2007, 01:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

Репутация: 19
Всего: 99



Вот это напарился. Надо было подменить оконную процедуру, пока вспомнил как это делаеться...
Вот, небольшой примерчик наваял, может кому полезно будет (буду знать где можно быстро найти smile )

Простой пример по подмене старой оконной процедуры новой, и наоборот.
Код
Option Explicit
Dim isChanged As Boolean

Sub ChangeWindowProc()
    If isChanged Then
        hPrevWndProc = SetWindowLong(Me.hWnd, GWL_WNDPROC, AddressOf WindowProc)
    Else
        SetWindowLong Me.hWnd, GWL_WNDPROC, hPrevWndProc
    End If
End Sub

Private Sub Command1_Click()
    isChanged = Not isChanged
    ChangeWindowProc
End Sub

Внимание! Обязательно новый модуль! Т.к. AddressOf может ссылаться только на другой модуль!
Код
Option Explicit
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
    (ByVal hWnd As Long, _
    ByVal nIndex As Long, _
    ByVal dwNewLong As Long) As Long
Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
    (ByVal lpPrevWndFunc As Long, _
    ByVal hWnd As Long, _
    ByVal Msg As Long, _
    ByVal wParam As Long, _
    ByVal lParam As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public Const GCL_WNDPROC = (-24)
Public Const WM_LBUTTONDOWN = &H201
Public hPrevWndProc&

Public Function WindowProc&(ByVal hWnd&, ByVal iMsg&, ByVal wParam&, ByVal lParam&)
    Select Case iMsg
        Case WM_LBUTTONDOWN
            Beep
            Exit Function
    End Select
    WindowProc = CallWindowProc(hPrevWndProc, hWnd, iMsg, wParam, lParam)
End Function



--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0902 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.