友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
读书室 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

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

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!


; 由于印刷宽度有限,WM_MAND消息处理代码的缩进格式有所影响,请读者注意

;********************************************************************

。if   ax     IDCANCEL

      invoke   EndDialog;hWnd;NULL

      invoke   DeleteObject;hBmp1

      invoke   DeleteObject;hBmp2

;********************************************************************

; 更换图片

;********************************************************************

。elseifax    IDOK

      mov      eax;hBmp1

      xchg     eax;hBmp2

      mov      hBmp1;eax

      invoke   SendDlgItemMessage;hWnd;IDC_BMP;STM_SETIMAGE;IMAGE_BITMAP;eax

;********************************************************************

; 设置是否“总在最前面”

;********************************************************************

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

;********************************************************************

; 演示隐藏和显示图片控件

;********************************************************************

。elseifax    IDC_SHOWBMP

      invoke   GetDlgItem;hWnd;IDC_BMP

      mov      ebx;eax

      invoke   IsWindowVisible;ebx

      。if      eax

               invoke ShowWindow;ebx;SW_HIDE

      。else

               invoke ShowWindow;ebx;SW_SHOW

      。endif

;********************************************************************

; 演示允许和灰化“更换图片”按钮

;********************************************************************

。elseifax    IDC_ALOW

      invoke   IsDlgButtonChecked;hWnd;IDC_ALOW

      。if      eax  BST_CHECKED

               mov   ebx;TRUE

      。else

               xor   ebx;ebx

      。endif

      invoke   GetDlgItem;hWnd;IDOK

      invoke   EnableWindow;eax;ebx

;********************************************************************

。elseifax    IDC_MODALFRAME

      invoke   GetWindowLong;hWnd;GWL_STYLE

      and eax;not WS_THICKFRAME

      invoke   SetWindowLong;hWnd;GWL_STYLE;eax

。elseifax    IDC_THICKFRAME

      invoke   GetWindowLong;hWnd;GWL_STYLE

      or       eax;WS_THICKFRAME

      invoke   SetWindowLong;hWnd;GWL_STYLE;eax

;********************************************************************

; 演示处理下拉式组合框

;********************************************************************

。elseif ax   IDC_TITLETEXT

      shr      eax;16

;********************************************************************



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


第5章 使用资源


5。4 对 话 框(6)

    
      。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

;********************************************************************

; 在文本框中输入文字

;********************************************************************

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

;********************************************************************             。else

                            mov     eax;FALSE

                            ret

                    。endif         

                    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

2。 子窗口控件的通用使用方法

由于子窗口控件实际上就是窗口,大部分窗口函数对它们都是适用的,如可以用EnableWindow在灰化和允许状态之间切换,可以用ShowWindow在显示和隐藏之间切换,可以用GetWindowText和SetWindowText来改变上面的文字,也可以用MoveWindow来改变大小和移动位置等。在Control。asm中用“显示图片”复选框切换图片框的隐藏和显示,用的就是ShowWindow函数,处理“允许更换图片”复选框时切换“更换图片”按钮的状态,用的是EnableWindow函数。

除了可以用对子窗口控件使用窗口的通用函数外,还可以使用针对它们的专用函数。下面介绍一些常用的函数。

在资源脚本文件中定义的是控件的ID,当这些子窗口控件被创建以后同样会有一个窗口句柄,但既然它们不是由我们自己创建的,那么怎么知道它们的窗口句柄呢?有一个函数可以从ID中获取子窗口句柄:

invoke  GetDlgItem;hDlg;dwIDDlgItem

mov hDlgItem;eax

函数的输入参数是对话框句柄和ID值,返回值是子窗口句柄;反过来,有两种方法可以从子窗口句柄获取ID:

(1) invoke  GetDlgCtrlID;hWndCtrl   ;输入子窗口句柄,返回值是控件ID

(2) invoke  GetWindowLong;hWndCtrl;GWL_ID

当需要向控件发送消息的时候,当然可以先用GetDlgItem获取子窗口句柄再用SendMessage函数,但有一个函数更为简便:

invoke  SendDlgItemMessage;hDlg;dwIDDlgItem;Msg;wParam;lParam

这个函数可以直接向控件发送消息,只需要在参数中指定对话框句柄和子窗口ID(注意:并没有PostDlgItemMessage这样的函数!)。

如果要想知道在一个控件上按下了Tab键或Shift+Tab键会跳到哪一个控件上去,也就是说下一个或上一个Tab停留位在哪里,可以使用GetNextDlgTabItem函数:

invoke  GetNextDlgTabItem;hDlg;hCtl;bPrevious

。if     eax

         mov hWinNext;eax

。endif

其中的bPrevious参数指定了搜索的方向;与之相似,使用GetNextDlgGroupItem 函数可以返回下一个分组的位置:

invoke  GetNextDlgGroupItem;hDlg;hCtl;bPrevious

。if     eax

         mov hWinNext;eax

。endif

3。 使用单选钮和复选框

单选钮是互斥的选择钮,同一组的多个单选钮只能有一个被选中,单选钮的外形是一个圆形的标记加上文本,圆形中有黑点表示被选中。复选框不是互斥的,多个复选框的状态不会互相影响,复选框的外形是一个方框加上文本,方框中可以用有无对钩来表示是否被选中。

单选钮和复选框控件都是基于Button类的,只不过它们的窗口风格分别是BS_RADIOBUTTON和BS_CHECKBOX。既然它们是特殊的“按钮”,所以和它们有关的函数都带有“Button”一词,查看一个单选钮或复选框是否被选中可以用下面的函数来检测:

invoke  IsDlgButtonChecked;hDlg;nIDButton

函数的返回值可能是BST_CHECKED(选中状态),BST_INDETERMINATE(3态复选框的灰化状态)或BST_UNCHECKED(未选中状态)。也可以用向子窗口控件发送BM_GETCHECK消息的方法来检测,返回值和上面的函数是一样的。

如果想设置单选钮或复选框的状态,可以使用下面的语句:

invoke  CheckDlgButton;hDlg;nIDButton;uChec
返回目录 上一页 下一页 回到顶部 1 4
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!