|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Апр 5, 2004 22:56:43 Привет всем, посмотрите пожалуйста на этот кусок программы. ;*************************************** mov eax,[Hwndlst] cmp [lparam],eax jne NOLIST cmp word [esp+12h],LBN_DBLCLK jne NOLIST invoke SendMessage,[Hwndlst],LB_GETCURSEL,0,0 invoke SendMessage,[Hwndlst],LB_GETTEXT,eax,Buf invoke MessageBox,[lparam],Buf,Cap1,0 ;*************************************** Вот эти строки cmp word [esp+12h],LBN_DBLCLK jne NOLIST должни по идее обрабатывать двойной клик, ПЛЗ подскажите что я делаю не так Заранее благодарен. С Уважением i2k |
|
|
Дата: Апр 6, 2004 03:59:06 _i2k_ Указанные строки скорее всего проверяют было ли LBN_DBLCLK. Покажи, как определена оконная процедура - ты используешь lparam и тут же word [esp+12h]. Что за переменная Buf, в SendMessage передается ее адрес? |
|
|
Дата: Апр 6, 2004 07:31:00 · Поправил: _i2k_ Привет q_q Вот тебе листинг. Вся вот это процедура : invoke SendMessage,[Hwndlst],LB_GETCURSEL,0,0 invoke SendMessage,[Hwndlst],LB_GETTEXT,eax,Buf invoke MessageBox,[lparam],Buf,Cap1,0 Короче она должна находить выделенный в данный момент элемент, потом помещать его в Buf, после чего появляется мессага, в которой написан выбранный элемент ;*************************************************** ;Listing list.asm format PE GUI 4.0 entry start include '%include%\win32axp.inc' section '.data' data readable writeable NewHwnd dd 0 msg MSG wc WNDCLASS Hinst dd 0 Titlename db 'Primer',0 Classname db 'CLASS32',0 Cpbut db 'Exit',0 Cplst db '',0 CLSbut db 'BUTTON',0 CLSlst db 'LISTBOX',0 Hwndbtn dd 0 Hwndlst dd 0 Cap db 'Message',0 Cap1 db 'Select',0 Mes db 'End Work',0 str1 db 'Red',0 str2 db 'Green',0 str3 db 'Blue',0 str4 db 'Yellow',0 str5 db 'Black',0 str6 db 'White',0 PS dd str1 dd str2 dd str3 dd str4 dd str5 dd str6 Buf :times 30 db 0 section '.code' code readable executable start: invoke GetModuleHandle,0 mov [Hinst],eax Reg_Class: invoke LoadIcon,eax,17 mov [wc.hIcon],eax invoke LoadCursor,0,IDC_ARROW mov [wc.hCursor],eax mov [wc.style],0 mov [wc.lpfnWndProc],WindowProc mov [wc.cbClsExtra],0 mov [wc.cbWndExtra],0 mov eax,[Hinst] mov [wc.hInstance],eax mov [wc.hbrBackground],COLOR_WINDOW+1 mov [wc.lpszMenuName],0 mov [wc.lpszClassName],Classname invoke RegisterClass,wc invoke LoadMenu,[Hinst],37 invoke CreateWindowEx,0,Classname,Titlename,WS_VISIBLE+WS_OVERLAPPEDWINDOW,\ 100,100,250,200,NULL,eax,[Hinst],NULL mov [NewHwnd],eax invoke ShowWindow,[NewHwnd],SW_SHOWNORMAL invoke UpdateWindow,[NewHwnd] msg_loop: invoke GetMessage,msg,NULL,0,0 or eax,eax jz end_loop invoke TranslateMessage,msg invoke DispatchMessage,msg jmp msg_loop end_loop: invoke ExitProcess,[msg.wParam] proc WindowProc, hwnd,wmsg,wparam,lparam enter push ebx esi edi cmp [wmsg],WM_CREATE je wmcreate cmp [wmsg],WM_SIZE je wmsize cmp [wmsg],WM_SETFOCUS je wmsetfocus cmp [wmsg],WM_COMMAND je wmcommand cmp [wmsg],WM_DESTROY je wmdestroy defwndproc: invoke DefWindowProc,[hwnd],[wmsg],[wparam],[lparam] jmp finish wmcreate: invoke CreateWindowEx,0,CLSbut,Cpbut,WS_CHILD+BS_DEFPUSHBUTTON+WS_VISIBLE+WS_ TABSTOP,\ 10,10,60,20, dword [ebp+08h],0,[Hinst],NULL mov [Hwndbtn],eax invoke CreateWindowEx,0,CLSlst,Cplst,WS_THICKFRAME+LBS_NOTIFY\ +WS_CHILD+BS_DEFPUSHBUTTON+WS_VISIBLE+WS_TABSTOP+WS_VSCROLL+WS_BORDER, \ 10,50,150,90, dword [ebp+08h],0,[Hinst],NULL mov [Hwndlst],eax invoke SendMessage,[Hwndlst],LB_ADDSTRING,0,[PS] invoke SendMessage,[Hwndlst],LB_ADDSTRING,0,[PS+4] invoke SendMessage,[Hwndlst],LB_ADDSTRING,0,[PS+8] invoke SendMessage,[Hwndlst],LB_ADDSTRING,0,[PS+12] invoke SendMessage,[Hwndlst],LB_ADDSTRING,0,[PS+16] invoke SendMessage,[Hwndlst],LB_ADDSTRING,0,[PS+20] jmp finish failed: or eax,-1 jmp finish wmsize: jmp finish wmsetfocus: invoke SetFocus,[NewHwnd] xor eax,eax jmp finish wmcommand: mov eax,[Hwndbtn] cmp [lparam],eax je wmdestroy mov eax,[Hwndlst] cmp [lparam],eax jne NOLIST cmp word [esp+12h],LBN_DBLCLK jne NOLIST invoke SendMessage,[Hwndlst],LB_GETCURSEL,0,0 invoke SendMessage,[Hwndlst],LB_GETTEXT,eax,Buf invoke MessageBox,[lparam],Buf,Cap1,0 NOLIST: mov eax,0 jmp finish wmdestroy: invoke PostQuitMessage,0 xor eax,eax finish: pop edi esi ebx return section '.idata' import data readable writeable library kernel,'KERNEL32.DLL',\ user,'USER32.DLL' import kernel,\ GetModuleHandle,'GetModuleHandleA',\ CreateFile,'CreateFileA',\ ReadFile,'ReadFile',\ WriteFile,'WriteFile',\ CloseHandle,'CloseHandle',\ VirtualAlloc,'VirtualAlloc',\ GetFileSize,'GetFileSize',\ ExitProcess,'ExitProcess' import user,\ RegisterClass,'RegisterClassA',\ CreateWindowEx,'CreateWindowExA',\ DefWindowProc,'DefWindowProcA',\ SetWindowLong,'SetWindowLongA',\ RedrawWindow,'RedrawWindow',\ GetMessage,'GetMessageA',\ TranslateMessage,'TranslateMessage',\ DispatchMessage,'DispatchMessageA',\ SendMessage,'SendMessageA',\ LoadCursor,'LoadCursorA',\ LoadIcon,'LoadIconA',\ LoadMenu,'LoadMenuA',\ GetClientRect,'GetClientRect',\ MoveWindow,'MoveWindow',\ SetFocus,'SetFocus',\ MessageBox,'MessageBoxA',\ wvsprintf,'wvsprintfA',\ ShowWindow,'ShowWindow',\ UpdateWindow,'UpdateWindow',\ PostQuitMessage,'PostQuitMessage' ;*************************************************** |
|
|
Дата: Апр 6, 2004 09:21:36 _i2k_ Fasm'а у меня нет, поэтому проверить ответ не могу, однако использование cmp word [esp+12h],LBN_DBLCLK противоречит proc WindowProc, hwnd,wmsg,wparam,lparam enter push ebx esi edi ...замени на cmp word [wparam],LBN_DBLCLK или на cmp word [ebp+12h],LBN_DBLCLK, что вполне в духе dword [ebp+08h], используемом, вместо [hwnd] при создании дочерних окон. |
|
|
Дата: Апр 6, 2004 18:09:18 esp + 12h точно не указывает на wParam, на него указывает esp + 18h, значит на верхнее слово wParam, где идентификатор сообщения будет указывать esp + 1Ah. И вообще, проще написать cmp word [wparam + 2], LBN_DBLCLK. |
|
|
Дата: Апр 6, 2004 21:34:22 Короче, заменил я так(cmp word [wparam + 2], LBN_DBLCLK) и так (cmp word [wparam],LBN_DBLCLK), и много еще как, но ничего не получается, так что я не знаю....... |
|
|
Дата: Апр 7, 2004 05:11:44 _i2k_ так что я не знаю Вынудил меня тянуть fasm. Условие: cmp word [wparam+2],LBN_DBLCLK + убери стиль BS_DEFPUSHBUTTON при создании listbox'а и будет тебе счастье. |
|
|
Дата: Апр 8, 2004 21:12:02 Спасибо |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.084 |