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

windows环境下32位汇编语言程序设计-第30部分

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




; 数据段

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

                 。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     endp

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

start:

                 invoke  GetModuleHandle;NULL

                 mov     hInstance;eax

                 invoke  DialogBoxParam;hInstance;

                         DLG_MAIN;NULL;offset _ProcDlgMain;NULL

                 invoke  ExitProcess;NULL

;》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》》

                 end     start



 
来源:电子工业出版社 作者:罗云彬 上一页         回书目         下一页          
上一页         回书目         下一页          
  


第5章 使用资源


5。4 对 话 框(11)

    
下面结合源程序来说明列表框的使用。当列表框有LBS_NOTIFY风格的时候,用户有所动作时列表框会向父窗口发送WM_MAND消息,同时在wParam的高16位中指定通知码,列表框的通知码种类很少,基本上就是以下几种:

●   LBN_DBLCLK            用户双击了一个项目。

●   LBN_ERRSPACE        插入项目时无法申请到足够的内存。

●   LBN_KILLFOCUS      输入焦点被切换到其他控件中,列表框丢失了焦点。

●   LBN_SELCANCEL     用户撤销了一个选择。

●   LBN_SELCHANGE     选定状态改变。

●   LBN_SETFOCUS       列表框得到输入焦点。

我们最关心的是LBN_DBLCLK和LBN_SELCHANGE通知码,在单选列表框中,如果程序用双击来选择项目,那么就要处理LBN_DBLCLK通知,例子程序中当用户双击IDC_LISTBOX1时弹出一个消息框,读者可以查看其使用方法。在多选列表框中,由于用户可能选择了多个项目,所以一般不用双击的方法选定;如果收到LBN_SELCHANGE通知的话,可以得知用户有一个选择动作,在这里可以进行相应的操作。

列表框通知父窗口是通过发送WM_MAND消息,而程序控制列表框的时候是通过向列表框发送消息来完成的,常用的列表框消息如表5。8所示。

 

表5。8  列表框消息

 

消    息
 wParam
 lParam
 说    明
 
LB_ADDSTRING
 0
 字符串地址
 添加一个项目,返回加入后的索引
 
LB_DELETESTRING
 位置索引
 0
 删除一个项目,返回剩余的项数
 
LB_FINDSTRING
 开始索引
 字符串地址
 查找以字符串开头的项目,找到则返回位置索引,未找到则返回LB_ERR
 
LB_FINDSTRINGEXACT
 开始索引
 字符串地址
 精确查找一个项目,返回值同上
 
LB_GETANCHORINDEX
 0
 0
 返回多选列表框多选时的起始位置
 
LB_GETCARETINDEX
 0
 0
 多选列表框中的当前焦点项目位置
 
LB_GETCOUNT
 0
 0
 返回列表框中的项目总数
 
LB_GETCURSEL
 0
 0
 返回单选列表框当前选中的项目
 
LB_GETSEL
 位置索引
 0
 检测指定项目的选中状态,返回非0为选中,返回0为未选中
 
LB_GETSELCOUNT
 0
 0
 返回多选列表框选中项目的总数
 
LB_GETSELITEMS
 最大项数
 缓冲区地址
 返回多选列表框的选中项目索引列表到缓冲区中
 
LB_GETTEXT
 位置索引
 缓冲区地址
 返回某个项目的字符串
 
LB_GETTEXTLEN
 位置索引
 0
 返回某个项目的字符串长度
 
LB_GETTOPINDEX
 0
 0
 返回当前可见的第一个项目位置
 
LB_INSERTSTRING
 插入位置
 字符串地址
 在指定位置插入一个项目
 
LB_RESETCONTENT
 0
 0
 删除所有项目
 
LB_SELECTSTRING
 开始位置
 字符串地址
 将以指定字符串开头的项目选中
 
LB_SELITEMRANGE
 选择状态
 范围
 在多选框中将一个范围选中或清除
 
LB_SETCURSEL
 位置索引
 0
 在单选列表框中选中一个项目
 
LB_SETSEL
 选择状态
 位置索引
 在多选框中将一个项目选中或清除
 
LB_SETTOPINDEX
 位置索引
 0
 滚动显示到指定的项目
 
LB_DIR
 属性
 文件通配符
 搜索目录并将符合文件通配符的文件名加入到列表框中
 

这些消息中LB_DIR是个比较有趣的消息,它可以将指定目录中的文件名自动列出来并加入列表框中,如例子中用*。*将当前目录的全部文件名加到列表框中。LB_DIR消息中wParam参数可以指定的属性可以是以下值的组合:

DDL_ARCHIVE         加入归档属性的文件。

DDL_DIRECTORY    加入目录。

DDL_DRIVES           加入驱动器名。

DDL_HIDDEN          包含隐含文件。

DDL_READONLY     包含只读文件。

DDL_READWRITE   包含可读写的文件。

DDL_SYSTEM          包含系统文件。

在列表框中初始化时加入项目可以使用LB_ADDSTRING和LB_INSERTSTRING消息,删除项目可以用LB_DELETESTRING消息,删除全部项目用LB_RESETCONTENT消息。

对于单选列表框,要获取选中项目可以发送LB_GETCURSEL消息,要得到这个项目的字符串需要再用索引值通过LB_GETTEXT消息获取,读者可以查看例子中处理LBN_DBLCLK通知码的部分代码。

对于多选列表框,需要用LB_GETSELITEMS消息获取
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!