zoukankan      html  css  js  c++  java
  • RadASM编写拾色器

    配置RadASM编译器,选masm,在RadASM中新建-> Win32 App –>DialogAsMain.tpl ,取名Dlg_Test,再打开 Dlg_Test.dlg中编辑资源,如下图:

    对话框控件属性设置:Name :IDD_DIALOG ; Caption:拾色器 ; MaxButton:False ; SizeBorder:False ; TopMost:True ;

    打开project -> Resourcee添加一个图标资源,取名IDI_APP_MAIN

    在Dlg_Test.Rc中编辑,添加图标:

    #define    IDI_WIN_MAIN    100

    IDI_WIN_MAIN    ICON    "Res/main2.ico"

    #include "Res/Dlg_TestMnu.rc"

    #include "Res/Dlg_TestRes.rc"

    #include "Res/Dlg_TestDlg.rc"

    头文件:Dlg_Test.inc

    include windows.inc

    include user32.inc

    include kernel32.inc

    include shell32.inc

    include comctl32.inc

    include comdlg32.inc

    include gdi32.inc

    includelib user32.lib

    includelib kernel32.lib

    includelib shell32.lib

    includelib comctl32.lib

    includelib comdlg32.lib

    includelib gdi32.lib

    WinMain                PROTO :DWORD,:DWORD,:DWORD,:DWORD

    WndProc                PROTO :DWORD,:DWORD,:DWORD,:DWORD

    IDD_DIALOG            equ 1000

    IDM_MENU            equ 10000

    IDM_FILE_EXIT        equ 10001

    IDM_HELP_ABOUT        equ 10101

    IDI_APP_MAIN        EQU 0

    IDI_WIN_MAIN        EQU 100

    IDC_IMG_SHOWPIC                    equ 1001

    IDC_STC_POS_X                    equ 1002

    IDC_STC_POS_Y                    equ 1003

    IDC_EDT_POS_X                    equ 1004

    IDC_EDT_POS_Y                    equ 1005

    IDC_IMG_COLOR                    equ 1006

    IDC_EDT_RED                        equ 1010

    IDC_EDT_GREEN                    equ 1011

    IDC_EDT_BLUE                    equ 1012

    .const

    ClassName            db 'DLGCLASS',0

    AppName                db 'Dialog as main',0

    AboutMsg            db 'MASM32 RadASM Dialog as main',13,10,'Copyright ?MASM32 2001',0

    .data?

    hInstance            dd ?

    CommandLine            dd ?

    hWnd                dd ?

    源文件:Dlg_Test.asm

    .386

    .model flat,stdcall

    option casemap:none

    include Dlg_Test.inc

    .code

    start:

        invoke GetModuleHandle,NULL

        mov hInstance,eax

        invoke GetCommandLine

        invoke InitCommonControls

        mov        CommandLine,eax

        invoke WinMain,hInstance,NULL,CommandLine,SW_SHOWDEFAULT

        invoke ExitProcess,eax

    WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD

        LOCAL    wc:WNDCLASSEX

        LOCAL    msg:MSG

        mov        wc.cbSize,sizeof WNDCLASSEX

        mov        wc.style,CS_HREDRAW or CS_VREDRAW

        mov        wc.lpfnWndProc,offset WndProc

        mov        wc.cbClsExtra,NULL

        mov        wc.cbWndExtra,DLGWINDOWEXTRA

        push    hInst

        pop        wc.hInstance

        mov        wc.hbrBackground,COLOR_BTNFACE+1

        mov        wc.lpszMenuName,IDM_MENU

        mov        wc.lpszClassName,offset ClassName

        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

        invoke CreateDialogParam,hInstance,IDD_DIALOG,NULL,addr WndProc,NULL

        invoke ShowWindow,hWnd,SW_SHOWNORMAL

        invoke UpdateWindow,hWnd

        .while TRUE

            invoke GetMessage,addr msg,NULL,0,0

         .BREAK .if !eax

            invoke TranslateMessage,addr msg

            invoke DispatchMessage,addr msg

        .endw

        mov        eax,msg.wParam

        ret

    WinMain endp

    WndProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM

        ;保存光标的坐标值

        LOCAL @stPoint:POINT

        

        LOCAL @hDcShowPic:HDC

        LOCAL @hDcScreen:HDC

        LOCAL @hDcShowColor:HDC

        LOCAL @dwDx:DWORD

        LOCAL @dwDy:DWORD

            

        LOCAL @colorRect:RECT

        LOCAL @hColorWin:HWND

        LOCAL @dwColor:DWORD

        

        LOCAL @hBrush:HBRUSH

        LOCAL @hBrushOld:HBRUSH

        

        LOCAL @colorRed:byte

        LOCAL @colorGreen:byte

        LOCAL @colorBlue:byte

          

        

        mov        eax,uMsg

        .if eax==WM_INITDIALOG

            ;保存对话框的窗口句柄

            push    hWin

            pop        hWnd

            ;设置主窗口的图标

            invoke LoadIcon,hInstance,IDI_WIN_MAIN

            invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax

            ;使得窗口总在最前显示

            invoke SetWindowPos,hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE or SWP_NOSIZE

            

            ;设置定时器

            invoke SetTimer,hWnd,NULL,100,NULL

            

        .elseif eax    == WM_TIMER

            ;响应定时器的消息

            ;获取当前光标的坐标值

            invoke GetCursorPos,addr @stPoint

            ;xy的坐标显示到对话框

            invoke SetDlgItemInt,hWnd,IDC_EDT_POS_X,@stPoint.x,FALSE

            invoke SetDlgItemInt,hWnd,IDC_EDT_POS_Y,@stPoint.y,FALSE

            

            ;XY坐标靠前一点

            mov eax,@stPoint.x

            sub eax,12

            mov @dwDx,eax

            mov eax,@stPoint.y

            sub eax,12

            mov @dwDy,eax

            

            ;获取整个屏幕的DC

            invoke GetDC,NULL

            mov @hDcScreen,eax

            

            ;获取显示屏幕制定区域的窗口DC

            invoke GetDlgItem,hWnd,IDC_IMG_SHOWPIC ;获取图片框控件的句柄

            invoke GetDC,eax

            mov @hDcShowPic,eax

            

            ;将屏幕指定区域绘制到指定的窗口DC

            invoke StretchBlt,@hDcShowPic,0,0,160,160,@hDcScreen,@dwDx,@dwDy,24,24,SRCCOPY

            

            ;向图片屏幕指定区域绘制到指定的窗口DC

            ;创建一个黑色的实心画笔

            invoke CreatePen,PS_SOLID,1,0    ;这里可以设置画笔的类型、宽度、颜色

            mov @hBrush,eax

            invoke MoveToEx,@hDcShowPic,0,80,NULL    ;将始点移到点(0,80)

            invoke LineTo,@hDcShowPic,160,80        ;画水平线,从点(0,80)画到(160,80)

            invoke MoveToEx,@hDcShowPic,80,0,NULL    ;将始点移到点(80,0)

            invoke LineTo,@hDcShowPic,80,160        ;;画垂直线,从点(80,0)画到(80,160)

            

            ;显示当前鼠标指向的颜色值

            invoke GetDlgItem,hWnd,IDC_IMG_COLOR ;获取控件的句柄

            mov @hColorWin,eax

            invoke GetDC,eax    ;由控件的句柄获取这个图片框控件的DC

            mov @hDcShowColor,eax

            

            ;构造显示颜色值的图片框的坐标

            mov @colorRect.left,0

            mov @colorRect.top,0

            mov @colorRect.right,118

            mov @colorRect.bottom,22

            

            ;获取屏幕上鼠标所指向的点的颜色值

            invoke GetPixel,@hDcScreen,@stPoint.x,@stPoint.y

            mov @dwColor,eax

            

            ;为当前获取的颜色值创建一个实心画刷

            invoke CreateSolidBrush,@dwColor

            mov @hBrush,eax

            

            ;在显示颜色的图片框中填充画刷指定的颜色值

            ;即把在指定的区域用这个画刷(hBrush)在指定的DC(hDcShowColor)上填充颜色

            invoke FillRect,@hDcShowColor,addr @colorRect,@hBrush

            

            ;拆解32位的颜色值到三个字节类型的变量中,然后显示

            mov eax,@dwColor

            mov @colorRed,al

            mov @colorGreen,ah

            ror eax,16    ;eax中的值循环右移16

            mov @colorBlue,al

            invoke SetDlgItemInt,hWnd,IDC_EDT_RED,@colorRed,FALSE

            invoke SetDlgItemInt,hWnd,IDC_EDT_GREEN,@colorGreen,FALSE

            invoke SetDlgItemInt,hWnd,IDC_EDT_BLUE,@colorBlue,FALSE

            

        .elseif eax==WM_COMMAND

            mov        eax,wParam

            and        eax,0FFFFh

            .if eax==IDM_FILE_EXIT

                invoke SendMessage,hWin,WM_CLOSE,0,0

            .elseif eax==IDM_HELP_ABOUT

                invoke ShellAbout,hWin,addr AppName,addr AboutMsg,NULL

            .endif

    ;    .elseif eax==WM_SIZE

        .elseif eax==WM_CLOSE

            invoke DestroyWindow,hWin

        .elseif uMsg==WM_DESTROY

            invoke PostQuitMessage,NULL

        .else

            invoke DefWindowProc,hWin,uMsg,wParam,lParam

            ret

        .endif

        xor eax,eax

        ret

    WndProc endp

    end start

    效果图:

     

    本文示例引自jhkdiy的教程,转载请注明!

    OK ^_^ !!!!!!!!!!

  • 相关阅读:
    48. Rotate Image
    47. Permutations II
    46. Permutations
    45. Jump Game II
    44. Wildcard Matching
    43. Multiply Strings
    42. Trapping Rain Water
    41. First Missing Positive
    40. Combination Sum II
    39. Combination Sum
  • 原文地址:https://www.cnblogs.com/luowei010101/p/1979685.html
Copyright © 2011-2022 走看看