使用RGB值填充窗口背景 设置字体颜色

 

.386
    .Model Flat, StdCall
    Option Casemap :None

    Include windows.inc
    Include user32.inc
    Include kernel32.inc
    Include gdi32.inc
    Include winmm.inc

    includelib gdi32.lib
    IncludeLib user32.lib
    IncludeLib kernel32.lib
    IncludeLib winmm.lib
    include macro.asm   
    RGB macro red,green,blue
        xor eax,eax
        mov ah,blue
        shl eax,8
        mov ah,green
        mov al,red
 endm
        WinMain PROTO :DWORD,:DWORD,:DWORD,:DWORD
        WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD 
     .DATA
        szAppName   db "HelloWin",0
        TestString  db "Win32 assembly is great and easy!",0
   FontName db "script",0
    .DATA?
        hInstance   dd ?
        myBrush HBRUSH ?
       
    .CODE
   
    START:
        invoke GetModuleHandle,NULL
        mov hInstance,eax
        invoke WinMain,hInstance,NULL,NULL,SW_SHOWDEFAULT
        invoke ExitProcess,0

    WinMain proc hInst:DWORD,hPrevInst:DWORD,CmdLine:DWORD,CmdShow:DWORD
        LOCAL wndclass :WNDCLASSEX
        LOCAL msg      :MSG
        LOCAL hWnd     :HWND
        LOCAL logbrush :LOGBRUSH
       
       mov   logbrush.lbStyle,BS_HATCHED
          RGB   57,128,244 
      
       mov   logbrush.lbColor,eax      
       mov   logbrush.lbHatch,HS_CROSS
       invoke CreateBrushIndirect,addr logbrush
       mov   myBrush,eax
       mov wndclass.cbSize,sizeof WNDCLASSEX  
       mov wndclass.style,CS_HREDRAW or CS_VREDRAW
       mov wndclass.lpfnWndProc,offset WndProc
       mov wndclass.cbClsExtra,0
       mov wndclass.cbWndExtra,0
       push hInst
       pop wndclass.hInstance
       invoke LoadIcon,NULL,IDI_APPLICATION
       mov wndclass.hIcon,eax 
       invoke LoadCursor,NULL,IDC_ARROW
       mov wndclass.hCursor,eax   
       push  myBrush
       pop   wndclass.hbrBackground
       mov wndclass.lpszMenuName,NULL
       mov wndclass.lpszClassName,offset szAppName
       mov wndclass.hIconSm,0
       
       invoke RegisterClassEx, ADDR wndclass
       .if (EAX==0)
            invoke MessageBox,NULL,CTXT("This program requires Windows NT!"),addr szAppName,MB_ICONERROR      
            ret
       .endif
           
       invoke CreateWindowEx,/
                        NULL,/
                ADDR szAppName,/
                CTXT("http://www.aogosoft.com"),/
                WS_OVERLAPPEDWINDOW,/
                200,/
                200,/
                400,/
                200,/
                NULL,/
                NULL,/
                hInst,/
                NULL

       mov hWnd,eax
       
       invoke ShowWindow,hWnd,SW_SHOWNORMAL
       invoke UpdateWindow,hWnd
       
       StartLoop:
           invoke GetMessage,ADDR msg,NULL,0,0
               cmp eax, 0
               je ExitLoop
                   invoke TranslateMessage, ADDR msg
                   invoke DispatchMessage,  ADDR msg
               jmp StartLoop
       ExitLoop:
       
    mov eax,msg.wParam
    ret
    WinMain endp

    WndProc proc hWin:DWORD,uMsg:DWORD,wParam :DWORD,lParam :DWORD
        LOCAL hdc       :HDC
        LOCAL ps        :PAINTSTRUCT
        local rect      :RECT      
         LOCAL hfont:HFONT
        .if uMsg==WM_CREATE
            invoke PlaySound,CTXT("C:/WINDOWS/Media/Windows XP 启动.wav"),NULL, SND_FILENAME or SND_ASYNC
           
        .elseif uMsg == WM_PAINT                 
            invoke BeginPaint,hWin, ADDR ps
          mov    hdc,eax
          invoke CreateFont,24,16,0,0,400,0,0,0,OEM_CHARSET,/
                                       OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,/
                                       DEFAULT_QUALITY,DEFAULT_PITCH or FF_SCRIPT,/
                                       ADDR FontName
            invoke SelectObject, hdc, eax
         mov    hfont,eax
         RGB    200,200,50
         invoke SetTextColor,hdc,eax
         RGB    40,100,255
         invoke SetBkColor,hdc,eax 
;         invoke TextOut,hdc,0,0,ADDR TestString,SIZEOF TestString

invoke GetClientRect,hWin,addr rect
            invoke DrawText,hdc,CTXT("Hello,Windows XP!"),-1,addr rect, DT_SINGLELINE or DT_CENTER or DT_VCENTER

         invoke SelectObject,hdc, hfont
         invoke EndPaint,hWin, ADDR ps                    
        .elseif uMsg == WM_DESTROY
            invoke PostQuitMessage,NULL    
           
        .else
            invoke DefWindowProc,hWin,uMsg,wParam,lParam
        .endif
        ret
    WndProc endp

    END START

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值