текст в listbox

Тема в разделе "WASM.BEGINNERS", создана пользователем xor, 24 мар 2008.

  1. xor

    xor New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2008
    Сообщения:
    6
    привет
    помогите пожалуйста разобраться с программой: нужно нажатием кнопки отправить в listbox содержимое TestString
    за это отвечает строка invoke SendMessage hWnd, 0, IDC_LST1, addr TestString но не работает ;(
    когда я вместо listbox делаю edittext то все работает нормально
    что я сделал неправильно?
    masm

    Код (Text):
    1.  .386
    2.    .model flat,stdcall
    3.    option casemap:none
    4.    WinMain proto :DWORD,:DWORD,:DWORD,:DWORD
    5.    include \masm32\include\windows.inc
    6.    include \masm32\include\user32.inc
    7.    include \masm32\include\kernel32.inc
    8.    includelib \masm32\lib\user32.lib
    9.    includelib \masm32\lib\kernel32.lib
    10.  
    11.    .data
    12.  
    13.    ClassName db "DLGCLASS",0
    14.    MenuName db "MyMenu",0
    15.    DlgName db "MyDialog",0
    16.    AppName db "Our First Dialog Box",0
    17.    TestString db "Wow! I'm in an edit box now",0
    18.  
    19.    .data?
    20.  
    21.    hInstance HINSTANCE ?
    22.    CommandLine LPSTR ?
    23.    buffer db 512 dup(?)
    24.    
    25.    .const
    26.  
    27.    IDC_LST1        equ 3000
    28.    IDC_BUTTON      equ 3001
    29.    
    30.  
    31. .code
    32.    start:
    33.  
    34.        invoke GetModuleHandle, NULL
    35.        mov    hInstance,eax
    36.        invoke GetCommandLine
    37.        mov CommandLine,eax
    38.        invoke WinMain, hInstance,NULL,CommandLine, SW_SHOWDEFAULT
    39.        invoke ExitProcess,eax
    40.  
    41.    WinMain proc hInst:HINSTANCE,hPrevInst:HINSTANCE,CmdLine:LPSTR,CmdShow:DWORD
    42.  
    43.        LOCAL wc:WNDCLASSEX
    44.        LOCAL msg:MSG
    45.        LOCAL hDlg:HWND
    46.        mov   wc.cbSize,SIZEOF WNDCLASSEX
    47.        mov   wc.style, CS_HREDRAW or CS_VREDRAW
    48.        mov   wc.lpfnWndProc, OFFSET WndProc
    49.        mov   wc.cbClsExtra,NULL
    50.        mov   wc.cbWndExtra,DLGWINDOWEXTRA
    51.        push  hInst
    52.        pop   wc.hInstance
    53.        mov   wc.hbrBackground,COLOR_BTNFACE+1
    54.        mov   wc.lpszMenuName,OFFSET MenuName
    55.        mov   wc.lpszClassName,OFFSET ClassName
    56.        invoke LoadIcon,NULL,IDI_APPLICATION
    57.        mov   wc.hIcon,eax
    58.        mov   wc.hIconSm,eax
    59.        invoke LoadCursor,NULL,IDC_ARROW
    60.        mov   wc.hCursor,eax
    61.        invoke RegisterClassEx, addr wc
    62.        invoke CreateDialogParam,hInstance,ADDR DlgName,NULL,NULL,NULL
    63.        mov   hDlg,eax
    64.        invoke ShowWindow, hDlg,SW_SHOWNORMAL
    65.        invoke UpdateWindow, hDlg
    66.        invoke GetDlgItem,hDlg,IDC_LST1
    67.        invoke SetFocus,eax
    68.  
    69.        .WHILE TRUE
    70.            invoke GetMessage, ADDR msg,NULL,0,0
    71.            .BREAK .IF (!eax)
    72.            invoke IsDialogMessage, hDlg, ADDR msg
    73.            .IF eax ==FALSE
    74.              invoke TranslateMessage, ADDR msg
    75.              invoke DispatchMessage, ADDR msg
    76.            .ENDIF
    77.        .ENDW
    78.        mov     eax,msg.wParam
    79.  
    80.        ret
    81.  
    82.    WinMain endp
    83.  
    84.    WndProc proc hWnd:HWND, uMsg:UINT, wParam:WPARAM, lParam:LPARAM
    85.  
    86.        .IF uMsg==WM_DESTROY
    87.            invoke PostQuitMessage,NULL
    88.        .ELSEIF uMsg==WM_COMMAND
    89.            mov eax,wParam
    90.            .IF lParam==0
    91.            .ELSE
    92.                mov edx,wParam
    93.                shr edx,16
    94.                .IF dx==BN_CLICKED
    95.                    .IF ax==IDC_BUTTON
    96.  
    97.                        
    98.                         invoke SendMessage hWnd, 0, IDC_LST1, addr TestString
    99.  
    100.             .ENDIF
    101.                .ENDIF
    102.            .ENDIF
    103.        .ELSE
    104.            invoke DefWindowProc,hWnd,uMsg,wParam,lParam
    105.  
    106.            ret
    107.  
    108.        .ENDIF
    109.        xor    eax,eax
    110.  
    111.        ret
    112.  
    113.  
    114.    WndProc endp
    115.  
    116.    end start
    файл ресурсов
    Код (Text):
    1.   #include "resource.h"
    2.  
    3.    #define IDC_LST1                                  3000
    4.    #define IDC_BUTTON                                3001
    5.    
    6.    
    7.    
    8.    MyDialog DIALOG 10, 10, 205, 60
    9.    STYLE 0x0004 | DS_CENTER | WS_CAPTION | WS_MINIMIZEBOX |
    10.    WS_SYSMENU | WS_VISIBLE | WS_OVERLAPPED | DS_MODALFRAME | DS_3DLOOK
    11.    CAPTION "Our First Dialog Box"
    12.    CLASS "DLGCLASS"
    13.    BEGIN
    14.        
    15.     CONTROL "lb",IDC_LST1,"ListBox",0x50010141,44,17,74,22,0x00000200      
    16.     DEFPUSHBUTTON   "Run", IDC_BUTTON,    141,10,52,13
    17.    
    18.    END
     
  2. rmn

    rmn Well-Known Member

    Публикаций:
    0
    Регистрация:
    23 ноя 2004
    Сообщения:
    2.348
    Первым параметром функция SendMessage получает хендл окна, которому отправляется сообщение, т.е. хендл листбокса, а не диалога. Второй параметр - номер (код) сообщения. Для добавления строки в листбокс, ему нужно отправить LB_ADDSTRING. Третий параметр должен быть 0. Четвертый - адрес строки.

    Код (Text):
    1. .IF ax==IDC_BUTTON
    2.     invoke GetDlgItem hWnd, IDC_LST1
    3.     invoke SendMessage eax, LB_ADDSTRING, 0, addr TestString
    4. .ENDIF
     
  3. Flasher

    Flasher Member

    Публикаций:
    0
    Регистрация:
    31 янв 2004
    Сообщения:
    640
    чтобы отправить строку в listbox надо юзать либо LB_ADDSTRING, либо LB_INSERTSTRING.
     
  4. xor

    xor New Member

    Публикаций:
    0
    Регистрация:
    22 мар 2008
    Сообщения:
    6
    пасиба :)
    выпью за вас стопку :)
     
  5. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    SendDlgItemMessage для упрощения ещё есть