Еdit со слайдером в окне

Тема в разделе "WASM.WIN32", создана пользователем Alians1978, 2 дек 2006.

  1. Alians1978

    Alians1978 New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2006
    Сообщения:
    3
    Пробовал получать сообщения от слайдера Edit-ов и через WM_COMMAND (EN_VSCROLL), и через WM_VSCROLL. Никаких данных не передается вообще. С отдельным вертикальным слайдером все в порядке, даже когда меняю тексты в Edit-ах - сообщения поступают в процедуру окна. Может что-то делаю непрвильно? Как мне получить сообщение от слайдера Edit-а? Где можно еще получить информацию об органах управления окна?
    Вот эта программа:

    []
     
  2. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Вижу, что тут под слайдером подразумевается скроллбар вообще. Скроллбар - это такая надстройка над неклиентской областью окна, косящая под дочернее окно, но таковым не являющаяся. Скроллбар посылает сообщения WM_VSCROLL и WM_HSCROLL только своему окну, а не родителю своего окна. Поэтому сообщения получает сам edit, а не главное окно. Тем не менее, эти сообщения можно попробовать перехватить в цикле обработки сообщений:
    Код (Text):
    1. while(1){
    2. if(!GetMessage(&MSG,0,0,0)) break;
    3. if(MSG.hwnd == hEdit && MSG.message == WM_VSCROLL){ /* вертикальный скроллинг */ }
    4. if(MSG.hwnd == hEdit && MSG.message == WM_HSCROLL){ /* горизонтальный */ }
    5. TranslateMessage(&MSG);
    6. DispatchMessage(&MSG);
    7. }
    Если не получится, то спасёт только сабклассинг.
     
  3. Alians1978

    Alians1978 New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2006
    Сообщения:
    3
    Попробовал - не получилось
    А что это такое сабклассинг и с чем его "едят"?
     
  4. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Alians1978
    Где код? Мне кажется, что должно работать.

    Посмотри в статьях Iczelion'а.
     
  5. Alians1978

    Alians1978 New Member

    Публикаций:
    0
    Регистрация:
    2 дек 2006
    Сообщения:
    3
    А если я на асме пишу,а не на С,как ты мне написал
    Посторался примерно подогнать под асм:
    ...
    START:
    ; получаем дескриптор приложения
    ; регистрация класса основного окна
    ; создаем окно: ДЕСК - его дескриптор
    invoke ShowWindow,ДЕСК,SW_SHOWNORMAL
    invoke UpdateWindow,ДЕСК
    MSG_LOOP:
    invoke GetMessage,offset MSG,0,0,0
    cmp eax,0
    je END_LOOP
    mov eax,hEdit
    cmp eax,dword ptr MSG.hwnd
    jne MSG_LOOP1
    mov eax,WM_VSCROLL
    cmp eax,dword ptr MSG.message
    jne MSG_LOOP1
    invoke SendMessage,ДЕСК,WM_VSCROLL,300,300
    MSG_LOOP1:
    invoke TranslateMessage,offset MSG
    invoke DispatchMessage,offset MSG
    jmp MSG_LOOP
    END_LOOP:
    invoke ExitProcess,MSG.wParam
    _ERROR:
    ...
     
  6. Demon666

    Demon666 New Member

    Публикаций:
    0
    Регистрация:
    19 май 2006
    Сообщения:
    99
    Alians1978
    Да есть готовый исходник в пакете masm32\examples\bcraven\controls\controls.asm(controls.exe)

    P. S.
    У тебя может лежать в другой папке, все от версии пакета MASM32 зависит, но он там точно есть!
    Там используются все тебе нужные controls и без всяких: