STM_SETIMAGE & MoveWindow & StretchBlt

Тема в разделе "WASM.WIN32", создана пользователем cresta, 21 дек 2005.

  1. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Есть статик. Загружаю из файла битмап, и леплю его в статик через STM_SETIMAGE. Битмап отображается в статике в оригинальных пропорциях. Беру ползунок скроллбара и скролю статик (при помощи MoveWindow) так, чтобы статик полностью исчез за пределами своего родителя. Возвращаю статик назад - картинка искажена: оригинальные пропорции нарушены и битмап оказался вписан в размер статика, как будто к нему применили StretchBlt.

    Что за эффект такой? По какому праву изображение меняет размер?

    Это так и должно быть?
     
  2. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    SS_REALSIZEIMAGE не помогает?

    EraseBackground?
     
  3. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    SS_REALSIZEIMAGE ничего не даёт.

    A EraseBackground тут при чём? Не понял.
     
  4. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia
    при скрытии картинки или появлении поверх неё других окон она видна?



    выложи кусок кода
     
  5. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Код (Text):
    1.    ; uses ebx esi
    2.                 invoke  LoadImage, hInstance, SADD("c:\1.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE
    3.                 mov     ebx,eax
    4.                 invoke  GetDlgItem, hWnd, IDC_BITMAP
    5.                 mov     esi,eax
    6.                 invoke  GetWindowLong, esi, GWL_STYLE
    7.                 or      eax, SS_BITMAP
    8.                 or      eax, 800h
    9.                 invoke  SetWindowLong, esi, GWL_STYLE, eax
    10.                 invoke  SendMessage, esi, STM_SETIMAGE, IMAGE_BITMAP, ebx
    11.                 invoke  MoveWindow, esi, 300, 300, 300, 300, TRUE
    12.                 invoke  MoveWindow, esi, 300, 150, 300, 300, TRUE




    Первый MoveWindow нужно сделать на такие координаты, чтобы статик полностью (или хотя бы частично исчез за пределами родителя). При этом та часть, которая исчезла, будет искажена (поменяются пропорции).

    Второй MoveWindow просто возвращает статик на место.



    P.S.

    Перекрытие другими окнами, сворачивание и разворачивание окна к искажению не приводит, только MoveWindow.



    P.P.S.

    Если последний параметр MoveWindow установить в FALSE, то искажать начинает и при сворачивании/разворачивании окна тоже.