郁闷了半天,为什么下拉框不能下拉,原来是下拉框高度不够,这问题都会忘记...无语了!
.386
.model flat, stdcall ;32 bit memory model
option casemap :none ;case sensitive
include CommonControls.inc
.code
;########################################################################
DlgProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
local @szBuffer[128] : byte
mov eax, uMsg
.if eax == WM_INITDIALOG ;初始化标题栏图标
invoke LoadIcon, hInstance, ICO_MAIN
invoke SendMessage, hWnd, WM_SETICON, ICON_BIG, eax
;初始化组合框
invoke SendDlgItemMessage, hWnd, IDC_TITLETEXT, CB_ADDSTRING, 0, addr szText1
invoke SendDlgItemMessage, hWnd, IDC_TITLETEXT, CB_ADDSTRING, 0, addr szText2
invoke SendDlgItemMessage, hWnd, IDC_TITLETEXT, CB_ADDSTRING, 0, addr szText3
invoke SendDlgItemMessage, hWnd, IDC_TITLETEXT, CB_SETCURSEL, 0, 0
invoke GetDlgItem, hWnd, IDC_CUSTOMTEXT
invoke EnableWindow, eax, FALSE
invoke LoadBitmap, hInstance, IDB_1
mov hBmp1, eax
invoke LoadBitmap, hInstance, IDB_2
mov hBmp2, eax
invoke CheckDlgButton, hWnd, IDC_SHOWBMP, BST_CHECKED
invoke CheckDlgButton, hWnd, IDC_ALOW, BST_CHECKED
invoke CheckDlgButton, hWnd, IDC_THICKFRAME, BST_CHECKED
invoke SendDlgItemMessage, hWnd, IDC_SCROLL, SBM_SETRANGE, 0, 100
.elseif eax==WM_COMMAND
mov eax, wParam
.if ax == IDC_BTNCANCEL
invoke EndDialog, hWnd, NULL
invoke DeleteObject, hBmp1
invoke DeleteObject, hBmp2
.elseif ax == IDC_BTNOK
mov eax, hBmp1 ;切换图片
xchg eax, hBmp2
mov hBmp1, eax
invoke SendDlgItemMessage, hWnd, IDC_PIC, STM_SETIMAGE, IMAGE_BITMAP, eax
.elseif ax == IDC_ONTOP ;窗口是否置顶
invoke IsDlgButtonChecked, hWnd, IDC_ONTOP
.if eax == BST_CHECKED
invoke SetWindowPos, hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE
.else
invoke SetWindowPos, hWnd, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE
.endif
.elseif ax == IDC_SHOWBMP ;是否显示图片
invoke GetDlgItem, hWnd, IDC_PIC
mov ebx, eax
invoke IsWindowVisible, ebx
.if eax
invoke ShowWindow, ebx, SW_HIDE
.else
invoke ShowWindow, ebx, SW_SHOW
.endif
.elseif ax == IDC_ALOW ;允许更换图片按钮
invoke IsDlgButtonChecked, hWnd, IDC_ALOW
.if eax == BST_CHECKED
mov ebx, TRUE
.else
xor ebx, ebx
.endif
invoke GetDlgItem, hWnd, IDC_BTNOK
invoke EnableWindow, eax, ebx
.elseif ax == IDC_MODALFRAME
invoke GetWindowLong, hWnd, GWL_STYLE
and eax, not WS_THICKFRAME
invoke SetWindowLong, hWnd, GWL_STYLE, eax
.elseif ax == IDC_THICKFRAME
invoke GetWindowLong, hWnd, GWL_STYLE
or eax, WS_THICKFRAME
invoke SetWindowLong, hWnd, GWL_STYLE, eax
.elseif ax == IDC_TITLETEXT
shr eax, 16
.if ax == CBN_SELENDOK
invoke SendDlgItemMessage, hWnd, IDC_TITLETEXT, CB_GETCURSEL, 0, 0
.if eax == 2
invoke GetDlgItem, hWnd, IDC_CUSTOMTEXT
invoke EnableWindow, eax, TRUE
.else
mov ebx, eax
invoke SendDlgItemMessage, hWnd, IDC_TITLETEXT, CB_GETLBTEXT, ebx, addr @szBuffer
invoke SetWindowText, hWnd, addr @szBuffer
invoke GetDlgItem, hWnd, IDC_CUSTOMTEXT
invoke EnableWindow, eax, FALSE
.endif
.endif
.elseif ax == IDC_CUSTOMTEXT
invoke GetDlgItemText, hWnd, IDC_CUSTOMTEXT, addr @szBuffer, sizeof @szBuffer
invoke SetWindowText, hWnd, addr @szBuffer
.endif
.elseif eax == WM_HSCROLL
mov eax, wParam
.if ax == SB_LINELEFT
dec dwPos
.elseif ax == SB_LINERIGHT
inc dwPos
.elseif ax == SB_PAGELEFT
sub dwPos, 10
.elseif ax == SB_PAGERIGHT
add dwPos, 10
.elseif ax == SB_THUMBPOSITION || ax == SB_THUMBTRACK
mov eax, wParam
shr eax, 16
mov dwPos, eax
.else
mov eax, TRUE
ret
.endif
cmp dwPos, 0
jge @F
mov dwPos, 0
@@:
cmp dwPos, 100
jle @F
mov dwPos, 100
@@:
invoke SetDlgItemInt, hWnd, IDC_VALUE, dwPos, FALSE
invoke SendDlgItemMessage, hWnd, IDC_SCROLL, SBM_SETPOS, dwPos, TRUE
.elseif eax == WM_CLOSE ;关闭对话框并销毁图片资源句柄
invoke EndDialog, hWnd, 0
invoke DeleteObject, hBmp1
invoke DeleteObject, hBmp2
.else
mov eax, FALSE
ret
.endif
mov eax, TRUE
ret
DlgProc endp
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke InitCommonControls
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,addr DlgProc,NULL
invoke ExitProcess,0
end start
浙公网安备 33010602011771号