// Эта ветка выделена из 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 не первый год) я точно знаю, что вы порядочный и добрый человек. Просто истина, сами понимаете, важнее.
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
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 ! Ну, нафига здесь этот Вистовский недоносок, а ?
Пример кода я уже приводил, а оформлять всё в минимальный рабочий пример мне лень. Не знаю - не смотрел. В каком месте? 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й год там было то самое предложение. Смысл, как видите, не изменился.
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, - пора прощаться. С наступающим и всех благ.
kero Ну, есть такое окно (по названию его просто отыскать). Чтобы соблюсти солидность я должен был ночь не спать - проверять все окна в софтайсе? Но оно не слоёное, а из этого следует, что его сделали top-level не для того, чтобы использовать слоёность. Поэтому смысл примера мне не ясен. Но раз уж Вы соизволили привести этот пример, может быть Вы знаете назначение этого окна? Я вижу, что оно очищается при копировании (Ctrl+C) и что текст в заголовке не соответствует тексту на таскбаре. Вы тоже не владеете темой, раз даже определение top-level window для Вас оказалось в новинку. Гугл сразу нашёл нужную страничку: http://msdn2.microsoft.com/en-us/library/ms632597.aspx#parent_owner_handle ЗЫ: Не смог удержаться прокомментировать заключительную часть Вашего поста. Вы собираетесь покинуть тему, которую сами же начали, причём начали намереваясь "блеснуть" глубокими познаниями в области околооконных технологий. Вы читали Petzold'а - похвально (это я на полном серьёзе пишу, хотя сам его не читал). Какие-то недокументированности/полудокументированности самостоятельно разрулили на asmcommunity - тоже молодец! Вот и продолжайте в том же направлении, но зачем затевать пустые дискуссии? Я, конечно, догадываюсь зачем, и в самом первом посте Вы в конце написали, что совсем не для этого.