[摘要]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中运用