友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
飞读中文网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

windows环境下32位汇编语言程序设计-第38章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 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
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!