በግራፊክ ማሳያ ቴክኖሎጂዎች መሻሻል ፣ የስርዓተ ክወናዎች ኤ.ፒ.አይ.ም እንዲሁ ተሻሽሏል ፣ መደበኛ ያልሆኑ በይነገጽ አባሎችን ለማዳበር ለፕሮግራም አውጪዎች ብዙ እና ብዙ ዕድሎችን ይሰጣል። ስለዚህ ከዊንዶውስ 2000 ኦፐሬቲንግ ሲስተም ፈጠራዎች አንዱ የተደረደሩ መስኮቶች ነበሩ ፣ የእነዚያ ክፍሎች ግልጽ ሊሆኑ ይችላሉ ፡፡ ብዙም ሳይቆይ ፣ ከተደረደሩ መስኮቶች ጋር ለመስራት የኤ.ፒ.አይ. መግለጫ በ MSDN ላይ ተገኘ ፡፡ ሆኖም በፕሮግራም አውጪዎች መድረኮች ላይ የመስኮት ከፊል-ግልፅነት እንዴት እንደሚሰራ ጥያቄዎች አሁንም እየተጠየቁ ናቸው ፡፡
አስፈላጊ
- - አጠናቃሪ;
- - windows sdk ወይም ማዕቀፍ ለዊንዶውስ ፕሮግራም ፡፡
መመሪያዎች
ደረጃ 1
ከፊል-ግልፅ ለማድረግ ወደሚፈልጉት መስኮት አንድ እጀታ ያግኙ ፡፡ መስኮት ይፈልጉ ወይም ይፍጠሩ። እሱን ለመፍጠር ፣ የ “CreateWindow” ፣ “CreateWindowEx” ኤፒአይ ተግባራትን ወይም በእነዚህ የተጠቀሙባቸው ማዕቀፍ ክፍሎች ውስጥ ባሉ በእነዚህ ተግባራት ዙሪያ መጠቅለያ ዘዴዎችን ይጠቀሙ ፡፡ ለፈጠራ ዊንዶውስ ተግባር ምሳሌው ይህን ይመስላል
HWND ፍጠር ዊንዶውስ (LPCTSTR lpClassName ፣
LPCTSTR lpWindowName ፣
DWORD dwStyle ፣
int x, int y, int nWidth ፣
int n ቁመት ፣
HWND hWndParent, HMENU hMenu, HINSTANCE h ኢንሴንስ ፣
LPVOID lpParam);
እንደሚመለከቱት ተግባሩ እንደ አፈፃፀም ውጤት እጀታውን ወደ ተሰራው መስኮት ይመልሳል ፡፡ ማንኛውም የጥቅል ክፍል ጥቅም ላይ ከዋለ መያዣውን ለማግኘት ከተፈጠረው መስኮት ጋር በሚዛመደው ነገር ላይ የእሱን ዘዴዎች ይጠቀሙ ፡፡
ደረጃ 2
መስኮት መፈለግ የኤፒአይ ጥሪዎችን በመጠቀም FindWindow ፣ FindWindowEx ፣ EnumWindows ፣ EnumChildWindows ፣ EnumThreadWindows እና ጥምረቶቻቸውን በመጠቀም ሊከናወን ይችላል። የ WindowFromPoint እና ChildWindowFromPoint ተግባራትን በመጠቀም በአንድ የተወሰነ ክልል ውስጥ ወደ አንድ መስኮት አንድ እጀታ ማግኘት ይችላሉ ፡፡
ደረጃ 3
መስኮቱን ለተራዘመው ቅጥ WS_EX_LAYERED ያቀናብሩ። የ SetWindowLong ኤ.ፒ.አይ. ወይም የጥቅል ዕቃዎች ተጓዳኝ ዘዴዎችን ይጠቀሙ። የ SetWindowLong ተግባር ሊለወጥ የሚችል የመስኮት መለኪያ መረጃን ሙሉ በሙሉ ይተካዋል ፣ ስለሆነም ለቅጥ ባንዲራዎች ስብስብ የቀደመውን እሴት ለማግኘት ከ GetWindowLong ተግባር ጋር በማጣመር ይጠቀሙበት። ለምሳሌ ፣ ዘይቤው እንደዚህ ሊለወጥ ይችላል-
:: SetWindowLong (hWnd, GWL_EXSTYLE,:: GetWindowLong (hWnd, GWL_EXSTYLE));
በቀዳሚው ደረጃ ላይ የተገለጹትን ድርጊቶች በመፈፀም እዚህ የ hWnd የመስኮት እጀታ ይገኛል ፡፡
ደረጃ 4
መስኮቱን በከፊል-ግልፅ ያድርጉት። የ “SetLayeredWindowAttributes” ኤፒአይ ወይም የጥቅል ክፍሎች ዘዴዎችን ይጠቀሙ። የ “SetLayeredWindowAttributes” ተግባር የመጀመሪያ ንድፍ ይህን ይመስላል
BOOL SetLayredWindowAttributes (HWND hwnd ፣
ኮሎሬፍ ክሬይ ፣
ባይት አልፋ ፣
DWORD dwFlags);
ደረጃ 5
የተግባሩ የ hwnd ግቤት በመጀመሪያ ደረጃ የተገኘ ትክክለኛ የመስኮት እጀታ መሆን አለበት። ክሪኬይ መለኪያው በከፊል ግልጽነት ያላቸውን አካባቢዎች ለመለየት የሚያገለግል የቀለም ቁልፍ ነው ፡፡ የ “አልፋ” ልኬት የልዩነት እሴትን ይገልጻል። ከ 0 ጋር እኩል በሆነ የ ‹አልፋ› ግቤት እሴት ፣ “ከፊል-ግልፅነት” ያላቸው አካባቢዎች ሙሉ በሙሉ ግልጽ ይሆናሉ። የባልፋ ልኬት 255 ከሆነ እነሱ ሙሉ በሙሉ ግልጽ ያልሆኑ ይሆናሉ። የ dwFlags መለኪያ የመስኮቱን ይዘቶች ተጨማሪ የማሳያ ሁነታን ይወስናል። የ LWA_COLORKEY ባንዲራ በ dwFlags እሴቱ ውስጥ ሲካተት ፣ የመስኮቱ አንጸባራቂ አካባቢዎች በቀለሙ ቁልፍ መሠረት ይወሰናሉ። የ LWA_ALPHA ባንዲራ ሲነቃ የ “አልፋ” ልኬት የትርጓሜ እሴትን ለመለየት ጥቅም ላይ ይውላል።
ደረጃ 6
አጠቃላይ መስኮቱን ከፊል-ግልፅ ለማድረግ SetLayeredWindowAttribites ን በተመረጠው የ ‹አልፋ› መለኪያ እሴት ፣ በ LWA_ALPHA ባንዲራ ይደውሉ ፣ ግን የ LWA_COLORKEY ባንዲራ የላቸውም ፡፡ የተገኘውን የመስኮት እጀታ እንደ ተግባሩ የመጀመሪያ መለኪያ ይጠቀሙ ፡፡ ለምሳሌ ፣ የመስኮቱን ግማሽ ግልፅ ለማድረግ ጥሪውን ይጠቀሙ:
:: SetLayeredWindowAttributes (hWnd, RGB (0, 0, 0), 128, LWA_ALPHA);