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章 使用资源
版权所有 © 云南伯恩科技 证书:粤ICP备09170368号