Мерцание Button

Discussion in 'WASM.BEGINNERS' started by Demon666, Nov 4, 2006.

  1. Demon666

    Demon666 New Member

    Blog Posts:
    0
    Joined:
    May 19, 2006
    Messages:
    99
    Перелопатил весь Интернет, разные программы, систему ковырял, так и не смог найти ответ на вопрос.

    Вопросы:
    Как можно сделать так, чтобы нарисованная иконка на non-client возле кнопок свернуть, закрыть и т. д. не мерцала?
    Выбрал направление в сторону запрета перерисовки non-client области, как это делает функция RedrawWindow,hWnd,ADDR rc,0,RDW_VALIDATE or RDW_UPDATENOW.
    В client области RedrawWindow хорошо справляется со своей задачей и иконка при изменении размеров окна не мерцает.
    Вот как эту RedrawWindow заставить работать в non-client или может, существует какая-то функция(и) которая может помочь осуществить задуманное?
    Может не в том направлении осуществлять задуманное начал?

    Цель:
    Создаю библиотеку, в которой будут несколько экспортируемых функций, их задачей будет добавлять в заголовок *.bmp, *.ico, *.png файлы (на выбор) и осуществляться работа как кнопки.
    То есть при нажатии на кнопку будет передаваться в сообщении WM_COMMAND ее ID.

    P. S.
    Может, кому встречалась программа, у которой при изменении размера окна не мерцала кнопка на заголовке? Дайте название этого чуда, хочу рипнуть код оттуда. :)
     
  2. q_q

    q_q New Member

    Blog Posts:
    0
    Joined:
    Oct 5, 2003
    Messages:
    1,706
  3. Demon666

    Demon666 New Member

    Blog Posts:
    0
    Joined:
    May 19, 2006
    Messages:
    99
    q_q
    Спасибо!!!
    Но видел я этот исходник он подходит только к Win`98 я исследовал проги типа FileBox eXtender и там применяется этот код, только из какой точно рипнул, я уже не помню.
    Code (Text):
    1. IsAppThemedGetAdressRun Proc
    2.     .if IsAppThemed == 0
    3.         invoke LoadLibrary,ADDR szUxTheme_dll
    4.         .if eax == FALSE
    5.             ret
    6.         .endif
    7.         push eax
    8.         invoke GetProcAddress,[esp+4],ADDR szIsAppThemed
    9.         mov IsAppThemed,eax
    10.         call eax
    11.         call FreeLibrary
    12.     .else
    13.         call IsAppThemed
    14.     .endif
    15.     ret
    16. IsAppThemedGetAdressRun EndP
    Потом идет сравнение и если возвращается NULL, то тогда запускается код из этого исходника.
    Если покороче, то при нажатии на кнопку заголовок у окна изменяется на классический визуальный стиль Win`98, что не есть гуд.
    Я так понял что вина этого бага из-за применения функций работающих с регионами?
    Но вот почему при запуске все нормально хз.? :)
     
  4. Demon666

    Demon666 New Member

    Blog Posts:
    0
    Joined:
    May 19, 2006
    Messages:
    99
    Сейчас написал *.exe для тестирования и чтобы кому тема интересна, визуально увидели, чего я пытаюсь сделать. :)
    При наведении/нажатии на кнопку она меняет вид и вызывает диалоговое окно.
    Также при изменении размеров окна влево/вправо кнопка не мерцает!
    Плз. выскажите свое мнение, здесь важна каждая буква, от которой можно логически отталкиваясь решить эту проблему. :)

    [Добавил]
    Что-то не получалось приаттачить, архивы битые получались?
    Залил без расширения, надо файл переименовать в Button.exe
     
  5. Wisder

    Wisder New Member

    Blog Posts:
    0
    Joined:
    Aug 7, 2007
    Messages:
    30
    А как такую кнопочку можно сделать?
     
  6. mc black

    mc black Member

    Blog Posts:
    0
    Joined:
    Jan 19, 2005
    Messages:
    213
    Location:
    Russia, N.Novgorod
    Ну смотрел приаттаченый файл, а там кнопка лежит почему-то в клиентской области. Ужос! Чего-то у тебя там не того.. И как тебе помочь можно, если ты исходники не выкладываешь, в отладчике?