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

📄 asmctrl.asm

📁 这是一个数字图像处理的matlab仿真程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
    pObjectData this_, ecx
    mov eax, (AsmCtrlData ptr [ecx]).m_isDirty
    .IF eax
        xor eax, eax    ; mov eax, S_OK
    .ELSE
        mov eax, S_FALSE
    .ENDIF
    ret
IPersistStreamInit_IsDirty ENDP

;--------------------------------------------------------------------------
IPersistStreamInit_Load PROC this_:DWORD, pStream:DWORD
    LOCAL var:VARIANT, bCount:DWORD,    pBase:DWORD

    pObjectData this_, ecx
    mov pBase, ecx

 ;  persisted quantities and order
 ;  m_Value
 ;  m_BackColor
 ;  m_ForeColor
    
    coinvoke pStream, IStream, Read, ADDR (AsmCtrlData ptr [ecx]).m_Value, 4, ADDR bCount
    mov ecx, pBase
    coinvoke pStream, IStream, Read, ADDR (AsmCtrlData ptr [ecx]).m_BackColor, 4, ADDR bCount
    mov ecx, pBase
    coinvoke pStream, IStream, Read, ADDR (AsmCtrlData ptr [ecx]).m_ForeColor, 4, ADDR bCount

    xor eax, eax            ; return S_OK 
    ret
IPersistStreamInit_Load ENDP

;--------------------------------------------------------------------------
IPersistStreamInit_Save PROC this_:DWORD, pStream:DWORD, fClearDirty:DWORD
    LOCAL   bCount:DWORD, pBase:DWORD

    pObjectData this_, ecx
    mov pBase, ecx
    .IF fClearDirty
        mov (AsmCtrlData ptr [ecx]).m_isDirty, FALSE
    .ENDIF
    mov ecx, pBase
    coinvoke pStream, ISequentialStream, Write, ADDR (AsmCtrlData ptr [ecx]).m_Value, SIZEOF DWORD, ADDR bCount

    mov ecx, pBase
    coinvoke pStream, ISequentialStream, Write, ADDR (AsmCtrlData ptr [ecx]).m_BackColor, SIZEOF DWORD, ADDR bCount

    mov ecx, pBase
    coinvoke pStream, ISequentialStream, Write, ADDR (AsmCtrlData ptr [ecx]).m_ForeColor, SIZEOF DWORD, ADDR bCount

    xor eax, eax            ; return S_OK 
    ret
IPersistStreamInit_Save ENDP

;--------------------------------------------------------------------------
IPersistStreamInit_GetSizeMax PROC this_:DWORD, pSize:DWORD 
    LOCAL ssize:ULARGE_INTEGER

    .IF !pSize
        mov eax, E_POINTER
        ret
    .ENDIF
    mov eax, 1000
    mov ssize.LowPart, eax
    xor eax, eax
    mov ssize.HighPart, eax
    mov eax, pSize
    lea ecx, ssize
    mov [eax], ecx   
    xor eax, eax            ; return S_OK    
    ret
IPersistStreamInit_GetSizeMax ENDP

;--------------------------------------------------------------------------
IPersistStreamInit_InitNew PROC this_:DWORD

    pObjectData this_, ecx
    mov eax, 3969
    mov (AsmCtrlData ptr [ecx]).m_himetricExtent.x, eax
    mov (AsmCtrlData ptr [ecx]).m_himetricExtent.y, eax
    mov eax, 150
    mov (AsmCtrlData ptr [ecx]).m_pixelExtent.x, eax
    mov (AsmCtrlData ptr [ecx]).m_pixelExtent.y, eax
    mov eax, 0808080H
    mov (AsmCtrlData ptr [ecx]).m_ForeColor, eax
    mov eax, 0FFFFFFH
    mov (AsmCtrlData ptr [ecx]).m_BackColor, eax
    xor eax, eax            ; return S_OK 
    ret
IPersistStreamInit_InitNew ENDP

;--------------------------------------------------------------------------
;IViewObject

;--------------------------------------------------------------------------
IViewObject_Draw PROC PROC this_:DWORD, dwAspect:DWORD, lindex:DWORD, 
                           pvAspect:DWORD, ptd:DWORD, hicTargetDev:DWORD, 
                           hdc:DWORD, pRectBounds:DWORD, prcWBounds:DWORD,
                           pfnContinue:DWORD, dwContinue:DWORD 
    LOCAL  hBrush:DWORD

    .IF dwAspect != DVASPECT_CONTENT
        mov eax, DV_E_DVASPECT
        ret
    .ENDIF
    pObjectData this_, ecx
    mov eax, (AsmCtrlData ptr [ecx]).m_BackColor
    invoke CreateSolidBrush, eax
    mov hBrush, eax
    invoke FillRect, hdc, pRectBounds, hBrush
    invoke DeleteObject, hBrush
    pObjectData this_, ecx
    mov eax, (AsmCtrlData ptr [ecx]).m_ForeColor
    invoke SetTextColor, hdc, eax
    pObjectData this_, ecx
    mov eax, (AsmCtrlData ptr [ecx]).m_BackColor
    invoke SetBkColor, hdc, eax
    invoke DrawText, hdc, ADDR szName, NameLength, pRectBounds, DT_CENTER or DT_VCENTER or DT_SINGLELINE
    xor eax, eax            ; return S_OK    
    ret
IViewObject_Draw ENDP

;--------------------------------------------------------------------------
IViewObject_GetColorSet PROC this_:DWORD, dwAspect:DWORD, lindex:DWORD, 
                           pvAspect:DWORD, ptd:DWORD, hicTargetDev:DWORD, 
                           ppColorSet:DWORD

    mov eax, E_NOTIMPL
    ret
IViewObject_GetColorSet	ENDP

;--------------------------------------------------------------------------
IViewObject_Freeze PROC this_:DWORD, dwAspect:DWORD, lindex:DWORD, 
                           pvAspect:DWORD, pdwFreeze:DWORD 
    mov eax, E_NOTIMPL
    ret
IViewObject_Freeze ENDP

;--------------------------------------------------------------------------
IViewObject_Unfreeze PROC this_:DWORD, dwFreeze:DWORD

    mov eax, E_NOTIMPL
    ret
IViewObject_Unfreeze ENDP

;--------------------------------------------------------------------------
IViewObject_SetAdvise PROC this_:DWORD, aspect:DWORD, advf:DWORD, ppViewAdviseSink:DWORD

    .IF aspect != DVASPECT_CONTENT
        mov eax, DV_E_DVASPECT
        ret
    .ENDIF
    pObjectData this_, edx
    mov ecx, ppViewAdviseSink
    invoke ComPtrAssign, ADDR (AsmCtrlData ptr [edx]).m_pViewAdviseSink, ecx
    mov eax, advf
    pObjectData this_, edx
    mov (AsmCtrlData ptr [edx]).m_advf, eax
    and eax, ADVF_PRIMEFIRST
    .IF eax
        invoke SendViewChange, this_
    .ENDIF
    xor eax, eax            ; return S_OK
    ret
IViewObject_SetAdvise ENDP

;--------------------------------------------------------------------------
IViewObject_GetAdvise PROC this_:DWORD, pAspects:DWORD, pAdvf:DWORD, ppViewAdviseSink:DWORD

    .IF !ppViewAdviseSink
        mov eax, E_POINTER
        ret
    .ENDIF
    pObjectData this_, edx
    invoke ComPtrAssign, ppViewAdviseSink, (AsmCtrlData ptr [edx]).m_pViewAdviseSink
    mov ecx, pAspects
    mov eax, [ecx]
    .IF eax == DVASPECT_CONTENT
        mov ecx, pAdvf
        mov eax, [ecx]
        .IF eax
            mov eax, (AsmCtrlData ptr [edx]).m_advf
            mov [ecx], eax
        .ENDIF
    .ENDIF
    xor eax, eax            ; return S_OK
    ret
IViewObject_GetAdvise ENDP	

;--------------------------------------------------------------------------
;IViewObject2
 
;--------------------------------------------------------------------------
IViewObject2_GetExtent PROC this_:DWORD, aspect:DWORD, lindex:DWORD, 
                           ptd:DWORD, pSize:DWORD 

    .IF !pSize
        mov eax, E_POINTER
        ret
    .ENDIF
    .IF (aspect != DVASPECT_CONTENT) 
        mov eax, DV_E_DVASPECT
        ret
    .ENDIF
    mov ecx, pSize 
    pObjectData this_, edx
    mov eax, DWORD PTR (AsmCtrlData ptr [edx]).m_himetricExtent
    mov [ecx], eax    
    xor eax, eax            ; return S_OK
    ret
IViewObject2_GetExtent ENDP

;--------------------------------------------------------------------------
;ISpecifyPropertyPages

;--------------------------------------------------------------------------
ISpecifyPropertyPages_GetPages PROC  this_:DWORD, pPages:DWORD

    .IF !pPages
        mov eax, E_POINTER
        ret
    .ENDIF
    mov edx, pPages
    mov (CAUUID PTR [edx]).cElems, 2
    invoke CoTaskMemAlloc, (SIZEOF GUID) * 2
    mov (CAUUID PTR [edx]).pElems, eax

    push esi
    push edi

    mov esi, pCLSID_StockFontPage
    mov edi, eax
    mov ecx, SIZEOF GUID / 4
    rep movsd

    mov esi, pCLSID_StockColorPage
    mov edi, eax
    mov ecx, SIZEOF GUID / 4
    rep movsd

    pop edi
    pop esi

    xor eax, eax            ; return S_OK
    ret
ISpecifyPropertyPages_GetPages ENDP

;--------------------------------------------------------------------------
;IPersistPropertyBag   

;--------------------------------------------------------------------------
IPersistPropertyBag_InitNew PROC this_:DWORD

    invoke IPersistStreamInit_InitNew, this_   ; re-use the method 
                                               ; (hey, THAT'S like inheritance!)
    ret
IPersistPropertyBag_InitNew ENDP

;--------------------------------------------------------------------------

IPersistPropertyBag_Load PROC this_:DWORD, pPropBag:DWORD, pErrorLog:DWORD 
    LOCAL var:VARIANT,    pBase:DWORD

    pObjectData this_, edx
    mov pBase, edx
    
 ;  persisted quantities and order
 ;  m_Value = Value
    
    mov var.vt, VT_I4
    mov var.lVal, 0
    coinvoke pPropBag, IPropertyBag, Read, ADDR wszValue, ADDR var, NULL
    .IF_SUCCEEDED
        mov edx, pBase
        mov eax, var.lVal
        mov (AsmCtrlData ptr [edx]).m_Value, eax
        .ELSE
    .ENDIF

    mov var.vt, VT_I4
    mov var.lVal, 0
    coinvoke pPropBag, IPropertyBag, Read, ADDR wszBackColor, ADDR var, NULL
    .IF_SUCCEEDED
        mov edx, pBase
        mov eax, var.lVal
        mov (AsmCtrlData ptr [edx]).m_BackColor, eax
        .ELSE
    .ENDIF

    mov var.vt, VT_I4
    mov var.lVal, 0
    coinvoke pPropBag, IPropertyBag, Read, ADDR wszForeColor, ADDR var, NULL
    .IF_SUCCEEDED
        mov edx, pBase
        mov eax, var.lVal
        mov (AsmCtrlData ptr [edx]).m_ForeColor, eax
        .ELSE
    .ENDIF
    xor eax, eax            ; return S_OK
    ret
IPersistPropertyBag_Load ENDP

;--------------------------------------------------------------------------
IPersistPropertyBag_Save PROC this_:DWORD, pPropBag:DWORD, fClearDirty:DWORD, fSaveAllProperties:DWORD
    LOCAL var:VARIANT,    pBase:DWORD

    pObjectData this_, ecx
    mov pBase, ecx
    .IF fClearDirty
        mov (AsmCtrlData ptr [ecx]).m_isDirty, FALSE
    .ENDIF    
 ;  persisted quantities and order
 ;  m_Value = Value
    
    mov var.vt, VT_I4
    mov eax, (AsmCtrlData ptr [ecx]).m_Value
    mov var.lVal, eax
    coinvoke pPropBag, IPropertyBag, Write, ADDR wszValue, ADDR var

    mov ecx, pBase
    mov var.vt, VT_I4
    mov eax, (AsmCtrlData ptr [ecx]).m_BackColor
    mov var.lVal, eax
    coinvoke pPropBag, IPropertyBag, Write, ADDR wszBackColor, ADDR var

    mov ecx, pBase
    mov var.vt, VT_I4
    mov eax, (AsmCtrlData ptr [ecx]).m_ForeColor
    mov var.lVal, eax
    coinvoke pPropBag, IPropertyBag, Write, ADDR wszForeColor, ADDR var

    xor eax, eax            ; return S_OK
    ret
IPersistPropertyBag_Save ENDP

;--------------------------------------------------------------------------
ICategorizeProperties_MapPropertyToCategory PROC this_:DWORD, dispid:DWORD, ppropcat:DWORD

    mov ecx, OFFSET AsmCtrlPropMap          
    mov edx, (PropCatItem PTR [ecx]).m_CatID
    .WHILE edx          ; a NULL CatID signals the end
        mov eax, (PropCatItem PTR [ecx]).m_dispid
        .IF eax == dispid
            ; we found a dispid we catagorize
            mov ecx, ppropcat
            mov [ecx], edx          ; return m_CatID
            xor eax, eax            ; return S_OK
            ret
        .ENDIF
        add ecx, SIZEOF PropCatItem
    .ENDW
    mov eax, E_FAIL
    ret
ICategorizeProperties_MapPropertyToCategory ENDP

;--------------------------------------------------------------------------
ICategorizeProperties_GetCategoryName PROC this_:DWORD, propcat:DWORD, lcid:DWORD, pbstrName:DWORD
    LOCAL Buf[MAX_PATH]:BYTE, wBuf[MAX_PATH]:WORD

    mov ecx, OFFSET AsmCtrlCatNameMap
    mov edx, (CatNameItem PTR [ecx]).m_ResourceID
    .WHILE edx          ; a NULL ResourceID signals the end
        mov eax, (CatNameItem PTR [ecx]).m_CatID
        .IF eax == propcat
            ; we found our catagory name index
            invoke LoadString, g_hModule, edx, ADDR Buf, MAX_PATH
            invoke MultiByteToWideChar, CP_ACP, 0, ADDR Buf, -1, ADDR wBuf, MAX_PATH
            invoke SysAllocString, ADDR wBuf
            mov ecx, pbstrName 
            mov [ecx], eax
            xor eax, eax            ; return S_OK
            ret
        .ENDIF
        add ecx, SIZEOF CatNameItem
    .ENDW
    mov eax, E_FAIL
    ret
ICategorizeProperties_GetCategoryName ENDP
;--------------------------------------------------------------------------

end DllMain

⌨️ 快捷键说明

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