卓越2008

用一颗谦虚的心面对大家,用一颗坚定的心面对困难,用一颗执著的心面对理想,用一颗虔诚的心面对技术。

导航

下拉框的郁闷!

Posted on 2007-08-06 22:50  Casm  阅读(261)  评论(0)    收藏  举报

郁闷了半天,为什么下拉框不能下拉,原来是下拉框高度不够,这问题都会忘记...无语了!

.386
.model flat, stdcall  ;32 bit memory model
option casemap :none  ;case sensitive

include CommonControls.inc

.code

;########################################################################

DlgProc proc hWnd:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
 local @szBuffer[128] : byte

 mov eax, uMsg
 .if 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 eax, wParam
  .if ax == IDC_BTNCANCEL
   
   invoke EndDialog, hWnd, NULL
   invoke DeleteObject, hBmp1
   invoke DeleteObject, hBmp2
   
  .elseif ax == IDC_BTNOK
  
   mov eax, hBmp1 ;切换图片
   xchg eax, hBmp2
   mov hBmp1, eax
   invoke SendDlgItemMessage, hWnd, IDC_PIC, STM_SETIMAGE, IMAGE_BITMAP, eax
   
  .elseif ax == 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
   
  .elseif ax == IDC_SHOWBMP ;是否显示图片
   
   invoke GetDlgItem, hWnd, IDC_PIC
   mov ebx, eax
   invoke IsWindowVisible, ebx
   .if eax
    
    invoke ShowWindow, ebx, SW_HIDE 
    
   .else
   
    invoke ShowWindow, ebx, SW_SHOW
    
   .endif 
   
  .elseif ax == IDC_ALOW ;允许更换图片按钮
  
   invoke IsDlgButtonChecked, hWnd, IDC_ALOW
   .if eax == BST_CHECKED
    
    mov ebx, TRUE
   
   .else
    
    xor ebx, ebx
    
   .endif
   invoke GetDlgItem, hWnd, IDC_BTNOK
   invoke EnableWindow, eax, ebx
   
  .elseif ax == IDC_MODALFRAME
   
   invoke GetWindowLong, hWnd, GWL_STYLE
   and eax, not WS_THICKFRAME
   invoke SetWindowLong, hWnd, GWL_STYLE, eax
   
  .elseif ax == IDC_THICKFRAME
  
   invoke GetWindowLong, hWnd, GWL_STYLE
   or eax, WS_THICKFRAME
   invoke SetWindowLong, hWnd, GWL_STYLE, eax
   
  .elseif ax == IDC_TITLETEXT
   
   shr eax, 16
   .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
   
  .elseif ax == 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

  
 .elseif eax == WM_CLOSE  ;关闭对话框并销毁图片资源句柄
 
  invoke EndDialog, hWnd, 0
  invoke DeleteObject, hBmp1
  invoke DeleteObject, hBmp2
  
  
 .else
 
  mov eax, FALSE
  ret
  
 .endif
 
  mov eax, TRUE
  ret

DlgProc endp

start:

 invoke GetModuleHandle,NULL
 mov  hInstance,eax

     invoke InitCommonControls
 invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,addr DlgProc,NULL
 invoke ExitProcess,0
 
end start