win32汇编中怎么使用combobox?
谢谢 问题点数:100、回复次数:1Top
1 楼awinder(风)回复于 2002-02-10 00:34:12 得分 100
以下演示了ComboBox的基本操作。
//combo.rc
#include "resource.h"
DLG_MAIN DIALOG DISCARDABLE 200, 200, 122, 65
STYLE WS_MINIMIZEBOX | WS_CAPTION | WS_SYSMENU
CAPTION "combo使用演示"
FONT 9, "宋体"
BEGIN
COMBOBOX 100,9,10,91,80,CBS_DROPDOWNLIST | WS_VSCROLL
PUSHBUTTON "删除",110,20,31,33,14
PUSHBUTTON "退出",120,66,31,33,14
END
;combo.asm
.386
.model flat, stdcall
option casemap :none
include windows.inc
include user32.inc
include kernel32.inc
includelib user32.lib
includelib kernel32.lib
ComboWndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
WndProc PROTO :DWORD,:DWORD,:DWORD,:DWORD
.data
dlgname db "DLG_MAIN",0
Item1 db "Item1",0
Item2 db "Item2",0
Item3 db "Item3",0
msgtitle db "ComboBox使用演示",0
hInstance dd 0
h_Combo dd 0
h_Button_delete dd 0
h_Button_exit dd 0
lpCombo dd 0
.data?
buffer db 20 dup(?)
.code
start:
invoke GetModuleHandle, NULL
MOV hInstance, EAX
invoke DialogBoxParam,hInstance,ADDR dlgname,0,ADDR WndProc,0
invoke ExitProcess,NULL
WndProc PROC hWin :DWORD,
uMsg :DWORD,
wParam :DWORD,
lParam :DWORD
.if uMsg == WM_INITDIALOG
invoke GetDlgItem,hWin,100
mov h_Combo,eax ;得到CombBox句柄
invoke SendMessage,h_Combo,CB_ADDSTRING,0,ADDR Item1
invoke SendMessage,h_Combo,CB_ADDSTRING,0,ADDR Item2
invoke SendMessage,h_Combo,CB_ADDSTRING,0,ADDR Item3
invoke SetWindowLong,h_Combo,GWL_WNDPROC,ComboWndProc
mov lpCombo,eax ;设置comboBox钩子
.elseif uMsg == WM_COMMAND
.if wParam == 110 ;删除
invoke SendMessage,h_Combo,CB_GETCURSEL,0,0
invoke SendMessage,h_Combo,CB_DELETESTRING,eax,0
.elseif wParam == 120 ;退出
invoke PostQuitMessage,NULL
.endif
.elseif uMsg == WM_CLOSE
invoke PostQuitMessage,NULL
.endif
xor eax, eax
ret
WndProc endp
ComboWndProc proc hCtl :DWORD,
uMsg :DWORD,
wParam :DWORD,
lParam :DWORD
.if uMsg == WM_COMMAND
invoke GetWindowText,h_Combo,ADDR buffer,20
invoke MessageBox,NULL,ADDR buffer,ADDR msgtitle,MB_OK
.endif
invoke CallWindowProc,lpCombo,hCtl,uMsg,wParam,lParam
ret
ComboWndProc endp
end start
Top




