Что нового

Пример создания тени для окна

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Видел много всяких скиновых модулей, больше всего в них мне понравился эффект тени у окна, долго думал как такое же сделать на AutoIt'e, прошерстил весь интернет, видел примеры на других яп, но так и не разобрался, так как я их не знаю, плюнул на всё и решил сделать с помощью GDIPlus и других примочек, может и не так выглядит как у профессионалов, но напоминаю, это всего лишь пример, далее вы решаете как доработать и что убрать, а ещё лучше посоветуйте мне как сделать более лучше.

Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPIEx.au3>
#include <GDIPlus.au3>

;~ Ниже расположен бинарный код нашей тени, если хотим заменить на другую, то пишем свой код, либо в самой функции вместо $Shadow прописываем путь до png картинки '@ScriptDir & "\ваша картинка"'
#Region Binary Data
Global $Shadow  = '0x'
$Shadow &= '89504E470D0A1A0A0000000D494844520000021F0000014008060000001C6D1E6E0000000467414D410000B18F0BFC61050000001D74455874536F667477617265005061696E742E4E4554203F3F3F3F3F3F20332E354CE2DC8700001B8649444154785EEDDDBBABA57715C7E1C4BB78C978454131A88885603A45C5C242BCA4482DF6DADA59A81913FC0F2C6DACC54A14D4D80B76829D450435A09D8568C4CBFA1EF73BEC9CCC246772160BD69C67E09733973367DEF99D67F27ED6BBF77ECFC30FBDFCB7874FEF92B7C77AD5D9CF9D7F84E37D5FFEA37A0F3B6007EC801DB0037660D30EFCF7D2C11E3FFE4FFD7CBE7FACBCDBE5F7BDF2DFF3088D57D7EF786DADD7D77A63AD37D57A4BADB7D67AA4D6ADD37A5BBD7DBB650F18608001061878200DE43C7F9CF373FE4F07A407D205E98374427A21DD7034C495A323EF98DF94AB1BF920F9806F3E417A77BD7D6FADF7D77AB4D6876A7DF8B43E526F2FAF8FD6CF59F6800106186080817D06EE765E3FCEF939FFA703D203E982F4412E40A417D20DE98774C4951F11C93BA65A5230F920EFACF5BE53583C566F3F59EBB3B53E57EBF3B5BE785A5FAAB7595FAEF5B8650F18608001061878200CE4BC7E9CE38F737ECEFFE980F440BA207D9058492FA41BD20FE988E32A487DF7DEDF121EAFA9956AC9E59514CDC76A7DFA04E82BF5F66BB5BE51EB9BB5BE55EBC95AB74FEBBBF5F6A9B3F5747DDFB2070C30C000030CEC33707E3ECFF9FD38D7E7BC9FF37F3A203D902E481FE4C2437A21DD907E4847A427D215F7BC02725CF1C83BBEA3D6076B7DA2D613B5BE7EFA43BF5F6F7F58EB47B57E52EB67B57E5EEB17B57E59EB99BBAC5FD5CF59F6800106186080813D06EE763ECF793EE7FB9CF773FE4F07A407D205E983DBA75E4837A41FD211E98974C55DAF801CCFF1C82592944A7EC3676A7DB5D6B76BFDA0D64F6BFDBAD6EF6AFDBED61F6AFDB1D69F6AFDF9B49EABB7963D608001061860E0C133709CEB73DECFF93F1D901E4817A40FD209E9857443FA211D919E4857A42F8E57CAD677FFFF2DF1912787E4319A5C2A49B1E4377EAFD68F6BFDA6D6B3B5FE5AEB6FB5FE5EEB1FB5FE79B69EAFEF5BF68001061860808107D7C0F9793F1D901E4817A40FD209E9857443FA211D919E4857A42FD219771E7E397FB8254F12C963354FD44AB9E403FCB6D65F4E7FC0BFEAEDBF6BE535BD963D60800106186080817441FA2021925E4837A41FD211E9897445FAE205573FCEAF7AE459AA79B2489EE3914B2729987CA0D4CD111DE73712F1FD17DE58C57ED80F06186080819B6820119A4E482FA41BD20FE988F4C4A76AA52F723F903BCFFDC86330A991BC3E372F93C9B3556FD7CA6337CFD64AC9E403DEC4CDF477F679678001061860E0EA06D20BE986F4433A223D9197EAA62F6ED57A5DAD8B875E522179266A6E10F258ADBC5C26CF5ACD9347F2184E2EA55CBE75AA4FC4D53F11F6CA5E31C000030CDC1403E9857443FA211D919E48577CBCD6BB6ADD79E825AFBFCDA590DCA12C370AC9EB75F3B2993C7B354F2271D5C33F9A9BF28FC6DF9375061860E0FA06D20DE98774447A225D91BE78CFE962472E7A5C5C02C9BDD9F36CD4DCA92C370CC9EB76F3F2995C3A71D5E3FA9F0898ED21030C30C0C04D31906E483FA423D213E98AF4C5F9F33E2EE2235F1CE6D15AB9556AEE58961B87E4F5BB79E288F8F00FE6A6FC83F1F7649D010618B8BE817443FA211D919E4857A42F3E502B2FB9CD232E178FBF3C522B5F2426F76ACF2D5373E7B2DC4024AFE7151FD7FF44C06C0F19608001066E8A817443FA211D919E4857A42F7291238FB4DC898F5BF5837CA5BA7CC198276BE5D6A9B98399F8F08FE5A6FC63F1F7649D010618E83170C4473A223DF19D5A5FA895BB9DE69196DC6CECE2CAC7797CDCAE1FE7DEEDB98DAAF8E8F944006D1F19608001066E8A81233ED211E98974452E6EBC283E72DFF5BC06375F3237EF942F1E93DF945BE47AD8C53F989BF20FC6DF9375061860E0FA06D20DE98774447A225D91BEC8D33B72E523CF357DE80DB58E1B8CE517F36573F3D5ECF24581C4C7F53F0920DB4306186080819B64E0888F74447A225DF192F191BB903D253EDCCDB50CDCA47F28FEAE3EDF0C30C0409F81CBF191AE78C9F8C8ADD5C547DF2700667BC900030C3070D30CDC2D3ED217F77CD8457CF84772D3FE91F8FB32CF00030CF41AB8AFF8F8685549E2E3690FBB78C8C1C32E0C30C000030CBC420397E3235D715CF978E4F2134ECFE3E3579E700ADD2B446782E89D20ECA7FD6480816D06C48713A88862800106186060D480F8006E14DCB63A77BC264A061860A0DF80F8101FE2830106186080815103E203B851702688FE09C29EDA530618D866407C880FF1C100030C30C0C0A801F101DC28B86D75EE784D940C30C040BF01F1213EC407030C30C00003A306C40770A3E04C10FD13843DB5A70C30B0CD80F8101FE2830106186080815103E203B85170DBEADCF19A28196080817E03E2437C880F061860800106460D880FE046C19920FA27087B6A4F1960609B01F1213EC407030C30C00003A306C40770A3E0B6D5B9E3355132C00003FD06C487F8101F0C30C000030C8C1A101FC08D823341F44F10F6D49E32C0C03603E2437C880F061860800106460D880FE046C16DAB73C76BA264800106FA0D880FF1213E1860800106181835203E801B056782E89F20ECA93D6580816D06C487F8101F0C30C000030C8C1A101FC08D82DB56E78ED744C900030CF41B101FE2437C30C000030C30306A407C00370ACE04D13F41D8537BCA0003DB0C880FF1213E1860800106181835203E801B05B7ADCE1DAF8992010618E837203EC4'
$Shadow &= '87F860800106186060D480F8006E149C09A27F82B0A7F6940106B619101FE2437C30C000030C30306A407C00370A6E5B9D3B5E1325030C30D06F407C880FF1C100030C30C0C0A801F101DC28381344FF04614FED29030C6C33203EC487F860800106186060D480F8006E14DCB63A77BC264A061860A0DF80F8101FE2830106186080815103E203B851702688FE09C29EDA530618D866407C880FF1C100030C30C0C0A801F101DC28B86D75EE784D940C30C040BF01F1213EC407030C30C00003A306C40770A3E04C10FD13843DB5A70C30B0CD80F8101FE2830106186080815103E203B85170DBEADCF19A28196080817E03E2437C880F061860800106460D880FE046C19920FA27087B6A4F1960609B01F1213EC407030C30C00003A306C40770A3E0B6D5B9E3355132C00003FD06C487F8101F0C30C000030C8C1A101FC08D823341F44F10F6D49E32C0C03603E2437C880F061860800106460D880FE046C16DAB73C76BA264800106FA0D880FF1213E1860800106181835203E801B056782E89F20ECA93D6580816D06C487F8101F0C30C000030C8C1A101FC08D82DB56E78ED744C900030CF41B101FE2437C30C000030C30306A407C00370ACE04D13F41D8537BCA0003DB0C880FF1213E1860800106181835203E801B05B7ADCE1DAF8992010618E837203EC487F860800106186060D480F8006E149C09A27F82B0A7F6940106B619101FE2437C30C000030C30306A407C00370A6E5B9D3B5E1325030C30D06F407C880FF1C100030C30C0C0A801F101DC28381344FF04614FED29030C6C33203EC487F860800106186060D480F8006E14DCB63A77BC264A061860A0DF80F8101FE2830106186080815103E203B851702688FE09C29EDA530618D866407C880FF1C100030C30C0C0A801F101DC28B86D75EE784D940C30C040BF01F1213EC407030C30C00003A306C40770A3E04C10FD13843DB5A70C30B0CD80F8101FE2830106186080815103E203B85170DBEADCF19A28196080817E03E2437C880F061860800106460D880FE046C19920FA27087B6A4F1960609B01F1213EC407030C30C00003A306C40770A3E0B6D5B9E3355132C00003FD06C487F8101F0C30C000030C8C1A101FC08D823341F44F10F6D49E32C0C03603E2437C880F061860800106460D880FE046C16DAB73C76BA264800106FA0D880FF1213E1860800106181835203E801B056782E89F20ECA93D6580816D06C487F8101F0C30C000030C8C1A101FC08D82DB56E78ED744C900030CF41B101FE2437C30C000030C30306A407C00370ACE04D13F41D8537BCA0003DB0C880FF1213E1860800106181835203E801B05B7ADCE1DAF8992010618E837203EC487F860800106186060D480F8006E149C09A27F82B0A7F6940106B619101FE2437C30C000030C30306A407C00370A6E5B9D3B5E1325030C30D06F407C880FF1C100030C30C0C0A801F101DC28381344FF04614FED29030C6C33203EC487F860800106186060D480F8006E14DCB63A77BC264A061860A0DF80F8101FE2830106186080815103E203B851702688FE09C29EDA530618D866407C880FF1C100030C30C0C0A801F101DC28B86D75EE784D940C30C040BF01F1213EC407030C30C00003A306C40770A3E04C10FD13843DB5A70C30B0CD80F8101FE2830106186080815103E203B85170DBEADCF19A28196080817E03E2437C880F061860800106460D880FE046C19920FA27087B6A4F1960609B01F1213EC407030C30C00003A306C40770A3E0B6D5B9E3355132C00003FD06C487F8101F0C30C000030C8C1A101FC08D823341F44F10F6D49E32C0C03603E2437C880F061860800106460D880FE046C16DAB73C76BA264800106FA0D880FF1213E1860800106181835203E801B056782E89F20ECA93D6580816D06C487F8101F0C30C000030C8C1A101FC08D82DB56E78ED744C900030CF41B101FE2437C30C000030C30306A407C00370ACE04D13F41D8537BCA0003DB0C880FF1213E1860800106181835203E801B05B7ADCE1DAF8992010618E837203EC487F860800106186060D480F8006E149C09A27F82B0A7F6940106B619101FE2437C30C000030C30306A407C00370A6E5B9D3B5E1325030C30D06F407C880FF1C100030C30C0C0A801F101DC28381344FF04614FED29030C6C33203EC487F860800106186060D480F8006E14DCB63A77BC264A061860A0DF80F8101FE2830106186080815103E203B851702688FE09C29EDA530618D866407C880FF1C100030C30C0C0A801F101DC28B86D75EE784D940C30C040BF01F1213EC407030C30C00003A306C40770A3E04C10FD13843DB5A70C30B0CD80F8101FE2830106186080815103E203B85170DBEADCF19A28196080817E03E2437C880F061860800106460D880FE046C19920FA27087B6A4F1960609B01F1213EC407030C30C00003A306C40770A3E0B6D5B9E3355132C00003FD06C487F8101F0C30C000030C8C1A101FC08D823341F44F10F6D49E32C0C03603E2437C880F061860800106460D880FE046C16DAB73C76BA264800106FA0D880FF1213E1860800106181835203E801B056782E89F20ECA93D6580816D06C487F8101F0C30C000030C8C1A101FC08D82DB56E78ED744C900030CF41B101FE2437C30C000030C30306A407C00370ACE04D13F41D8537BCA0003DB0C880FF1213E1860800106181835203E801B05B7ADCE1DAF8992010618E837203EC487F860800106186060D480F8006E149C09A27F82B0A7F6940106B619101FE2437C30C000030C30306A407C00370A6E5B9D3B5E1325030C30D06F407C880FF1C100030C30C0C0A801F101DC28381344FF04614FED'
$Shadow &= '29030C6C33203EC487F860800106186060D480F8006E14DCB63A77BC264A061860A0DF80F8101FE2830106186080815103E203B851702688FE09C29EDA530618D866407C880FF1C100030C30C0C0A801F101DC28B86D75EE784D940C30C040BF01F1213EC407030C30C00003A306C40770A3E04C10FD13843DB5A70C30B0CD80F8101FE2830106186080815103E203B85170DBEADCF19A28196080817E03E2437C880F061860800106460D880FE046C19920FA27087B6A4F1960609B01F1213EC407030C30C00003A306C40770A3E0B6D5B9E3355132C00003FD06C487F8101F0C30C000030C8C1A101FC08D823341F44F10F6D49E32C0C03603E2437C880F061860800106460D880FE046C16DAB73C76BA264800106FA0D880FF1213E1860800106181835203E801B056782E89F20ECA93D6580816D06C487F8101F0C30C000030C8C1A101FC08D82DB56E78ED744C900030CF41B101FE2437C30C000030C30306A407C00370ACE04D13F41D8537BCA0003DB0C880FF1213E1860800106181835203E801B05B7ADCE1DAF8992010618E837203EC487F860800106186060D480F8006E149C09A27F82B0A7F6940106B619101FE2437C30C000030C30306A407C00370A6E5B9D3B5E1325030C30D06F407C880FF1C100030C30C0C0A801F101DC28381344FF04614FED29030C6C33203EC487F860800106186060D480F8006E14DCB63A77BC264A061860A0DF80F8101FE2830106186080815103E203B851702688FE09C29EDA530618D866407C880FF1C100030C30C0C0A801F101DC28B86D75EE784D940C30C040BF01F1213EC407030C30C00003A306C40770A3E04C10FD13843DB5A70C30B0CD80F8101FE2830106186080815103E203B85170DBEADCF19A28196080817E03E2437C880F061860800106460D880FE046C19920FA27087B6A4F1960609B01F1213EC407030C30C00003A306C40770A3E0B6D5B9E3355132C00003FD06C487F8101F0C30C000030C8C1A101FC08D823341F44F10F6D49E32C0C03603E2437C880F061860800106460D880FE046C16DAB73C76BA264800106FA0D880FF1213E1860800106181835203E801B056782E89F20ECA93D6580816D06C487F8101F0C30C000030C8C1A101FC08D82DB56E78ED744C900030CF41B101FE2437C30C000030C30306A407C00370ACE04D13F41D8537BCA0003DB0C880FF1213E1860800106181835203E801B05B7ADCE1DAF8992010618E837203EC487F860800106186060D480F8006E149C09A27F82B0A7F6940106B619101FE2437C30C000030C30306A407C00370A6E5B9D3B5E1325030C30D06F407C880FF1C100030C30C0C0A801F101DC28381344FF04614FED29030C6C33203EC487F860800106186060D480F8006E14DCB63A77BC264A061860A0DF80F8101FE2830106186080815103E203B851702688FE09C29EDA530618D866407C880FF1C100030C30C0C0A801F101DC28B86D75EE784D940C30C040BF01F1213EC407030C30C00003A306C40770A3E04C10FD13843DB5A70C30B0CD80F8101FE2830106186080815103E203B85170DBEADCF19A28196080817E03E2437C880F061860800106460D880FE046C19920FA27087B6A4F1960609B01F1213EC407030C30C00003A306C40770A3E0B6D5B9E3355132C00003FD06C487F8101F0C30C000030C8C1A101FC08D823341F44F10F6D49E32C0C03603E2437C880F061860800106460D880FE046C16DAB73C76BA264800106FA0D880FF1213E1860800106181835203E801B056782E89F20ECA93D6580816D06C487F8101F0C30C000030C8C1A101FC08D82DB56E78ED744C900030CF41B101FE2437C30C000030C30306A407C00370ACE04D13F41D8537BCA0003DB0C880FF1213E1860800106181835203E801B05B7ADCE1DAF8992010618E837203EC487F860800106186060D480F8006E149C09A27F82B0A7F6940106B619101FE2437C30C000030C30306A407C00370A6E5B9D3B5E1325030C30D06F407C880FF1C100030C30C0C0A801F101DC28381344FF04614FED29030C6C33203EC487F860800106186060D480F8006E14DCB63A77BC264A061860A0DF80F8101FE2830106186080815103E203B851702688FE09C29EDA530618D866407C880FF1C100030C30C0C0A801F101DC28B86D75EE784D940C30C040BF01F1213EC407030C30C00003A306C40770A3E04C10FD13843DB5A70C30B0CD80F8101FE2830106186080815103E203B85170DBEADCF19A28196080817E03E2437C880F061860800106460D880FE046C19920FA27087B6A4F1960609B01F1213EC407030C30C00003A306C40770A3E0B6D5B9E3355132C00003FD06C487F8101F0C30C000030C8C1A78C5F1F14C7DA29EABF57CAD7C1065680F18608001061860E02A06EE2B3E3E5291F178ADA76A890FC0AE02CCFB70C200030C3070D9C0E5F84857A42F3E54EBADB55E57EBA137D47A7B2DF10190FF8930C000030C30705D03F71D1F5F76E5C3434C1E66638001061860E01A06EE161F5F7AA92B1FF9C5EF7AD805BA6BA0BB6E31FBFDA62E06186060B781CBF191AE78517CBCBE7EF26DA7875DF28BB76BFDB2D69F3DE154848810061860800106EED3C0111FE988F444BAE2AEF171AB7EE1C3B5BE787AA75F9CE2E39FF5D6AB5D7617A809C2E78F0106186060D240BA21FD90F8484F243ED2171FAC95279CBEB6D643B9F2711E1F4FD68F7F5EEB4FA7DF2C3EA09D44EBCFE28D010618D86DE0888F74447AE23BB5BE70B7F878A47E322F81F97CAD6FD5FA59AD3F8A0F97DACA80FF09D8030618608081FB3170C4473A223D91AE485F3C5AEB2DB55E932B1F79BD6D2E83E4273F57EB'
$Shadow &= '9BB57E52EB0FB5FE51CB950FE8EE079DF7E585010618B8D906D20DE98774447A225D91BEF840AD379FC7474AE4FDB53E5BEB1BB57E54EBF7B5FE2E3E4CFE65C0FF48EC01030C30C0C0550D243ED20FE988F444BA227DF1BE5A6FAAF5EA5A17973FF283F7D6FA64ADAFD5FA61ADDFD5FA5BAD7F3BF938F932C000030C30C0C0150DA41BD20FE988F444BA227DF19E5A6F3CE22305921FBCBBD663B5BE52EBFBB57E5DEBAFB5FE55CB432F8AF7AAC5EBFD58618001066EAE81F442BA21FD908E484FA42B3E5EEB5DB5F2229757D5BAF84F7E707E8BF5DBF5E39FD67AB6562E9DB8FA717321F99F88CF3D030C30C0C0550DA417D20DE98774447A22774FCF9770B9552BCF337D38F191FFE435B77912481E8FF974ADAFD7FA41ADDFD4FA4BAD3C71241FD0151000AF0AD0FBB1C200030CDC1C03E98374427A21DD907E4847A4273E75EA8BE3F91E77E2E378E8E59DF50E1FABF544AD6FD7FA71ADDF9E3E504A2697528E08C91F64D9030618608001066EB6817441FA209D90F04837A41FD211E9897445FAE2CE432EF5FD8B6FE7573FF2AA974FD4FA6AADEF9D3E400AE6D95A790C274F22C91F90BAC91DCC8EF57C7DDFB2070C30C000030C3CB806CECFFBE980F440BA207D904E482F243CD20FE988F444BA228FAEE451968BAB1EC7B7FCE078EE47BECE4B6E81FA99D36F4CB9E4D2491EBBC99347F2ECD5BC7C26AFDFCD0D447207B3DC4235EB39CB1E30C000030C30F0401A38CEF539EFE7FC9F0E480FA40BD207E984F442BA21E1918E484FA42B5E74D5A37EEEE25B02E478F8E51DA7DF906279A2561EB3B95D2BCF5ACDCB66F2BADDDC3824772ECBAD5373EFF67CF198672C7BC000030C30C0C0036920E7F99CEF73DECFF93F1D901E4817A40FD209E9857443FA21E1919E385E5EFB82AB1EF5F377BEE51772DF8FBC634A25974AF2584D9E2C9267ABE6E53279BD6E6E18923B96E596A9B9677BFEC0AC7CD9DCA7CED6D3F57DCB1E30C000030C30B0CFC0F9F93CE7F7E35C9FF37ECEFFE980F440BA207D904E482FA41BD20FE988F444BAE29EE151BF76F1EDB802924B24798C264F12C9AB60F23299BC4E37370AC99DCA72ABD4DCAB3D5F2C265FAD2E5F2EF7588FD7F72D7BC000030C30C0C07E03E7E7F79CEF73DECFF93F1D901E4817A40FD209E9857443FA211D9147545E363C4EFD71F18E790E489E1C92DF9C97C7DCAA951B84E40E65F9E0B947FBA3B57259252B5F98CEB2070C30C000030C3CB8068E737ECEFFE980F440BA207D904E482FA41BD20FE9882B87C71120797B4448CA253706C907CC25947CF0544DBE264CBE28DDBD56BE5AAE650F186080010618D867E0A5CEEF39FFA703D203E982F4413A21BDF08AA3E33C408E08390F917CF03C869395BAC9CA1F6AD9030618608001061E5C03C739FF6880F4C079705CE94AC7FF00ABBB110422C5672D0000000049454E44AE426082'
#EndRegion Binary Data

#cs

    _JSkin_SetWindowShadow($hWnd, $Shadow, $SizeShadow, $TransShadow)
	
	$hWnd        - Хэндл окна к которому будем крипить тень
	$Shadow      - Картинка тени или её бинарный код
	$SizeShadow  - Размер тени 
	$TransShadow - Прозрачность тени
	
#ce

Global $SizeShadow = 10, $___hShadow, $ZOrder = False ;~ Переменные обязательны, так как тоже используются функцией (WM_MOVE/__Z__Order), но можно сделать и по другому... 

$hForm = GUICreate("WinShadow", 500, 300, -1, -1, $WS_POPUP)
_JSkin_SetWindowShadow($hForm, $Shadow, $SizeShadow, 60) ;~ Функция создающая эффект тени.
GUICtrlCreateLabel("", 0, 0, 500, 30, -1, $GUI_WS_EX_PARENTDRAG)
GUICtrlSetBkColor(-1, 0x607BFF)
GUICtrlSetCursor(-1, 9)
$hExit = GUICtrlCreateButton("Exit", 40, 60, 50, 20)

$Ret = DllCall("gdi32.dll", "long", "CreateRoundRectRgn", "long", 0, "long", 0, "long", 500, "long", 300, "long", 9, "long", 9) 
DllCall("user32.dll", "long", "SetWindowRgn", "hwnd", $hForm, "long", $Ret[0], "int", 1)
GUISetState()

AdlibRegister("__Z__Order", 1)

While 1  
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE, $hExit
            Exit
    EndSwitch
WEnd

;~ Функция для контроля Z порядка, чтоб если наше окно активно, то тень была поверх всех окон, но ниже нашего на порядок.
Func __Z__Order()
	If $ZOrder = False Then
        If WinGetState($hForm) <> 15 Then
		    $ZOrder = True
	    EndIf
	ElseIf $ZOrder Then
		If WinGetState($hForm) = 15 Then
		    _WinAPI_BringWindowToTop($___hShadow )
	        _WinAPI_BringWindowToTop($hForm)
		    $ZOrder = False
	    EndIf	
	EndIf	
EndFunc

;~ Состоит функция тени из создания ещё одного окна, которое ни как не влияет на наше за счёт применимых к нему стилей.
Func _JSkin_SetWindowShadow($hWnd, $Shadow, $SizeShadow, $TransShadow)
	Local $hPos = WinGetPos($hWnd), $Width = $hPos[2], $Height = $hPos[3]
	$___hShadow = GUICreate("", ($Width + ($SizeShadow * 2)), ($Height + ($SizeShadow * 2)), -1, -1, BitOR($DS_SETFOREGROUND ,$WS_POPUP, $WS_DISABLED, $WS_CLIPSIBLINGS), BitOR($WS_EX_LAYERED, $WS_EX_TRANSPARENT, $WS_EX_TOOLWINDOW))
    __SetBitmap($___hShadow, $Shadow, $TransShadow)
    GUISetState(@SW_SHOW, $___hShadow)
	GUISetState(@SW_SHOW, $hWnd)
	GUIRegisterMsg($WM_MOVE, "WM_MOVE")
EndFunc	

;~ Функция для накладывания png картинки на окно, предварительно указав нужные размеры.
Func __SetBitmap($hWnd, $hImage, $Transparant)
	$iSize = WinGetPos($hWnd)
	_GDIPlus_Startup()
	$iImage = __LoadImage($hImage)
	$hThumb = DllCall($ghGDIPDll, "int", "GdipGetImageThumbnail", "ptr", $iImage, "int", $iSize[2], "int", $iSize[3], "ptr*", 0, "ptr", 0, "ptr", 0)
	$hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hThumb[4])
	_WinAPI_UpdateLayeredWindowEx($hWnd, -1, -1, $hBitmap, $Transparant)
	_GDIPlus_ImageDispose($hThumb[4])
    _GDIPlus_ImageDispose($iImage)
    _GDIPlus_Shutdown()	
EndFunc

;~ Функция для загрузки картинки в скрипт. Можно использовать как бинарный код картинки, так и просто указав директорию в которой она лежит.
Func __LoadImage($hImage)
	
	Local $sData, $hSize, $hStruct, $hData, $pData, $pStream, $pBitmap

	If StringLen($hImage) < 100 Then	
		Return _GDIPlus_ImageLoadFromFile($hImage)
	Else	
	    $sData = Binary($hImage)
	    $hSize = BinaryLen($sData)
	    $hStruct = DllStructCreate("byte[" & $hSize & "]")
	    DllStructSetData($hStruct, 1, $sData)
	    $hData = DllCall("kernel32.dll", "handle", "GlobalAlloc", "uint", 2, "ulong_ptr", $hSize)
	    $pData = DllCall("kernel32.dll", "ptr", "GlobalLock", "handle", $hData[0])
		DllCall("kernel32.dll", "none", "RtlMoveMemory", "ptr", $pData[0], "ptr", DllStructGetPtr($hStruct), "ulong_ptr", $hSize)
		DllCall("kernel32.dll", "bool", "GlobalUnlock", "handle", $hData[0])
	    $pStream = DllCall("ole32.dll", "int", "CreateStreamOnHGlobal", "int", $hData[0], "long", 1, "Int*", 0)
	    $pBitmap = DllCall($ghGDIPDll, "int", "GdipCreateBitmapFromStream", "ptr", $pStream[3], "int*", 0)
		If Not @error Then Return $pBitmap[2]
	    _GDIPlus_BitmapDispose($pBitmap[2])
        _WinAPI_DeleteObject($pStream[3])
        DllCall("kernel32.dll", "ptr", "GlobalFree", "handle", $hData[0])
	EndIf	
	
EndFunc

;~ Функция контролирующая перемещение окон.
Func WM_MOVE($hWnd)
    Local $aParent = WinGetPos($hWnd)
    WinMove($___hShadow, "", $aParent[0] - $SizeShadow, $aParent[1] - $SizeShadow)
EndFunc
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Автор
V

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Это я знаю, первое - хочется чтоб тень была вокруг всего окна, а второе, пример с оф.форума не корректно выглядит на POPUP окнах, по этому и решил сделать.
 
Верх