WIN32汇编语言教程:第05章 使用资源 · 5.4 对话框(5)

IDC_BMP       equ  108
IDC_SCROLL    equ  109
IDC_VALUE     equ  110
;####################################################################
; 数据段
;####################################################################
             .data?
hInstance     dd   ?
hBmp1         dd   ?
hBmp2         dd   ?
dwPos         dd   ?
             .const
szText1       db   'Hello, World!',0
szText2       db   '嘿,你看到标题栏变了吗?',0
szText3       db   '自定义',0
;####################################################################
; 代码段
;####################################################################
             .code
;####################################################################
_ProcDlgMain  proc     uses ebx edi esi hWnd,wMsg,wParam,lParam
             local    @szBuffer[128]:byte
 
             mov      eax,wMsg
             .if      eax == WM_CLOSE
                        invoke         EndDialog,hWnd,NULL
                        invoke         DeleteObject,hBmp1
                        invoke         DeleteObject,hBmp2
              .elseif  eax == WM_INITDIALOG
;********************************************************************
; 设置标题栏图标
;********************************************************************
                  invoke  LoadIcon,hInstance,ICO_MAIN
                  invoke  SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
;********************************************************************
; 初始化组合框
;********************************************************************
                  invoke  SendDlgItemMessage,hWnd,\
                          IDC_TITLETEXT,CB_ADDSTRING,0,addr szText1
                     invoke  SendDlgItemMessage,hWnd,\
                             IDC_TITLETEXT,CB_ADDSTRING,0,addr szText2
                     invoke  SendDlgItemMessage,hWnd,\
                           IDC_TITLETEXT,CB_ADDSTRING,0,addr szText3
                     invoke  SendDlgItemMessage,hWnd,\
                             IDC_TITLETEXT,CB_SETCURSEL,0,0
                     invoke  GetDlgItem,hWnd,IDC_CUSTOMTEXT
                     invoke  EnableWindow,eax,FALSE
                  invoke  LoadBitmap,hInstance,IDB_1
                     mov     hBmp1,eax
                     invoke  LoadBitmap,hInstance,IDB_2
                  mov     hBmp2,eax
;********************************************************************
; 初始化单选钮和复选框
;********************************************************************
                     invoke  CheckDlgButton,hWnd,IDC_SHOWBMP,BST_CHECKED
                  invoke  CheckDlgButton,hWnd,IDC_ALOW,BST_CHECKED
                     invoke  CheckDlgButton,hWnd,\
                             IDC_THICKFRAME,BST_CHECKED
;********************************************************************
; 初始化滚动条
;********************************************************************
                  invoke  SendDlgItemMessage,hWnd,\
                             IDC_SCROLL,SBM_SETRANGE,0,100
;********************************************************************
     .elseif eax == WM_COMMAND
                       mov ax,wParam
;********************************************************************
;由于印刷宽度有限,WM_COMMAND消息处理代码的缩进格式有所影响,请读者注意
;********************************************************************
.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
;********************************************************************

上页:第05章 使用资源 · 5.4 对话框(4) 下页:第05章 使用资源 · 5.4 对话框(6)

第05章 使用资源

版权所有 © 云南伯恩科技 证书:粤ICP备09170368号