作者:six_L 此贴贴于2020-4-8 10:09:25,已被阅读272次/回复0 
invoke    TextOut,ps.hdc,50,80,addr OurTxt,sizeof OurTxt
option casemap:none
option win64:7
option frame:auto

include \UASM64\include\windows.inc

includelib \UASM64\Lib\kernel32.lib
includelib \UASM64\Lib\user32.lib
includelib \UASM64\Lib\gdi32.lib

    ICO_MAIN    equ    1000h
    DLG_MAIN    equ    1

.data?
    hInstance    qword    ?
    hMainhWnd    qword    ?
    hFont        qword    ?
    dwTxtColor    dword    ?
    dqColorCnt    qword    ?

.data
    OurTxt        db "Hello The World!", 0
    TxtColorTable    dd 0FFH,0FF00H,0FF0000H,0FFFF00H,0FF00FFH,0FFFFH
    ColorFlag    BOOL FALSE

.code

_ProcDlgMain Proc USES RDI hWnd:qword,wMsg:dword,wParam:qword,lParam:qword
    local ps:PAINTSTRUCT

    mov    eax,wMsg
    .if    eax == WM_INITDIALOG
        mov    rax,hWnd
        mov    hMainhWnd,rax
        invoke    LoadIcon,hInstance,ICO_MAIN
        invoke    SendMessage,hWnd,WM_SETICON,ICON_BIG,rax
        
        invoke  CreateFont,54,0,0,0,FW_BOLD,FALSE,FALSE,FALSE, \
                DEFAULT_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS, \
                DEFAULT_QUALITY,FIXED_PITCH, CStr("Cambria")
        mov    hFont, rax
        
        invoke    SetTimer, hWnd, 1, 1500, 0
        mov    dwTxtColor,0ff00h
        mov    dqColorCnt,0
        

    .elseif    eax == WM_COMMAND
        mov    rax,wParam
        .if    ax ==    IDCANCEL
            invoke    EndDialog,hWnd,NULL
        .elseif    ax ==    IDOK
            .if ColorFlag == TRUE
                invoke SetDlgItemText, hWnd, IDOK, CStr('ChangeColor')
                mov ColorFlag,FALSE
            .else
                invoke SetDlgItemText, hWnd, IDOK, CStr('StopChange')
                mov ColorFlag,TRUE
            .endif
        .endif

    .elseif    eax == WM_PAINT
        
        invoke    BeginPaint,hWnd,addr ps
        
        invoke    SelectObject,ps.hdc,hFont
        invoke    SetBkMode,ps.hdc,TRANSPARENT
        invoke    SetTextColor,ps.hdc,dwTxtColor
        
        invoke    TextOut,ps.hdc,50,80,addr OurTxt,sizeof OurTxt

        invoke    EndPaint, hWnd, addr ps
    
    .elseif eax == WM_TIMER
        
        .if ColorFlag == TRUE

            lea    rdi,TxtColorTable
            mov    rax,dqColorCnt
            mov    rcx,[rdi+rax*4]
            mov    dwTxtColor,ecx

            invoke    UpdateWindow, hWnd
            invoke  InvalidateRect,hWnd,NULL,NULL

            inc    dqColorCnt
            .if    dqColorCnt == 6
                mov    dqColorCnt,0
            .endif
        .endif

    .elseif    eax == WM_CLOSE
        
        invoke    KillTimer, hWnd, 1
        invoke    DeleteObject, hFont
        invoke    EndDialog,hWnd,NULL

    .else
        mov    rax,FALSE
        ret
    .endif
    mov    rax,TRUE
    ret

_ProcDlgMain    endp

WinMainCRTStartup Proc
    
    invoke    GetModuleHandle,NULL
    mov    hInstance,rax
    invoke    DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
    invoke    ExitProcess,NULL
    ret

WinMainCRTStartup  Endp


end

#include <\UASM64\include\resource.h>

#define    ICO_MAIN        0x1000    
#define    DLG_MAIN        1

ICO_MAIN    ICON        "Main.ico"

DLG_MAIN DIALOG 293, 180, 260, 144
STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "TextoutForColor"
FONT 9, "Cambria"
{
 PUSHBUTTON "ChangeColor", IDOK, 130, 125, 60, 14
 PUSHBUTTON "Exit", IDCANCEL, 195, 125, 60, 14
}

此贴的父贴(直接):
請教:Win32汇編中如何改變窗口字体的颜色?791 战庄 2018-5-18 23:19:58 48 正常