comment $
//-----------------------------------------------------------------------------------//
//  Source code                                                                      //
//                                                                                   //
//  Written      by  Chib, amdtm                     http://www.xxcontrols.com       //
//                                                                                   //
//  FileName   : XXControls.asm                                                      //
//  Description: libraries of functions for work with menu                           //
//  Version    : 1.00.000, January 1, 2004                                           //
//-----------------------------------------------------------------------------------//
$ 
 
    .486
    .model flat, stdcall
    option casemap :none
    
    include XXCtrl.inc
    include XXControls.inc

    include XXGrafics.asm  
    include XXMenu.asm
    include XXButton.asm    

     
;--------------------------------------------------------------------------
.code

;===========================================================================;
; Name:     DllEntry                                                        ;
; Function: Performs an undo action (if any)                                ;
;                                                                           ;
; Params:   lpEditData = Address of the RS Edit control's data structure    ;
;                                                                           ;
; Returns:  Nothing                                                         ;
;===========================================================================;

DllEntry proc hInstance:HINSTANCE, reason:DWORD, reserved1:DWORD

    .if reason==DLL_PROCESS_ATTACH                 ; DLL загружена
                 
    .elseif reason==DLL_PROCESS_DETACH             ; DLL выгружаеться

 
    .elseif reason==DLL_THREAD_ATTACH

    .else        ; DLL_THREAD_DETACH

    .endif
    mov  eax,1
    ret
DllEntry endp

; #########################################################################
;                                                                         ;
; Изменим адрес оконной процедуры                                         ;  
;                                                                         ;
; #########################################################################

SetNewWndProc proc hWin :HWND, lpWndFunc:DWORD

    ; Изменим адрес оконной процедуры для меню
    ; Перед изменением проверим не изменён ли уже адрес оконной процедуры
    invoke GetWindowLong, hWin, GWL_WNDPROC
    cmp eax, lpWndFunc
    je e_t     
    
    invoke SetWindowLong, hWin, GWL_WNDPROC, lpWndFunc
    invoke SetProp, hWin, ADDR szProp_OldWndProc, eax

e_t:
    ret
SetNewWndProc endp

; #########################################################################

;                                                                         ;
; Изменим адрес оконной процедуры на страый                               ;  
;                                                                         ;
; #########################################################################

SetOldWndProc proc hWin :HWND, lpPrevWndFunc:DWORD

    ; Изменим адрес оконной процедуры для меню
    ; Перед изменением проверим не изменён ли уже адрес оконной процедуры
    invoke GetWindowLong, hWin, GWL_WNDPROC
    cmp eax, lpPrevWndFunc;offset WndProc_Menu
    jne e_t
    
    invoke GetProp, hWin, ADDR szProp_OldWndProc 
    invoke SetWindowLong, hWin, GWL_WNDPROC, eax
    invoke RemoveProp, hWin, ADDR szProp_OldWndProc

e_t:
    ret
SetOldWndProc endp

end DllEntry