⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 asmctrl.asm

📁 这是一个数字图像处理的matlab仿真程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
        invoke DefWindowProc, hwnd, message, wparam.value, lparam.value 
        ret
    .ENDIF
    xor eax, eax
    ret
aboutBoxProc ENDP

;--------------------------------------------------------------------------
SendViewChange PROC this_:DWORD

    pObjectData this_, ecx
    mov eax, (AsmCtrlData ptr [ecx]).m_pViewAdviseSink
    .IF eax
        coinvoke (AsmCtrlData ptr [ecx]).m_pViewAdviseSink, IAdviseSink, OnViewChange, DVASPECT_CONTENT, -1
    .ENDIF
    pObjectData this_, ecx
    mov eax, (AsmCtrlData ptr [ecx]).m_advf
    and eax, ADVF_ONLYONCE
    .IF eax
        invoke ComPtrAssign, ADDR (AsmCtrlData ptr [ecx]).m_pViewAdviseSink, NULL
        mov (AsmCtrlData ptr [ecx]).m_advf, NULL
    .ENDIF
    ret
SendViewChange ENDP

;--------------------------------------------------------------------------
;IOleObject

;--------------------------------------------------------------------------
IOleObject_SetClientSite PROC  this_:DWORD, pClientSite:DWORD

    pObjectData this_, ecx
    invoke ComPtrAssign, ADDR (AsmCtrlData ptr [ecx]).m_pClientSite, pClientSite

    xor eax, eax    ;		return S_OK
    ret
IOleObject_SetClientSite ENDP

;--------------------------------------------------------------------------
IOleObject_GetClientSite PROC this_:DWORD, ppClientSite:DWORD

    .IF !ppClientSite
        mov eax, E_POINTER
        ret
    .ENDIF
    pObjectData this_, edx
    invoke ComPtrAssign, ppClientSite, (AsmCtrlData  ptr [edx]).m_pClientSite
    xor eax, eax    ;		return S_OK
    ret
IOleObject_GetClientSite ENDP
 
;--------------------------------------------------------------------------
IOleObject_SetHostNames PROC this_:DWORD, lpcolestr:DWORD

    xor eax, eax    ;		return S_OK
    ret
IOleObject_SetHostNames ENDP

;--------------------------------------------------------------------------
IOleObject_Close PROC this_:DWORD, dwSaveOption:DWORD 
    LOCAL pBase:DWORD

    pObjectData this_, ecx
    mov pBase, ecx
    .IF (dwSaveOption == OLECLOSE_SAVEIFDIRTY) || (dwSaveOption == OLECLOSE_PROMPTSAVE)
        mov eax, (AsmCtrlData ptr [ecx]).m_isDirty 
        .IF eax
            coinvoke (AsmCtrlData ptr [ecx]).m_pClientSite, IOleClientSite, SaveObject
        .ENDIF
    .ENDIF
    mov ecx, pBase
    mov eax, (AsmCtrlData ptr [ecx]).m_pViewAdviseSink
    .IF eax 
        coinvoke (AsmCtrlData ptr [ecx]).m_pViewAdviseSink, IAdviseSink, OnClose
    .ENDIF
    mov ecx, pBase
    mov eax, (AsmCtrlData ptr [ecx]).m_pAdviseHolder
    .IF eax 
      coinvoke (AsmCtrlData ptr [ecx]).m_pAdviseHolder, IOleAdviseHolder, SendOnClose
    .ENDIF
    mov ecx, pBase
    mov eax, (AsmCtrlData ptr [ecx]).m_pClientSite
    .IF eax
        coinvoke (AsmCtrlData ptr [ecx]).m_pClientSite, IOleClientSite, Release
    .ENDIF
    xor eax, eax    ;		return S_OK
    ret
IOleObject_Close ENDP

;--------------------------------------------------------------------------
IOleObject_SetMoniker PROC this_:DWORD, IMoniker:DWORD

    mov eax, E_NOTIMPL
    ret
IOleObject_SetMoniker ENDP

;--------------------------------------------------------------------------
IOleObject_GetMoniker PROC this_:DWORD, A1:DWORD, A2:DWORD, ppMoniker:DWORD

    .IF ppMoniker
         mov ecx, ppMoniker     ; NULL the pointer sent us
         xor eax, eax
         mov [ecx], eax
    .ENDIF
    mov eax, E_NOTIMPL
    ret
IOleObject_GetMoniker ENDP
 
;--------------------------------------------------------------------------
IOleObject_InitFromData PROC this_:DWORD, pIDataObject:DWORD, A1:BOOL, A2:DWORD

    mov eax, E_NOTIMPL
    ret
IOleObject_InitFromData ENDP

;--------------------------------------------------------------------------
IOleObject_GetClipboardData PROC this_:DWORD, A1:DWORD, pIDataObject:DWORD

    mov eax, E_NOTIMPL
    ret
IOleObject_GetClipboardData ENDP

;--------------------------------------------------------------------------
IOleObject_DoVerb PROC this_:DWORD, iVerb:DWORD, lpmsg:MSG, pIOleClientSite:DWORD, lindex:DWORD, hwndParent:DWORD, lprcPosRect:DWORD
    LOCAL pControlSite:DWORD, hr:DWORD

    .IF iVerb == OLEIVERB_PROPERTIES
        pObjectData this_, ecx
        mov eax, (AsmCtrlData ptr [ecx]).m_pClientSite
        .IF eax
            coinvoke (AsmCtrlData ptr [ecx]).m_pClientSite, IOleClientSite, QueryInterface, pIID_IOleControlSite, ADDR pControlSite
            .IF_SUCCEEDED
                coinvoke pControlSite, IOleControlSite, ShowPropertyFrame
                ret
            .ELSE
                mov eax, E_FAIL
                ret
            .ENDIF
        .ENDIF
    .ELSEIF iVerb == 1          ; requested the AboutBox
        invoke AboutBox, this_
        mov eax, eax            ; return S_OK
    .ENDIF
    ret
IOleObject_DoVerb ENDP

;--------------------------------------------------------------------------
IOleObject_EnumVerbs PROC this_:DWORD, pIEnumOLEVERB:DWORD

    invoke OleRegEnumVerbs, pCLSID_AsmCtrl,  pIEnumOLEVERB
    ret
IOleObject_EnumVerbs ENDP

;--------------------------------------------------------------------------
IOleObject_Update PROC this_:DWORD

    xor eax, eax            ; return S_OK
    ret
IOleObject_Update ENDP

;--------------------------------------------------------------------------
IOleObject_IsUpToDate PROC this_:DWORD

    xor eax, eax            ; return S_OK
    ret
IOleObject_IsUpToDate ENDP

;--------------------------------------------------------------------------
IOleObject_GetUserClassID PROC this_:DWORD, pClsid:DWORD

    .IF !pClsid
        mov eax, E_POINTER
        ret
    .ENDIF
    mov ecx, pClsid 
    mov eax, pCLSID_AsmCtrl
    mov [ecx], eax
    xor eax, eax            ; return S_OK
    ret
IOleObject_GetUserClassID ENDP

;--------------------------------------------------------------------------
IOleObject_GetUserType PROC this_:DWORD, dwFormOfType:DWORD, pszUserType:DWORD 

    invoke OleRegGetUserType, pCLSID_AsmCtrl, dwFormOfType, pszUserType
    ret
IOleObject_GetUserType ENDP

;--------------------------------------------------------------------------
IOleObject_SetExtent PROC this_:DWORD, dwAspect:DWORD, pSizel:DWORD 
    LOCAL  temp:DWORD

    .IF !pSizel
        mov eax, E_POINTER
        ret
    .ENDIF
    .IF (dwAspect != DVASPECT_CONTENT) 
        mov eax, E_FAIL
    .ELSE
        pObjectData this_, edx
        mov ecx, pSizel
        ; get 'x' extents
        mov eax, (SIZEL PTR [ecx]).x
        mov (AsmCtrlData ptr [edx]).m_himetricExtent.x, eax
;        fninit                      ; init coprocessor
        fild (SIZEL PTR [ecx]).x    ; mov sizy.x to stack
        fdiv HIMETRIC_PER_PIXEL     ; divide by const
        fistp temp                  ; get integer result (rounds it too)
        mov eax, temp               ; leave in reg
        mov (AsmCtrlData ptr [edx]).m_pixelExtent.x, eax
        .IF eax < 10
            mov (AsmCtrlData ptr [edx]).m_pixelExtent.x, 10
            mov (AsmCtrlData ptr [edx]).m_himetricExtent.x, 265
        .ENDIF
        ; get 'y' extents
        mov eax, (SIZEL PTR [ecx]).y
        mov (AsmCtrlData ptr [edx]).m_himetricExtent.y, eax
;        fninit                      ; init coprocessor
        fild (SIZEL PTR [ecx]).y    ; mov sizy.y to stack
        fdiv HIMETRIC_PER_PIXEL     ; divide by const
        fistp temp                  ; get integer result (rounds it too)
        mov eax, temp               ; leave in reg
        mov (AsmCtrlData ptr [edx]).m_pixelExtent.y, eax
        .IF eax < 10
            mov (AsmCtrlData ptr [edx]).m_pixelExtent.y, 10
            mov (AsmCtrlData ptr [edx]).m_himetricExtent.y, 265
        .ENDIF
        xor eax, eax            ; return S_OK
    .ENDIF
    ret
IOleObject_SetExtent ENDP
;--------------------------------------------------------------------------

 ; 
 ; 
 ; ;const float HIMETRIC_PER_PIXEL(26.4583333333f);
 ; 
 ; HimetricToPixel PROC  psize:DWORD
 ;     LOCAL  temp:DWORD
 ; 
 ;     ; convert psize to .x in eax, .y in ecx
 ;     mov edx, psize
 ;     FNINIT                      ; init coprocessor
 ;     fild (SIZEL PTR [edx]).x    ; mov sizy.x to stack
 ;     fdiv HIMETRIC_PER_PIXEL     ; divide by const
 ;     fistp temp                  ; get integer result (rounds it too)
 ;     mov eax, temp               ; leave in reg
 ;     fild (SIZEL PTR [edx]).y    ; do same for sizy.y
 ;     fdiv HIMETRIC_PER_PIXEL
 ;     fistp temp 
 ;     mov ecx, temp
 ;     ret
 ; HimetricToPixel ENDP
 ; 
 ; PixelToHimetric PROC psize:DWORD
 ;     LOCAL  temp:DWORD
 ; 
 ;     ; convert psize to .x in eax, .y in ecx
 ;     mov edx, psize
 ;     FNINIT                      ; init coprocessor
 ;     fild (SIZEL PTR [edx]).x    ; mov sizy.x to stack
 ;     fmul HIMETRIC_PER_PIXEL     ; mult by const
 ;     fistp temp                  ; get integer result (rounds it too)
 ;     mov eax, temp               ; leave in reg
 ;     fild (SIZEL PTR [edx]).y    ; do same for sizy.y
 ;     fmul HIMETRIC_PER_PIXEL
 ;     fistp temp 
 ;     mov ecx, temp
 ;     ret
 ; PixelToHimetric ENDP
 ; 
;--------------------------------------------------------------------------
IOleObject_GetExtent PROC this_:DWORD, dwAspect:DWORD, pSizel:DWORD 

    .IF !pSizel
        mov eax, E_POINTER
        ret
    .ENDIF
    .IF (dwAspect != DVASPECT_CONTENT) 
        mov eax, E_INVALIDARG
    .ELSE
        pObjectData this_, edx
        mov ecx, pSizel 
        mov eax, (AsmCtrlData ptr [edx]).m_himetricExtent.x
        mov (SIZEL PTR [ecx]).x, eax
        mov eax, (AsmCtrlData ptr [edx]).m_himetricExtent.y
        mov (SIZEL PTR [ecx]).y, eax
        xor eax, eax            ; return S_OK
    .ENDIF
    ret
IOleObject_GetExtent ENDP

;--------------------------------------------------------------------------
IOleObject_Advise PROC this_:DWORD, pAdvSink:DWORD, pdwConnection:DWORD

    pObjectData this_, ecx
    coinvoke (AsmCtrlData ptr [ecx]).m_pAdviseHolder, IOleAdviseHolder, Advise, pAdvSink, pdwConnection
    ret
IOleObject_Advise ENDP

;--------------------------------------------------------------------------
IOleObject_Unadvise PROC this_:DWORD, dwConnection:DWORD 

    pObjectData this_, ecx
    coinvoke (AsmCtrlData ptr [ecx]).m_pAdviseHolder, IOleAdviseHolder, Unadvise, dwConnection
    ret
IOleObject_Unadvise ENDP

;--------------------------------------------------------------------------
IOleObject_EnumAdvise PROC this_:DWORD, ppEnumAdvise:DWORD

    pObjectData this_, ecx
    coinvoke (AsmCtrlData ptr [ecx]).m_pAdviseHolder, IOleAdviseHolder, EnumAdvise, ppEnumAdvise
    ret
IOleObject_EnumAdvise ENDP

;--------------------------------------------------------------------------
IOleObject_GetMiscStatus PROC this_:DWORD, dwAspect:DWORD, pdwStatus:DWORD 

    mov ecx, pdwStatus
    .IF !pdwStatus
        mov eax, E_POINTER
        ret
    .ENDIF
    .IF (dwAspect != DVASPECT_CONTENT) 
        xor eax, eax
        mov [ecx], eax
        mov eax, E_FAIL
    .ELSE
        mov eax, 131073
        mov [ecx], eax
        xor eax, eax            ; return S_OK
    .ENDIF
    ret
IOleObject_GetMiscStatus ENDP

;--------------------------------------------------------------------------
IOleObject_SetColorScheme PROC this_:DWORD, plogpalette:DWORD

    mov eax, E_NOTIMPL
    ret
IOleObject_SetColorScheme ENDP

;--------------------------------------------------------------------------
;IProvideClassInfo

;--------------------------------------------------------------------------
IProvideClassInfo_GetClassInfo PROC this_:DWORD, ppTI:DWORD

    .IF !ppTI
        mov eax, E_POINTER
        ret
    .ENDIF
    mov ecx, (ObjectEntry  PTR this_).m_pBase
    mov ecx, (ObjectData PTR [ecx]).m_pti
    .IF !ecx
        ret
    .ENDIF
    mov edx, ppTI
    mov [edx], ecx
    coinvoke ppTI, IUnknown, AddRef
    xor eax, eax            ; return S_OK 
    ret
IProvideClassInfo_GetClassInfo ENDP

;--------------------------------------------------------------------------
;IPersistStreamInit

;--------------------------------------------------------------------------
IPersist_GetClassID PROC this_:DWORD, pClassID:DWORD

    .IF !pClassID
        mov eax, E_POINTER
        ret
    .ENDIF
    mov eax, pCLSID_AsmCtrl
    mov [ecx], eax
    xor eax, eax            ; return S_OK    
    ret
IPersist_GetClassID ENDP

;--------------------------------------------------------------------------
IPersistStreamInit_IsDirty PROC this_:DWORD

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -