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

📄 asmctrl.asm

📁 这是一个数字图像处理的matlab仿真程序
💻 ASM
📖 第 1 页 / 共 3 页
字号:
; AsmCtrl.ocx        copyright 7/24/00 Ernest J Murphy
.NOLIST  ; keep the list file small, don't add the std libs to it.
.386
.model flat, stdcall
option casemap:none ; case sensitive

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

;DEBUGL  EQU 1

;--------------------------------------------------------------------------
include     \masm32\include\windows.inc
include     \masm32\include\user32.inc
include     \masm32\include\kernel32.inc
include     \masm32\include\advapi32.inc    
include     \masm32\include\oleaut32.inc
include     \masm32\include\masm32.inc
include     \masm32\include\ole32.inc
include     \masm32\include\gdi32.inc


include     \masm32\com\include\oaidl.inc
include     \masm32\com\include\L.inc
include     \masm32\com\include\language.inc
include     \masm32\com\include\colib.inc
include     \masm32\com\include\olectl.inc
include     \masm32\com\include\component.inc

include     IAsmCtrl.inc
include     AsmCtrl_vtable.inc

includelib  \masm32\lib\user32.lib
includelib  \masm32\lib\kernel32.lib
includelib  \masm32\lib\advapi32.lib
includelib  \masm32\lib\oleaut32.lib
includelib  \masm32\lib\ole32.lib
includelib  \masm32\lib\masm32.lib
includelib  \masm32\lib\gdi32.lib
includelib  \masm32\COM\colib\colib.lib

PUBLIC      ClassMap

;--------------------------------------------------------------------------
.LISTALL ; NOW let's list everything

;--------------------------------------------------------------------------
.data

; describe the objects inside the DLL
ClassMap    ClassItem \ ; class map instance  
     { pCLSID_AsmCtrl,              DISPINTERFACE + SUPPLY_TYPE_INFO,   \
       OFFSET AsmCtrlTypeLibInfo,   OFFSET AsmCtrlIMap,     \
       OFFSET CreateAsmCtrl,        OFFSET DestroyAsmCtrl,  \
       OFFSET  AsmCtrlInitData,     SIZEOF AsmCtrlObject }
       END_CLASS_MAP

AsmCtrlIMap          \
    InterfaceItem       { pIID_IAsmCtrl,              OFFSET vtable.IAsmCtrl }
    InterfaceItem       { pIID_IOleObject,             OFFSET vtable.IOleObject }
    InterfaceItem       { pIID_IProvideClassInfo,      OFFSET vtable.IProvideClassInfo }
    InterfaceItem       { pIID_IPersist,               OFFSET vtable.IPersist }
    InterfaceItem       { pIID_IPersistStreamInit,     OFFSET vtable.IPersistStreamInit }
    InterfaceItem       { pIID_IViewObject,            OFFSET vtable.IViewObject }
    InterfaceItem       { pIID_IViewObject2,           OFFSET vtable.IViewObject }
; todo:
;   InterfaceItem       { pIID_ISpecifyPropertyPages,  OFFSET vtable.ISpecifyPropertyPages }
    InterfaceItem       { pIID_IPersistPropertyBag,    OFFSET vtable.IPersistPropertyBag }
    InterfaceItem       { pIID_ICategorizeProperties,  OFFSET vtable.ICategorizeProperties }
    END_INTERFACE_MAP

AsmCtrlTypeLibInfo  TypeLibInfo      {pLIBID_AsmCtrl, 1, 0}     

AsmCtrlData STRUCT
    m_isDirty           DWORD   0
    m_advf              DWORD   0
    m_pClientSite       DWORD   0
    m_pViewAdviseSink   DWORD   0
    m_pAdviseHolder     DWORD   0
    m_himetricExtent    SIZEL   {3968, 3968}
    m_pixelExtent       SIZEL   {150, 150 }
    m_Value             DWORD   85
    m_BackColor         DWORD   0808080H
    m_ForeColor         DWORD   0FFFFFFH
AsmCtrlData ENDS

AsmCtrlObject    STRUCT
    ObjectData0     ObjectData      { }     ; base values
    AsmCtrlData0    AsmCtrlData     { }     ; custom object data
    ObjectEntry0    ObjectEntry     { }     ; delegated Unknown
    ObjectEntry1    ObjectEntry     { }     ; IAsmCtrl
    ObjectEntry2    ObjectEntry     { }     ; IOleObject
    ObjectEntry3    ObjectEntry     { }     ; IProvideClassInfo
    ObjectEntry4    ObjectEntry     { }     ; IPersist
    ObjectEntry5    ObjectEntry     { }     ; IPersistStreamInit
    ObjectEntry6    ObjectEntry     { }     ; IViewObject
    ObjectEntry7    ObjectEntry     { }     ; IViewObject2
; todo:
;   ObjectEntry8    ObjectEntry     { }     ; ISpecifyPropertyPages
    ObjectEntry9    ObjectEntry     { }     ; IPersistPropertyBag
    ObjectEntry10   ObjectEntry     { }     ; ICategorizeProperties
AsmCtrlObject    ENDS

vtable                      _vtable {}

; define the interface IID's
DeclareGuid IID_IAsmCtrl
DeclareGuid CLSID_AsmCtrl
DeclareGuid LIBID_AsmCtrl
DeclareGuid IID_IOleObject
DeclareGuid IID_IProvideClassInfo
DeclareGuid IID_IPersist
DeclareGuid IID_IPersistStreamInit
DeclareGuid IID_IViewObject
DeclareGuid IID_IViewObject2
DeclareGuid IID_ISpecifyPropertyPages
DeclareGuid IID_IPersistPropertyBag
DeclareGuid IID_IOleControlSite
DeclareGuid IID_ICategorizeProperties
DeclareGuid IID_IOleWindow

DeclareGuid CLSID_StockFontPage
DeclareGuid CLSID_StockColorPage

HIMETRIC_PER_PIXEL  REAL4   26.458333

packedDW UNION 
    value DWORD     ? 
    STRUCT 
        loword WORD     ? 
        hiword WORD     ?    
    ENDS 
packedDW ENDS

PropCatItem     STRUCT
    m_dispid        DWORD   0
    m_CatID         DWORD   0
PropCatItem     ENDS

CatNameItem     STRUCT
    m_CatID         DWORD   0
    m_ResourceID    DWORD   0
CatNameItem     ENDS

END_CAT_MAP     MACRO 
    LOCAL  NullCatItem
    NullCatItem CatNameItem {0,0}
    ENDM

AsmCtrlPropMap          PropCatItem     { 0,                1}
    PropCatItem2        PropCatItem     { 1,                1}
    PropCatItem3        PropCatItem     { DISPID_FORECOLOR, 1}
    PropCatItem4        PropCatItem     { DISPID_BACKCOLOR, 1}
    PropCatItem5        PropCatItem     { DISPID_ABOUTBOX,  1}
    END_CAT_MAP

AsmCtrlCatNameMap       PropCatItem     { 1, IDS_AsmCtrl}
    END_CAT_MAP

AsmCtrlInitData STRUCT
    m_pAsmCtrlPropMap       DWORD   0
    m_pAsmCtrlCatNameMap    DWORD   0
AsmCtrlInitData ENDS

IDD_ABOUT               EQU     1000
IDC_OK                  EQU     1001
IDC_STATIC1             EQU     1002
IDC_STATIC2             EQU     1003
IDD_ABOUT_BITMAP        EQU     1005
IDB_ABOUT               EQU     2000
IDS_AsmCtrl             EQU     3000

AsmCtrlInitData1    AsmCtrlInitData     { OFFSET AsmCtrlPropMap, OFFSET AsmCtrlCatNameMap}

szClassName         BYTE        "ABOUT_MYCTRL2", 0
szAppName1          BYTE        "About My Control", 0
szAbout             BYTE        "Super-cheap About box for My Control", 0

szName              BYTE        "My Control", 0
NameLength          DWORD       10           
szAboutBox          byte        "ABOUTBOX", 0


;IDC_OK              EQU         1000

; names for storage values (in stream order)
wszValue            wchar       L(<Value\0>)
wszBackColor        wchar       L(<BackColor\0>)
wszForeColor        wchar       L(<ForeColor\0>)

; Property names
wszAsmCtrl          wchar       L(<Asm Control 2\0>)


;--------------------------------------------------------------------------
; prototypes
;HimetricToPixel     PROTO   :DWORD
;PixelToHimetric     PROTO   :DWORD
aboutBoxProc        PROTO   :DWORD, :DWORD, :packedDW, :packedDW
SendViewChange      PROTO   :DWORD


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

;--------------------------------------------------------------------------
;IAsmCtrl
CreateAsmCtrl PROC this_:DWORD
LOCAL pAH:DWORD

    pObjectData this_, ecx  ; cast this_ to CreateAsmCtrl object data
    xor eax, eax                                ; get variable
    mov pAH, eax
    mov (AsmCtrlData ptr [ecx]).m_isDirty, eax
    mov (AsmCtrlData ptr [ecx]).m_pClientSite, eax
    mov (AsmCtrlData ptr [ecx]).m_pViewAdviseSink, eax
    mov (AsmCtrlData ptr [ecx]).m_pAdviseHolder, eax
    mov (AsmCtrlData ptr [ecx]).m_himetricExtent.x, eax
    mov (AsmCtrlData ptr [ecx]).m_himetricExtent.y, eax
    mov (AsmCtrlData ptr [ecx]).m_pixelExtent.x, eax
    mov (AsmCtrlData ptr [ecx]).m_pixelExtent.y, eax
    mov (AsmCtrlData ptr [ecx]).m_Value, eax
    invoke CreateOleAdviseHolder, ADDR pAH
    xor eax, eax                                ; return S_OK
    ret
CreateAsmCtrl ENDP

;--------------------------------------------------------------------------
DestroyAsmCtrl PROC this_:DWORD
    LOCAL pBase:DWORD

    pObjectData this_, ecx  ; cast this_ to CreateAsmCtrl object data
    mov pBase, ecx
    mov ecx, pBase
    invoke ComPtrAssign, ADDR (AsmCtrlData ptr [ecx]).m_pClientSite, NULL
    mov ecx, pBase
    invoke ComPtrAssign, ADDR (AsmCtrlData ptr [ecx]).m_pViewAdviseSink, NULL
    mov ecx, pBase
    mov eax, (AsmCtrlData ptr [ecx]).m_pAdviseHolder
    .IF eax
        coinvoke (AsmCtrlData ptr [ecx]).m_pAdviseHolder, IUnknown, Release
    .ENDIF
    mov ecx, pBase
    xor eax, eax                                ; return S_OK
    ret
DestroyAsmCtrl ENDP

;--------------------------------------------------------------------------
put_Value PROC this_:DWORD, newVal:DWORD

    pObjectData this_, edx
    mov (AsmCtrlData ptr [edx]).m_isDirty, TRUE
    mov eax, newVal
    mov (AsmCtrlData ptr [edx]).m_Value, eax
    xor eax, eax
    ret
put_Value ENDP

;--------------------------------------------------------------------------
get_Value PROC this_:DWORD, pVal:DWORD

    pObjectData this_, edx
    mov eax, (AsmCtrlData ptr [edx]).m_Value
    mov ecx, pVal
    mov [ecx], eax
    xor eax, eax
    ret
get_Value ENDP

;--------------------------------------------------------------------------
Raise PROC this_:DWORD, Value:DWORD

    pObjectData this_, edx
    mov (AsmCtrlData ptr [edx]).m_isDirty, TRUE
    mov eax, (AsmCtrlData ptr [edx]).m_Value
    add eax, Value
    pObjectData this_, edx
    mov (AsmCtrlData ptr [edx]).m_Value, eax
    xor eax, eax    ;		return S_OK
    ret
Raise ENDP

;--------------------------------------------------------------------------
put_ForeColor PROC this_:DWORD, NewColor:DWORD

    pObjectData this_, ecx
    mov (AsmCtrlData ptr [ecx]).m_isDirty, TRUE
    mov eax, NewColor
    mov (AsmCtrlData ptr [ecx]).m_ForeColor, eax
    invoke SendViewChange, this_
    xor eax, eax    ;		return S_OK
    ret
put_ForeColor  ENDP

;--------------------------------------------------------------------------
get_ForeColor PROC this_:DWORD, pColor:DWORD

    .IF !pColor
        mov eax, E_POINTER
        ret
    .ENDIF
    pObjectData this_, ecx
    mov eax, (AsmCtrlData ptr [ecx]).m_ForeColor
    mov ecx, pColor
    mov [ecx], eax
    xor eax, eax    ;		return S_OK
    ret
get_ForeColor  ENDP

;--------------------------------------------------------------------------
put_BackColor PROC this_:DWORD, NewColor:DWORD

    pObjectData this_, ecx
    mov (AsmCtrlData ptr [ecx]).m_isDirty, TRUE
    mov eax, NewColor
    mov (AsmCtrlData ptr [ecx]).m_BackColor, eax
    invoke SendViewChange, this_
    xor eax, eax    ;		return S_OK
    ret
put_BackColor  ENDP

;--------------------------------------------------------------------------
get_BackColor PROC this_:DWORD, pColor:DWORD
    .IF !pColor
        mov eax, E_POINTER
        ret
    .ENDIF
    pObjectData this_, ecx
    mov eax, (AsmCtrlData ptr [ecx]).m_BackColor
    mov ecx, pColor
    mov [ecx], eax
    xor eax, eax    ;		return S_OK
    ret
get_BackColor  ENDP

;--------------------------------------------------------------------------
AboutBox  PROC this_:DWORD
    LOCAL pContainer:DWORD, pOleWindow:DWORD, hwnd:DWORD, wc:WNDCLASSEX
    LOCAL rect:RECT, Wwd:DWORD, Wht:DWORD, Wtx:DWORD, Wty:DWORD, hDlg:DWORD

    ; define the dialog box class
    mov   wc.cbSize,SIZEOF WNDCLASSEX
    mov   wc.style, CS_HREDRAW or CS_VREDRAW
    mov   wc.lpfnWndProc, OFFSET aboutBoxProc
    mov   wc.cbClsExtra,NULL
    mov   wc.cbWndExtra,DLGWINDOWEXTRA
    push  g_hModule
    pop   wc.hInstance
    mov   wc.hbrBackground,COLOR_BTNFACE+1
    mov   wc.lpszMenuName,NULL                          ;OFFSET MenuName
    mov   wc.lpszClassName,OFFSET szAboutBox
    invoke LoadIcon,NULL,IDI_APPLICATION
    mov   wc.hIcon,eax
    mov   wc.hIconSm,eax
    invoke LoadCursor,NULL,IDC_ARROW
    mov   wc.hCursor,eax
    invoke RegisterClassEx, addr wc
    
    mov hwnd, NULL
    pObjectData this_, ecx
    mov eax, (AsmCtrlData ptr [ecx]).m_pClientSite
    .IF eax
        coinvoke (AsmCtrlData ptr [ecx]).m_pClientSite, IOleClientSite, GetContainer, ADDR pContainer
        .IF_SUCCEEDED
            coinvoke pContainer, IUnknown, QueryInterface, pIID_IOleWindow, ADDR pOleWindow
            .IF_SUCCEEDED
                coinvoke pOleWindow, IOleWindow, GetWindow, ADDR hwnd
                coinvoke pOleWindow, IOleWindow, Release
            .ENDIF
            coinvoke pContainer, IOleClientSite, Release
        .ENDIF                    
    .ENDIF
    invoke DialogBoxParam, g_hModule, IDD_ABOUT, hwnd, ADDR aboutBoxProc, NULL
    xor eax, eax    ;		return S_OK
    ret
AboutBox ENDP

;--------------------------------------------------------------------------
aboutBoxProc PROC hwnd:DWORD, message:DWORD, wparam:packedDW, lparam:packedDW

    .IF message == WM_COMMAND
        .IF wparam.loword == IDC_OK
		invoke EndDialog, hwnd, 0
        .ENDIF
    .ELSE

⌨️ 快捷键说明

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