Сообщение о ресайзе от Edit

Тема в разделе "WASM.BEGINNERS", создана пользователем Consto, 19 июл 2006.

  1. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    Если в свойствах Edit написал WS_SIZEBOX как узнать что его отресайзили?
     
  2. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Как только WM_SIZE получишь - отресайзили, значить...
     
  3. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    Есть такой контрол, куда буковки можно писать и имя ему <<<<Edit>>>>.
    Так вот изменили его размер ,а не окна.
     
  4. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Consto
    И в чём принципиальное отличие <<<<Edit>>>> и любого другого окна?
     
  5. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    У Edit-а есть своя оконная процедура???
    Чего-то я не понимаю...
     
  6. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    Всё, что я знаю о WM_SIZE - это то, что оно приходит главному окну и не содержит никакого намёка на ID моего Edit-а.
     
  7. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Consto
    Конечно. Если WM_SIZE передаётся через цикл обработки сообщений, то его можно запросто перехватить:
    Код (Text):
    1. while(GetMessage(&msg,0,0,0)){
    2.    if(msg.message == WM_SIZE && msg.hwnd == hEdit){
    3.       // обрабатываем
    4.    }
    5.    DispatchMessage(&msg);
    6. }
    Если не поможет, то есть ещё вариант с сабклассингом или хуком.
     
  8. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    Насколько я понимаю это тоже самое, что и обработка в самой оконой процедуре
    Если да, то:
    WM_SIZE приходит только когда изменяю размер главного окна

    Если нет, то у меня так:
    invoke GetMessage,ADDR msg,NULL,0,0
    cmp eax, 0
    je ExitLoop
    invoke TranslateMessage, ADDR msg
    invoke DispatchMessage, ADDR msg
    jmp StartLoop
    ExitLoop:
    пробовал вставлять "if(msg.message == WM_SIZE..." в каждую строчку, нигде не работает

    PS:
    я не очень разбараюсь в TranslateMessage,DispatchMessage...
     
  9. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Consto
    Странно. Если Edit ресайзится через MoveWindow, то это сообщение должно приходить. Цитата из мануала:
    MoveWindow sends WM_WINDOWPOSCHANGING, WM_WINDOWPOSCHANGED, WM_MOVE, WM_SIZE, and WM_NCCALCSIZE messages to the window.

    Может, под "ресайзом" подразумевается что-то другое?

    Может, edit принадлежит модальному диалогу? Тогда все сообщения обрабатывает сам диалог и они не проходят через глобальный цикл обработки сообщений.
     
  10. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Сабклассинг помогает - замени оконную процедуру и лови WM_SIZE. Не забудь вызывать оригинал.
     
  11. Consto

    Consto New Member

    Публикаций:
    0
    Регистрация:
    20 апр 2006
    Сообщения:
    79
    Quantum
    окно - обычное, размеры изменяются мышкой

    AsmGuru62
    Сабклассинг помог
    Всем большое спасибо за помощь