Как обновлять окно ???

Тема в разделе "WASM.BEGINNERS", создана пользователем Veter, 12 янв 2007.

  1. Veter

    Veter New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2006
    Сообщения:
    161
    Господа, накопилось большое количество доков,туторов разных и не могу найти простую штуку - возникла необходимость обновлять ВСЁ окно вместе со всеми контекстами и контролами регуляно - несколько раз в секунду,скажем, независимо от того,происходит что-либо в окне или нет. Кажется это единственный способ добиться от программы того,что требуется .
    Но ничто не работает - не хочет оно обновляться ни стого ни с сего .А нужно.
    Т.е. - ставим таймер - а дальше ? Куда отправлять соощение и что его должно получить ?

    Если можно конкретный код на Масме - буду очень признателен ....
     
  2. rain

    rain New Member

    Публикаций:
    0
    Регистрация:
    22 апр 2006
    Сообщения:
    976
    InvalidateRect ?

    [аdd]
    разница между вопросом и ответом ровно 1 час 1 сек %)
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    InvalidateRect(Wnd, NULL, false);
    UpdateWindow(Wnd);
     
  4. Dostoevsky

    Dostoevsky New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2006
    Сообщения:
    33
    n0name
    Очень точно подмечено, коллега.
     
  5. Dostoevsky

    Dostoevsky New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2006
    Сообщения:
    33
    Veter
    Отправлять сообщение надо окну, это делается функциями SendMessage или спецальными типа InvalidateRect - эта функция делает указанную клиентскую область недействительной. Но при этом если просто вызвать InvalidateRect, то сразу окно не перерисуется, т.к. сообщение WM_PAINT имеет наименьший приоритет, и оно начинает обрабатываться окном (т.е. происходит вызов WndProc) в последнюю очередь. Для немедленной обработки WM_PAINT в данном случае применяется вызов функции UpdateWindow, которая в своем теле сама вызывает WndProc с WM_PAINT.
     
  6. Veter

    Veter New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2006
    Сообщения:
    161
    НЕ работает InvalidateRect - или что-то я неправильно делаю ...
    Попробую еще .... очень всё сложно в Ассемблере - надо же , сколько можно напридумывать всего ...
    Казалось-бы : есть постоянные,переменные, операторы и функции , но почему все сделано так ,что ничего не понять,пока не достигнешь высшей степени просветления ?
     
  7. Veter

    Veter New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2006
    Сообщения:
    161
    Господа, лёд тронулся. Спасибо всем за помощь.

    Сегодня - великий день ! я научился печатать и редактировать на Битмапе....

    Идея с таймером оказалась неудачной - буквы начали дрожать...
    И в то же время .. - случайно обнаружил место,куда надо воткнуть invoke Invalidate Rect , чтобы все было ОКей... Надо-же ,никогда бы не подумал...

    Интересно ,а как задать ему координаты области обновления справа от каретки или выделенную область?(Если поставить 0 - обновляется вся клиентская область и все буквы прыгают и скачут. Не очень сильно.но заметно...) Нужно определить координаты каретки , извлечь их , записать в какой-то регистр и т.д. ?
    Нашел кое-что по этому вопросу,но все на тасме и на фасме .Пока мне сложно разобраться....

    Кстати все классно получается ,если ввести переменную hXXX :

    invoke SetBkMode,wParam,hХХХ

    и присваивать ей значения TRANSPARENT or OPAQUE с помощью кнопок...