چگونه می توان پنجره را نیمه شفاف ساخت

فهرست مطالب:

چگونه می توان پنجره را نیمه شفاف ساخت
چگونه می توان پنجره را نیمه شفاف ساخت

تصویری: چگونه می توان پنجره را نیمه شفاف ساخت

تصویری: چگونه می توان پنجره را نیمه شفاف ساخت
تصویری: نماشویی شیشه با ابر و تی |۰۹۱۲۶۳۵۸۷۲۱|شستشوی نمای شیشه ای با طناب | تمیز کردن شیشه و پنجره ساختمان 2024, ممکن است
Anonim

با پیشرفت فن آوری های نمایش گرافیکی ، API سیستم عامل ها نیز بهبود یافته و فرصت های بیشتری را برای برنامه نویسان برای توسعه عناصر رابط غیر استاندارد فراهم می کند. بنابراین یکی از نوآوری های سیستم عامل ویندوز 2000 ، پنجره های لایه ای بود که قسمتهایی از آن می تواند شفاف باشد. به زودی ، شرح API برای کار با پنجره های لایه ای در MSDN در دسترس قرار گرفت. با این حال ، در انجمن های برنامه نویسان ، هنوز سوالاتی در مورد چگونگی نیمه شفاف کردن یک پنجره مطرح می شود.

چگونه می توان پنجره را نیمه شفاف ساخت
چگونه می توان پنجره را نیمه شفاف ساخت

ضروری است

  • - کامپایلر ؛
  • - Windows SDK یا چارچوب برنامه نویسی ویندوز.

دستورالعمل ها

مرحله 1

به پنجره ای که می خواهید نیمه شفاف ساخته شود دستگیره بگیرید. یک پنجره پیدا کنید یا ایجاد کنید. برای ایجاد آن ، یا از توابع CreateWindow ، CreateWindowEx API یا از روشهای بسته بندی پیرامون این توابع متعلق به کلاسهای چارچوب استفاده شده استفاده کنید. نمونه اولیه تابع CreateWindow به این شکل است:

HWND CreateWindow (LPCTSTR lpClassName ،

LPCTSTR lpWindowName ،

DWORD dwStyle ،

int x ،

بین شما ،

عرض n عرض

int ارتفاع ،

HWND hWndParent ،

HMENU hMenu ،

HINSTANCE hIstance ،

LPVOID lpParam);

همانطور که مشاهده می کنید ، تابع در نتیجه اجرا یک دسته را به پنجره ایجاد شده باز می گرداند. اگر از کلاس wrapper استفاده شده است ، روشهای آن را روی شی corresponding مربوط به پنجره ایجاد شده استفاده کنید تا دسته را بدست آورید.

گام 2

یافتن یک پنجره را می توان با استفاده از تماسهای API FindWindow ، FindWindowEx ، EnumWindows ، EnumChildWindows ، EnumThreadWindows و ترکیبات آنها انجام داد. با استفاده از توابع WindowFromPoint و ChildWindowFromPoint می توانید یک دستگیره را به یک پنجره در یک منطقه خاص برسانید.

مرحله 3

پنجره را به سبک گسترده WS_EX_LAYERED تنظیم کنید. از SetWindowLong API یا روشهای مربوط به اجسام لفافی استفاده کنید. تابع SetWindowLong به طور کامل اطلاعات پارامتر پنجره قابل تغییر را جایگزین می کند ، بنابراین از آن در ترکیب با عملکرد GetWindowLong برای بازیابی مقدار قبلی مجموعه پرچم های سبک استفاده کنید. به عنوان مثال ، سبک را می توان به صورت زیر تغییر داد:

:: SetWindowLong (hWnd، GWL_EXSTYLE،:: GetWindowLong (hWnd، GWL_EXSTYLE))؛

در اینجا hWnd دسته پنجره است که در نتیجه انجام اقدامات شرح داده شده در مرحله قبل پیدا شده است.

مرحله 4

پنجره را نیمه شفاف کنید. از SetLayeredWindowAttributes API یا از متدهای کلاسهای wrapper استفاده کنید. نمونه اولیه عملکرد SetLayeredWindowAttributes به این شکل است:

مجموعه BOOLLayeredWindowAttributes (HWND hwnd ،

COLORREF crKey ،

BYTE bAlpha ،

DWORD dwFlags);

مرحله 5

پارامتر hwnd به تابع باید یک دستگیره پنجره معتبر باشد که در مرحله اول بدست آمده است. پارامتر crKey یک کلید رنگی است که برای تعریف مناطق نیمه شفاف استفاده می شود. پارامتر bAlpha مقدار شفافیت را مشخص می کند. با مقدار پارامتر bAlpha برابر با 0 ، مناطق "نیمه شفاف" کاملاً شفاف خواهند بود. اگر پارامتر bAlpha 255 باشد ، کاملاً مات خواهند بود. پارامتر dwFlags حالت نمایش بیشتر محتوای پنجره را تعیین می کند. وقتی پرچم LWA_COLORKEY در مقدار dwFlags گنجانده شود ، مناطق نیمه شفاف پنجره بر اساس کلید رنگ تعیین می شود. وقتی پرچم LWA_ALPHA فعال باشد ، از پارامتر bAlpha برای تعیین مقدار شفافیت استفاده می شود.

مرحله 6

برای نیمه شفاف بودن کل پنجره ، با SetLayeredWindowAttributes با مقدار پارامتر bAlpha ترجیح داده شده ، پرچم LWA_ALPHA ، اما بدون پرچم LWA_COLORKEY تماس بگیرید. از دسته پنجره یافت شده به عنوان اولین پارامتر برای عملکرد استفاده کنید. به عنوان مثال ، برای شفاف سازی یک پنجره ، از تماس استفاده کنید:

:: SetLayeredWindowAttributes (hWnd، RGB (0، 0، 0)، 128، LWA_ALPHA)؛

توصیه شده: