首页
社区
课程
招聘
[原创]同步两个列表框 WIN32汇编语言
发表于: 2009-7-11 09:56 3368

[原创]同步两个列表框 WIN32汇编语言

2009-7-11 09:56
3368
前天遇到这个问题,就是汇编中的列表框只有1列,但是我的数据需要两列显示,怎么办呢?于是就想到再加一个列表框,但是两个列表框怎么同步呢?我开始的想法是,同步两个列表框,肯定要控制两个列表框的滚动条,但是在查了很多资料后,做了很多实验后发现,拖动列表框滚动条的时候,并没有响应的消息,当然也可能是我没有拦截到.同时我发现,选中项目和显示项目都是有相应消息的,于是我就通过一个时钟来控制两个列表框选中同样的项目并显示同样的项目,就写出了下面的代码,程序执行后,效果不错,很象多列的列表框,呵呵
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
                .386
                .model flat, stdcall
                option casemap :none
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Include 文件定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
include                windows.inc
include                user32.inc
includelib        user32.lib
include                kernel32.inc
includelib        kernel32.lib
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; Equ 等值定义
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
IDD_DLG1        equ        1000
IDC_LST1        equ        1001
IDC_LST2        equ        1002

IDC_UDC1        equ        100
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
; 代码段
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
.data
szTestOut          db "%08X", 0
szTestOut1          db "%d", 0
@dwTemp1          db 100 dup(0)
@dwTemp2          db 100 dup(0)
.const
szModel  db  'hookdll.dll',0
                .code
addrstr        proc        hWnd        ;向列表框中添加数据
        mov        ecx,1
        .while        ecx!=100
                invoke        wsprintf,addr @dwTemp1,addr szTestOut,eax
                invoke        SendDlgItemMessage,hWnd,IDC_LST1,LB_ADDSTRING,0,addr @dwTemp1
                inc        ecx
                invoke        wsprintf,addr @dwTemp2,addr szTestOut1,ecx
                invoke        SendDlgItemMessage,hWnd,IDC_LST2,LB_ADDSTRING,0,addr @dwTemp2
                imul        eax,ecx               
        .endw
        ret
addrstr        endp
_proctime        proc        hwnd,wmsg,idevent,dwtime        ;时钟周期函数
        invoke  SendDlgItemMessage,hwnd,IDC_LST1,LB_GETCURSEL,0,0                ;获取列表框1的当前选中项
        invoke  SendDlgItemMessage,hwnd,IDC_LST2,LB_SETCURSEL,eax,0                ;同步列表框2的当前选中项
        invoke  SendDlgItemMessage,hwnd,IDC_LST1,LB_GETTOPINDEX,0,0                ;获取列表框1的当前显示项目
        invoke  SendDlgItemMessage,hwnd,IDC_LST2,LB_SETTOPINDEX,eax,0                ;获取列表框2的当前显示项目
        ret
_proctime        endp       
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
_ProcDlgMain        proc        uses ebx edi esi hWnd,wMsg,wParam,lParam
                mov        eax,wMsg
;********************************************************************
                .if        eax ==        WM_CLOSE
                        invoke        KillTimer,hWnd,IDC_UDC1                                ;停止时钟周期
                        invoke        EndDialog,hWnd,NULL
;********************************************************************
                .elseif        eax ==        WM_INITDIALOG
                        invoke        SetTimer,hWnd,IDC_UDC1,100,addr _proctime        ;设置时钟周期以及时钟回调函数
                        invoke        addrstr,hWnd
                .elseif    eax == WM_COMMAND
               
;********************************************************************
                .else
                        mov        eax,FALSE
                        ret
                .endif
                mov        eax,TRUE
                ret

_ProcDlgMain        endp
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
start:
                invoke        GetModuleHandle,NULL
                invoke        DialogBoxParam,eax,IDD_DLG1,NULL,offset _ProcDlgMain,NULL
                invoke        ExitProcess,NULL
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
end        start

[注意]看雪招聘,专注安全领域的专业人才平台!

上传的附件:
收藏
免费
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册