ساخت افکت های ویژه در برنامه نویسی در ویستا توسط DWM

yasin_d

عضو جدید
کاربر ممتاز
منبع: Microsoft.com

محتویات این مقاله (تا پایان):

نگاه فنی به DWM
فواید دسکتاپ مرکب
توابع معمولی ترکیب و مخلوط سازی
آمادگی برای محیط Aero glass
برنامه نویسی DWM
ترسیم روی glass
دکمه های Thumbnails

-------------------------------------
بعد از اومدن ویستا و گرافیک بالا در پنجره های اون که به صورت 3D و شفاف هست بیشتر برنامه نویس ها از این قابلیت در نرم افزاراشون استفاده کرده اند در پایین تو ضیحاتی در باره این سیستم در ویستا و برنامه نویسی آن صحبت می کنیم.

Windows Vista desktop: محیط کار یا دسکتاپ ویندوز ویستا از برنامه های مختلفی برای مدیریت پنجره ها و شکل دهی به آن استفاده می کند. در زیر به انواع این موتورها اشاره می شود:
1-Windows® Presentation Foundation (WPF : فراهم کننده یک لایه برتر برای کنترل render لایه های دسکتاپ
2-Windows Display Driver Model (WDDM : فراهم کننده handle برای render سطح پایین به صورت واقعی برای نمایش
3-Desktop Window Manager (DWM : واسط جدیدی برای مدیریت چگونه merge کردن پنجره های مختلف در حال اجرا با یکدیگر

کار اصلی ما با رابط DWM می باشد و فقط درباره آن توضیح می دهیم.
------------------------------------------

نگاه فنی به DWM:
این رابط بر روی تمام نسخه های ویندوز ویستا بجز نسخه home basic موجود است. و در فایل DWM.exe قرار دارد. تمام برنامه های سیستم بدون هیچگونه تغییری در آن از این رابط سود می برند. برنامه هایی که می خواهند از قابلیت های ویژه DWM استفاده کنند رابط dwmapi.dll به آنها پاس داده می شود تا به هدف خود برسند. همچنین توضیحات مربوط به این رابط را می توانید در فایل dwmapi.h جستجو کنید .

ویندوز ویستا به صورتی طراحی شده که برای هر پنجره از شتاب دهنده گرافیکی استفاده می کند نه فقط برای نرم افزار های 3D DirectX . به این ترتیب که DWM رابط WDDM را صدا زده و این رابط تمام پردازنده های گرافیکی و حافظه های تصویری را در دست می گیرد. (رابط DWM به فایل milcore.dll بستگی دارد که یک component به اشتراک گذاشته شده با WPF برای تولید خروجی است. )
عملیات rendering به وسیله thread جداگانه در DWM به کار می روند. این thread برای کاربر غیر قابل دسترس می باشد . هر برنامه دارای thread مخصوص به خود برای render و تشکیل UI می باشد . اما چگونه این thread با یکدیگر برخورد نمی کنند و از یکدیگر تمیز داده می شوند؟.
DWM لیستی از پنجره ها و bitmap آنها را در یک ساختار درختی مدیریت می کند و در نهایت برای تشکیل دسکتاپ آنها را با یکدیگر مخلوط می کند.
به عبارت دیگر هر برنامه به نقشه بیتی یا bitmap خودش render شده و سپس توسط رابط DWM با یکدیگر مخلوط می شوند.
Thread پنجره اصلی هر برنامه به یک منظره یا نما render می شود که این نما بوسیله DWM قابل دسترس می باشد و این عملیات دسکتاپ را از طریق رابط directX به روز رسانی می کند.
اطلاعات پاس داده شده به صورت فشرده هستند به مانند عکس های بزرگی که در حافظه اشتراکی قرار می گیرند . این قابلیت می تواند اجازه دهد که ساخت نما در یک ماشین رخ دهد در حالی که render آن در یک ماشین دیگر تکمیل شده باشد. 3D programmers که از OpenGL استفاده می کنند با این معماری آشنایی کافی دارند. این معماری که مدیریت و ساخت نما در Server و استفاده و نمود آن در client ظاهر می شود خود را در پشتیبانی از سناریوی remote desktop مشخص و معرفی می کند.

به علت مشغله زیاد هر روز یک بخش از مقاله را روی سایت قرار می دهم.
در این فاصله منتظر نظرات شما هستم.
 

yasin_d

عضو جدید
کاربر ممتاز
فواید دسکتاپ مرکب یا composite:
تمامی این زیر سیستم ها (DWM , WDDM , WPF) پتجره ها را قادر می سازد که به صورت مستقل render شوند و در یک مرحله مرکب سازی به دسکتاپ اصلی تبدیل شوند.
دو مورد از مهمترین خصیصه های ویستا وجود Aero glass و thumbnail در که برای نمایش به کار می روند. افکت Glass یا شفافیت که یکی از موارد ما در مورد بحث برنامه نویسی است در صورتی فعال است که شمای Aero glass و مرکب فعال باشد.
بعد از این هر پنجره که در حافظه تصویری ساخته می شود رابط DWM یک ترکیب نهایی از همه پنجره ها را بر روی دسکتاپ قرار میدهد . این بدین معنا است که رابط DWM به تصویر هر پنجره دسترسی داشته و می تواند ترکیب دیگری از آن را نمایش دهد و قابلیت glass نیز به این امر کمک می کند که هیچ پنجره ای در حالت غیر فعال کامل قرار نگیرد زیرا شما از زیر شفافیت یک پنجره می توانید فعالیت پنجره دیگر را دنبال کنید. اگر به یاد داشته باشید در نسخه های قبلی ویندوز زمانی که یک پنجره در روی یک پنجره دیگر حرکت داده می شد تصاویر مختلف از حرکت بر روی پنجره زیرین به جای می ماند که در ویستا با قابلیت دسکتاپ ترکیبی این مشکل برطرف شده.
یکی از برنامه هایی که به خوبی برای ویستا توسعه داده شده است media player است که به صورت کامل با ویستا پیش رفته . قابلیت شفافیت را می توانید با تغییر در حالت دسپتاپ از حالت aero glass به aero basic به خوبی لمس کنید.
یکی دیگر از قابلیت های دسکتاپ مرکب قابلیت flip 3D می باشد که همگی به خوبی با آن آشنایی دارید و دیگر اینکه با قرار گیری موس بر روی پنجره ای در taskbar که غیر فعال و حتی minimize است تصویر فعالیت آن را می بینید.
این قابلیت ها توانایی های کمی نبوده و تحت موتور دسکتاپ ترکیبی در قالب DWM پیاده سازی شده اند.
 

yasin_d

عضو جدید
کاربر ممتاز
منتظر نظرات. اگه خوبه بگین اگه بده بازم بگین.
 

yasin_d

عضو جدید
کاربر ممتاز
توابع معمولی ترکیب و مخلوط سازی:
اگر شما می خواهید از توابع دسکتاپ مرکب در برنامه خود استفاده کنید . باید این نکته را در نظر بگیرید که شما به پارامترهای گوناگون DWM برای این کار احتیاج دارید به عنوان مثال اگر برنامه شما در حالت full screen باید از حالت مرکب خارج شده و پس زمینه را از حالت شفاف خارج سازد .
برنامه شما باید موقعیت های مختلف را برای فعال یا غیر فعال کردن حالت مرکب در نظر بگیرد.
توابع اصلی برای برنامه نویسی با DWM:
DwmEnableComposition: برای فعال یا غیر فعال کردن DWM ترکیبی. DWM این تنظیمات را در طول انجام فرایند یا تا زمان تغییر نگهداری می کند. تغییر این پارامتر باعث بوجود آمدن یک WM_DWMCOMPOSITIONCHANGED می شود.
DwmIsCompositionEnabled: برای دیدن اینکه دسکتاپ مرکب فعال است استفاده می شود.
DwmSetWindowAttribute: برای تنظیم صفات خاص DWM برای یک پنجره و چگونگی رفتار DWM.
DwmGetWindowAttribute: بازیابی صفات خاص جاری از DWMWINDOWATTRIBUTE برای یک پنجره مشخص.
DwmGetColorizationColor: بازیابی رنگ جاری بکار رفته در ترکیب شفاف برای حالت شفافیت. تغییر این پارامتر باعث ایجاد پیغام WM_WMCOLORIZATIONCOLORCHANGED می شود
DwmDefWindowProc: فعال سازی فضای non-client برای توسعه فرم ها
DwmExtendFrameIntoClientArea: تابعی ساده برای توسعه قاب non-client در پنجره شما
DwmEnableBlurBehindWindow: تابعی پیچیده که به شما توانایی های خاصی در کنترل شفافیت می دهد
DwmQueryThumbnailSourceSize: بازگرداندن سایز DWM thumbnail
DwmRegisterThumbnail: ساخت یک thumbnail برای پنجره ها
DwmUnregisterThumbnail: حذف thumbnail ساخته شده
DwmUpdateThumbnailProperties: به روز رسانی خصیصه هایی برای thumbnail معین
 

zahrasoft

عضو جدید
اصلاً در این پست نمیشه فهمید شما چی گفتین.
به سختی میشه این مقاله رو خوند. لطف کنید یه کمی بیشتر مطالب رو باز کنید .
در اکثر پست هاتون همین طوره. به سختی میشه جواب ها تون رو فهمید.
 

yasin_d

عضو جدید
کاربر ممتاز
اصلاً در این پست نمیشه فهمید شما چی گفتین.
به سختی میشه این مقاله رو خوند. لطف کنید یه کمی بیشتر مطالب رو باز کنید .
در اکثر پست هاتون همین طوره. به سختی میشه جواب ها تون رو فهمید.

این مطالب مربوط به برنامه نویسی برای طراحی فرم هایی با محیط شفاف همانند فرم های خود ویستا است.
البته این مطالب مقدمه است و در مورد موتور های داخلی ویستا برای ساخت دسکتاپ بحث می کند و ممکن یه کمی سخت باشه .
**مثلا برای روشن کردن تلویزیون لازم نیست شما بدونید که اجزای تلویزیون چه طور کار می کنند ولی اگه بدونید خیلی بهتره**
این مطالب حکم شناخت اجزای داخلی تلویزیون را دارد و قسمت های بعدی که مربوط به برنامه نویسی است حکم روشن کردن اون هست.
اگه جایی از مطالب رو نفهمیدید بگید تا توضیح بدم.
قابل توجه اینکه این مقاله در سایت مایکروسافت جز بالا ترین رنکینگ و بازدید کننده بوده است.
 

alireza123

عضو جدید
خیلی عالیه.
اگه بشه اینچنین فرم هایی که میگین طراحی کرد کلی برنامه ها جذاب تر می شه و قشنگتر و همچنین با ویستا همخونی بیشتری دارد.
فقط یه سوال؟ اینکه دکمه ای close max min هم شبیه ویندوز ویستا میشه.
 
بالا