WS_EX_LAYERED+CS_PARENTDC+WS_CHILD+EDIT

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

  1. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    // Эта ветка выделена из http://www.wasm.ru/forum/viewtopic.php?id=17975 //

    Quantum

    >>>Может проще сделать эдит полупрозрачным: при создании эдита нужно указать стиль WS_EX_LAYERED,
    >>>потом задаём прозрачность SetLayeredWindowAttributes(hEdit, 0, 128, LWA_ALPHA);
    >>>128 - это примерно 50% прозрачность.

    kero

    >>Даже MSDN знает, что эдит - это child, а WS_EX_LAYERED - только для top-level :)

    Quantum

    >"A window that has no parent, or whose parent is the desktop window, is called a top-level window." (c) msdn

    >Для использования стиля WS_EX_LAYERED достаточно не указывать WS_CHILD. Таким образом, данный стиль вполне применим для "owned windows".
    >Так что достаточно задать стиль WS_POPUP и эдит можно сделать слоёным.
    >Зато прозрачность плохо совместима со стилями вроде CS_PARENTDC, а эдит имеет именно этот стиль, так что родительское окно тоже нужно делать слоёным.

    Quantum, ну перечитайте этот свой текст...
    Ну зачем эти наивные отмазки ? Ну, ляпнули про едит, ну и признайте, что ляпнули, с кем не бывает.
    Ну к чему плодить все более мутные высказывания ?
    Если в итоге "родительское окно тоже нужно делать слоёным", - то на фига было предлагать слоить эдит ?
    Что значит "прозрачность плохо совместима со стилями вроде CS_PARENTDC", что еще за шкала совместимости ?
    Как это - "эдит можно сделать слоёным" и "эдит имеет именно этот стиль, так что" ?

    Короче, наскоро сделанными прикидками не заменить нормального погружения в тему.
    Потому, кстати, и прозевали, что все-таки можно устроить WS_EX_LAYERED+CS_PARENTDC+WS_CHILD+EDIT.
    Чтобы не быть голословным - пример в аттаче. Там затушеван один интересный казус, - найдете ?

    P.S. И еще одно. MSDN - база не маленькая, недурственно было бы указывать и путь к цитате.
    А то знаете, как легко жонглировать этими якобы (c) :)

    P.P.S. И еще. Quantum, я ни в коей мере не хотел вас уязвить, и если все-таки как-то задел - прошу простить.
    По вашим сообщениям (а захожу на wasm не первый год) я точно знаю, что вы порядочный и добрый человек.
    Просто истина, сами понимаете, важнее.
     
  2. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    kero
    У предложенного мной решения (слоение эдита для получения прозрачности) есть недостатки:
    - Работоспособность только на 2K+.
    - Конфликт со стилем CS_PARENTDC, ограничивающий применение на диалоговых окнах.

    Если подумать, можно ещё к чему-нибудь придраться. Я изначально не настаивал на оптимальности такого подхода (кстати, в том топике прозвучали и другие предложения), но он вполне рабочий.

    Только в общем случае, но от CS_PARENTDC можно и избавиться. Или сделать эдит действительно top-level, но это будет уже идиотизмом.

    В msdn написано, что WS_EX_LAYERED нельзя использовать совместно со стилями CS_OWNDC и CS_CLASSDC. Вероятно, там просто забыли добавить, что и со стилем CS_PARENTDC его использовать нельзя, если окно не "top-level" и родительское окно не слоёное. Или же решили, что CS_PARENTDC имеет смысл только для дочерних окон... В общем, не знаю почему об этом не упоминается. Может быть даже, что несовместимость с CS_PARENTDC - это баг в моей XP SP2, хотя мне кажется логичным такое поведение.

    Не понял.

    Я бы не советовал использовать недокументированные фишки, а примеры с прозрачными эдитами у меня уже давно имеются.

    В онлайновой версии msdn написано так:
    "A top-level window has no owner window and is displayed on the taskbar."
    http://msdn2.microsoft.com/en-us/library/aa511262.aspx
     
  3. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Quantum

    >Я изначально не настаивал на оптимальности такого подхода [...], но он вполне рабочий.

    Значит, все-таки продолжаете настаиваивать ? Ну, тогда покажите, что же вы считаете "вполне рабочим", к.н. простейший сампл.

    >от CS_PARENTDC можно и избавиться

    Ага, как в аттаче выше.

    >Или сделать эдит действительно top-level, но это будет уже идиотизмом.

    К слову, XP calc.exe использует top-level эдит, и ничего.

    >В msdn написано, что WS_EX_LAYERED нельзя использовать совместно со стилями CS_OWNDC и CS_CLASSDC.
    >Вероятно, там просто забыли добавить, что и со стилем CS_PARENTDC его использовать нельзя, если окно не "top-level" и родительское окно не слоёное.
    >Или же решили, что CS_PARENTDC имеет смысл только для дочерних окон... В общем, не знаю почему об этом не упоминается.
    >Может быть даже, что несовместимость с CS_PARENTDC - это баг в моей XP SP2, хотя мне кажется логичным такое поведение.

    Слишком поверхностное знакомство с темой ...

    WS_EX_LAYERED - как нельзя, так и можно использовать совместно со стилями CS_OWNDC и CS_CLASSDC.

    Так, помощник в MS Word 2002 - это WS_EX_LAYERED+CS_OWNDC.

    А на http://www.asmcommunity.net/board/index.php?topic=22427.0 - WS_EX_LAYERED окно избегает гибели от PrintWindow присадкой CS_CLASSDC.

    А WS_EX_LAYERED+CS_PARENTDC - например, в аттаче выше...

    Однако у MSDN, по всему, такой подход: если важное окно cmd.exe (у него CS_OWNDC) не принимает WS_EX_LAYERED - то и объявляем: WS_EX_LAYERED+CS_OWNDC - низя.
    Без копания в деталях.

    >>Потому, кстати, и прозевали, что все-таки можно устроить WS_EX_LAYERED+CS_PARENTDC+WS_CHILD+EDIT.
    >Я бы не советовал использовать недокументированные фишки, а примеры с прозрачными эдитами у меня уже давно имеются.

    Вы исходник смотрели ? Нет там ничего недокументированного.
    Просто это - изделие в жанре "контрпример", когда осуществляется проход по узкому коридору (а может, и лабиринту) условий.

    Тогда как вы как раз и советовали использовать "недокументированную фишку", помните:
    >Может проще сделать эдит полупрозрачным: при создании эдита нужно указать стиль WS_EX_LAYERED...

    Долго ли, коротко ли у вас имеются прозрачные эдиты - какая разница, у нас же здесь не патентное бюро.
    Только зачем рассказывать, если можно приаттачить... если стоит того.

    >>MSDN - база не маленькая, недурственно было бы указывать и путь к цитате.
    >В онлайновой версии msdn написано так:
    >"A top-level window has no owner window and is displayed on the taskbar."
    >http://msdn2.microsoft.com/en-us/library/aa511262.aspx

    Да что с вами, право ??
    Мой вопрос был о якобы цитате
    >"A window that has no parent, or whose parent is the desktop window, is called a top-level window." (c) msdn

    Но вместо честного линка - вы подсовываете что-то совершенно непотребное, за что в старину - канделябром :)
    Вот это да: окно с WS_EX_TOOLWINDOW - заведомо не top-level ! Ну, нафига здесь этот Вистовский недоносок, а ?
     
  4. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    Пример кода я уже приводил, а оформлять всё в минимальный рабочий пример мне лень.

    Не знаю - не смотрел.

    В каком месте? Spy никаких top-level edit'ов в моём XP calc.exe не нашёл.

    Напрямую нельзя, но, если очень захотеть, можно обойти любое msdn'овское ограничение. Только не надо путать следование правилам msdn'а с поверхностным знанием темы!

    Не могу приаттачить, а выдирать из проекта только касающееся прозрачных эдитов и оформлять в отдельный пример, как я уже писал выше, мне лень, да и смысла не вижу, т.к. там нет ничего отличного от вышеописанного.

    Это я к тому написал, что вопросов по теме у меня лично нет, но Вы продолжаете настаивать и выкладывать ещё примеры.

    По этой ссылке у меня показывает в самом верху такой текст:
    "A top-level window has no owner window and is displayed on the taskbar. Examples: application windows. In Windows Vista™, dialog boxes without owner windows and property sheets are also top level." А про WS_EX_TOOLWINDOW там ничего нет.

    В оффлайновом msdn'e за 2002й год там было то самое предложение. Смысл, как видите, не изменился.
     
  5. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    Quantum

    >Пример кода я уже приводил, а оформлять всё в минимальный рабочий пример мне лень.

    >>Ага, как в аттаче выше.
    >Не знаю - не смотрел.

    Кайф!

    >В каком месте? Spy никаких top-level edit'ов в моём XP calc.exe не нашёл.

    Уж лучше бы сказали что-нибудь типа "лень смотреть", а то совсем уж несолидно... CalcMsgPumpWnd.

    >>Долго ли, коротко ли у вас имеются прозрачные эдиты - какая разница, у нас же здесь не патентное бюро.
    >Это я к тому написал, что вопросов по теме у меня лично нет,

    что прискорбно, потому как данной темой не владеете

    >но Вы продолжаете настаивать и выкладывать ещё примеры.

    А мне претит быть голословным болтуном, вот и выложил здесь 1 (один) аттачик, чтоб было во что ткнуть, если наврал.

    >>Мой вопрос был о якобы цитате
    >По этой ссылке у меня показывает в самом верху такой текст:
    >"A top-level window has no owner window and is displayed on the taskbar. Examples: application windows.
    >In Windows Vista™, dialog boxes without owner windows and property sheets are also top level." А про WS_EX_TOOLWINDOW там ничего нет.
    >В оффлайновом msdn'e за 2002й год там было то самое предложение. Смысл, как видите, не изменился.

    Опять 25. Сколько бы вы ни толкали мне ссылку http://msdn2.microsoft.com/en-us/library/aa511262.aspx , -
    я ведь не забуду свой вопрос: где в MSDN вы нашли то, что подали как цитату, -
    >"A window that has no parent, or whose parent is the desktop window, is called a top-level window." (c) msdn

    А впрочем, в вашем последнем сообщении достаточно инфы, чтобы понять, что к чему.
    Если "лень" подкреплять слова, если "не смотрел", если не в состоянии вывести тривиальные последствия для WS_EX_TOOLWINDOW из переопределения top-level, - пора прощаться. С наступающим и всех благ.
     
  6. Quantum

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

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    kero
    Ну, есть такое окно (по названию его просто отыскать). Чтобы соблюсти солидность я должен был ночь не спать - проверять все окна в софтайсе? Но оно не слоёное, а из этого следует, что его сделали top-level не для того, чтобы использовать слоёность. Поэтому смысл примера мне не ясен. Но раз уж Вы соизволили привести этот пример, может быть Вы знаете назначение этого окна? Я вижу, что оно очищается при копировании (Ctrl+C) и что текст в заголовке не соответствует тексту на таскбаре.

    Вы тоже не владеете темой, раз даже определение top-level window для Вас оказалось в новинку.

    Гугл сразу нашёл нужную страничку:
    http://msdn2.microsoft.com/en-us/library/ms632597.aspx#parent_owner_handle

    ЗЫ: Не смог удержаться прокомментировать заключительную часть Вашего поста. Вы собираетесь покинуть тему, которую сами же начали, причём начали намереваясь "блеснуть" глубокими познаниями в области околооконных технологий. Вы читали Petzold'а - похвально (это я на полном серьёзе пишу, хотя сам его не читал). Какие-то недокументированности/полудокументированности самостоятельно разрулили на asmcommunity - тоже молодец! Вот и продолжайте в том же направлении, но зачем затевать пустые дискуссии? Я, конечно, догадываюсь зачем, и в самом первом посте Вы в конце написали, что совсем не для этого.