按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
显示出选择的项目,双击某个项目的时候会弹出图中标有②的消息框。右边的列表框是IDC_LISTBOX2,是一个多选的列表框,选择完毕后可以用“查看”按钮弹出图中标有①的消息框,消息框中显示了所有选中的项目。读者也可以按下“复位”按钮清除列表框的选择。
图5。9 列表框例子的运行结果
定义列表框时可以使用的风格如表5。7所示。
表5。7 列表框可以使用的风格
风 格
说 明
LBS_DISABLENOSCROLL
在不需滚动的时候也显示垂直滚动条
LBS_EXTENDEDSEL
在多选列表框中允许按住Shift键同时选中一个范围
LBS_MULTIPLESEL
允许多选,如果不定义的话则是单选列表框
LBS_NOSEL
列表框项目只能查看不能选择
LBS_NOTIFY
用户点击或双击项目时向父窗口发送WM_MAND消息
LBS_SORT
自动按字母顺序排序插入的项目
LBS_USETABSTOPS
列表框项目的文本中允许将Tab字符的位置展开
LBS_STANDARD
组合LBS_NOTIFY,LBS_SORT,WS_VSCROLL和WS_BORDER
一般单选列表框只需定义LBS_STANDARD就可以了。
汇编源代码Listbox。asm如下所示:
来源:电子工业出版社 作者:罗云彬 上一页 回书目 下一页
上一页 回书目 下一页
第5章 使用资源
5。4 对 话 框(10)
。386
。model flat; stdcall
option casemap :none
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
; Include 文件定义
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
include windows。inc
include user32。inc
includelib user32。lib
include kernel32。inc
includelib kernel32。lib
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
; Equ 等值定义
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
ICO_MAIN equ 1000h
DLG_MAIN equ 1
IDC_LISTBOX1 equ 101
IDC_LISTBOX2 equ 102
IDC_SEL1 equ 103
IDC_RESET equ 104
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
; 数据段
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
。data?
hInstance dd ?
nst
szText1 db '项目1';0
szText2 db '项目2';0
szText3 db '项目3';0
szPath db '*。*';0
szMessage db '选择结果:%s';0
szTitle db '您的选择';0
szSelect db '您选择了以下的项目:'
szReturn db 0dh;0ah;0
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
; 代码段
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
de
;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》
_ProcDlgMain proc uses ebx edi esi hWnd;wMsg;wParam;lParam
local @szBuffer'128':byte
local @szBuffer1'128':byte
local @szTextBuff'2048':byte
local @dwCount
mov eax;wMsg
。if eax WM_CLOSE
invoke EndDialog;hWnd;NULL
。elseif eax WM_INITDIALOG
invoke LoadIcon;hInstance;ICO_MAIN
invoke SendMessage;hWnd;WM_SETICON;ICON_BIG;eax
;********************************************************************
; 初始化列表框
;********************************************************************
invoke SendDlgItemMessage;hWnd;
IDC_LISTBOX1;LB_ADDSTRING;0;addr szText1
invoke SendDlgItemMessage;hWnd;
IDC_LISTBOX1;LB_ADDSTRING;0;addr szText2
invoke SendDlgItemMessage;hWnd;
IDC_LISTBOX1;LB_ADDSTRING;0;addr szText3
Invoke SendDlgItemMessage;hWnd;IDC_LISTBOX2;LB_DIR;
DDL_ARCHIVE or DDL_DRIVES or DDL_DIRECTORY;
addr szPath
;********************************************************************
。elseif eax WM_MAND
mov eax;wParam
;********************************************************************
; 由于印刷宽度有限,WM_MAND消息处理代码的缩进格式有所影响,请读者注意
; 取多选的列表框项目
;********************************************************************
。if ax IDOK
invoke SendDlgItemMessage;hWnd;IDC_LISTBOX2;LB_GETSELCOUNT;0;0
mov @dwCount;eax
invoke SendDlgItemMessage;hWnd;IDC_LISTBOX2;
LB_GETSELITEMS;128/4;addr @szBuffer
invoke lstrcpy;addr @szTextBuff;addr szSelect
lea esi;@szBuffer
。while @dwCount
lodsd
lea ecx;@szBuffer1
invoke SendDlgItemMessage;hWnd;
IDC_LISTBOX2;LB_GETTEXT;eax;ecx
invoke lstrcat;addr @szTextBuff;addr szReturn
invoke lstrcat;addr @szTextBuff;addr @szBuffer1
dec @dwCount
。endw
invoke MessageBox;hWnd;addr @szTextBuff;addr szTitle;MB_OK
。elseif ax IDC_RESET
invoke SendDlgItemMessage;hWnd;IDC_LISTBOX2;LB_SETSEL;FALSE;…1
。elseif ax IDC_LISTBOX1
shr eax;16
。if ax LBN_SELCHANGE
;********************************************************************
; 将鼠标点击结果显示在文本框中
;********************************************************************
invoke SendMessage;lParam;LB_GETCURSEL;0;0
lea ecx;@szBuffer
invoke SendMessage;lParam;LB_GETTEXT;eax;ecx
invoke SetDlgItemText;hWnd;IDC_SEL1;addr @szBuffer
;********************************************************************
; 双击项目则弹出对话框
;********************************************************************
。elseif ax LBN_DBLCLK
invoke SendMessage;lParam;LB_GETCURSEL;0;0
lea ecx;@szBuffer
invoke SendMessage;lParam;LB_GETTEXT;eax;ecx
invoke wsprintf;addr @szBuffer1;addr szMessage;addr @szBuffer
invoke MessageBox;hWnd;addr @szBuffer1;addr szTitle;MB_OK
。endif
;********************************************************************
。elseif ax IDC_LISTBOX2
shr eax;16
。if ax LBN_SELCHANGE
invoke SendMessage;lParam;LB_GETSELCOUNT;0;0
mov ebx;eax
invoke GetDlgItem;hWnd;IDOK
invoke EnableWindow;eax;ebx
。endif
。endif
;********************************************************************
; 恢复代码缩进格式,请读者注意
;********************************************************************
。else
mov eax;FALSE
ret
。endif0
mov eax;TRUE
ret
_ProcDlgMain