盾怪网教程:是一个免费提供流行杀毒软件教程、在线学习分享的学习平台!

改造MFC编写的控件在Win32ASM中使用

时间:2024/12/19作者:未知来源:盾怪网教程人气:

[摘要]WS_SYSMENUCAPTION "ColorPicker 控件测试"FONT 9, "宋体"BEGIN CONTROL &...
WS_SYSMENU
CAPTION  "ColorPicker 控件测试"
FONT     9, "宋体"
BEGIN
    CONTROL         "Custom1",IDC_COLORPICKER1,"ColorPickerWnd",WS_TABSTOP,26,24,14,14
    LTEXT           "对话框模板生成控件",IDC_STATIC,51,27,73,8
    LTEXT           "这是动态创建的控件",IDC_STATIC,51,49,73,8
END

这是资源文件,利用对话框模板使用 ColorPicker 控件。

.386
.model flat, stdcall  ;32 bit memory model
option casemap :none  ;case sensitive

include windows.inc
include kernel32.inc
include user32.inc
include gdi32.inc
include e:\asm\lib\macros.inc

includelib kernel32.lib
includelib user32.lib
includelib gdi32.lib

DlgProc proto :DWORD,:DWORD,:DWORD,:DWORD

.data?
        g_hInst         dd ?
        g_hColorPicker1 dd ?
        g_hColorPicker2 dd ?
        g_rgbBk         dd ?
        g_rgbText       dd ?

.const
        DLG_MAIN                equ     1000
        IDC_COLORPICKER1        equ     1001
        IDC_COLORPICKER2        equ     1002
        CPWM_GETCOLOR           equ     WM_USER+11      ;自定义消息

.code

start:

invoke  GetModuleHandle, NULL
        mov     g_hInst, eax
        invoke  LoadLibrary, CTXT("ColorPickerWnd.dll") ;加载动态库

        invoke  DialogBoxParam, g_hInst, DLG_MAIN, NULL, addr DlgProc, NULL
        invoke  ExitProcess, 0

DlgProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM

        mov     eax, uMsg
        .if eax==WM_INITDIALOG
                RGB     255, 255, 255
                mov     g_rgbBk, eax
                RGB     0, 128, 0
                mov     g_rgbText, eax

                invoke  GetDlgItem, hWnd, IDC_COLORPICKER1
                mov     g_hColorPicker1, eax

                ;这里就是动态创建 ColorPicker 控件
                invoke  CreateWindowEx, 0, CTXT("ColorPickerWnd"), CTXT("Ctl2"),
                        WS_CHILD + WS_VISIBLE, 39, 70, 21, 21, hWnd, IDC_COLORPICKER2, g_hInst, 0
                mov     g_hColorPicker2, eax

        .elseif eax==WM_COMMAND
                mov     eax, wParam
                and     eax, 0ffffh

                ;当选择了别的颜色时我们通过自定义消息 CPWM_GETCOLOR 取得新的颜色
                .if eax==IDC_COLORPICKER1
                        invoke  SendMessage, g_hColorPicker1, CPWM_GETCOLOR, 0, 0
                        mov     g_rgbBk, eax
                .elseif eax==IDC_COLORPICKER2
                        invoke  SendMessage, g_hColorPicker2, CPWM_GETCOLOR, 0, 0
                        mov     g_rgbText, eax
                .endif
                invoke  InvalidateRect, hWnd, NULL, TRUE

        ;对话框背景颜色
        .elseif eax==WM_CTLCOLORDLG
                invoke  CreateSolidBrush, g_rgbBk
                ret

        ;静态框颜色
        .elseif eax==WM_CTLCOLORSTATIC
                invoke  SetTextColor, wParam, g_rgbText
                invoke  SetBkColor, wParam, g_rgbBk
                invoke  CreateSolidBrush, g_rgbBk
                ret

        .elseif eax==WM_CLOSE
                invoke  EndDialog, hWnd, 0
        .else
                mov     eax, FALSE
                ret
        .endif
        mov     eax, TRUE
        ret

DlgProc endp

end start
初始化时动态创建了一个 ColorPicker 控件,自定义消息 CPWM_GETCOLOR 对应控件当中的 GetColorRef 函数,返回新的颜色值。

怎么样,只需要做少许工作我们就可以在 Win32ASM 中实现很酷的界面啦!

关键词:改造MFC编写的控件在Win32ASM中运用




Copyright © 2012-2018 盾怪网教程(http://www.dunguai.com) .All Rights Reserved 网站地图 友情链接

免责声明:本站资源均来自互联网收集 如有侵犯到您利益的地方请及时联系管理删除,敬请见谅!

QQ:1006262270   邮箱:kfyvi376850063@126.com   手机版