Πώς να κάνετε ένα παράθυρο ημιδιαφανές

Πίνακας περιεχομένων:

Πώς να κάνετε ένα παράθυρο ημιδιαφανές
Πώς να κάνετε ένα παράθυρο ημιδιαφανές

Βίντεο: Πώς να κάνετε ένα παράθυρο ημιδιαφανές

Βίντεο: Πώς να κάνετε ένα παράθυρο ημιδιαφανές
Βίντεο: Πως Να Κάνεις Το Πληκτρολόγιο Σου Πραγματικά Όμορφο 2024, Νοέμβριος
Anonim

Με τη βελτίωση των τεχνολογιών απεικόνισης γραφικών, το API των λειτουργικών συστημάτων βελτιώθηκε επίσης, παρέχοντας στους προγραμματιστές περισσότερες και περισσότερες ευκαιρίες για την ανάπτυξη μη τυπικών στοιχείων διεπαφής. Έτσι, μία από τις καινοτομίες του λειτουργικού συστήματος Windows 2000 ήταν τα παράθυρα με στρώσεις, τμήματα των οποίων θα μπορούσαν να είναι ημιδιαφανή. Σύντομα, μια περιγραφή του API για εργασία με πολυεπίπεδη παράθυρα έγινε διαθέσιμη στο MSDN. Ωστόσο, σε φόρουμ προγραμματιστών, ερωτήσεις σχετικά με το πώς να κάνετε ένα παράθυρο ημιδιαφανές εξακολουθούν να τίθενται.

Πώς να κάνετε ένα παράθυρο ημιδιαφανές
Πώς να κάνετε ένα παράθυρο ημιδιαφανές

Απαραίτητη

  • - μεταγλωττιστής
  • - windows sdk ή πλαίσιο για προγραμματισμό παραθύρων.

Οδηγίες

Βήμα 1

Πάρτε μια λαβή στο παράθυρο που θέλετε να κάνετε ημιδιαφανές. Βρείτε ή δημιουργήστε ένα παράθυρο. Για να το δημιουργήσετε, χρησιμοποιήστε είτε τις συναρτήσεις CreateWindow, CreateWindowEx API ή τις μεθόδους περιτύλιξης γύρω από αυτές τις συναρτήσεις που ανήκουν στις κλάσεις του χρησιμοποιημένου πλαισίου. Το πρωτότυπο για τη συνάρτηση CreateWindow μοιάζει με αυτό:

HWND Δημιουργία παραθύρου (LPCTSTR lpClassName, LPCTSTR lpWindowName, DWORD dwStyle, int x, εντ, int nWidth,

int nHeight, HWND hWndParent, HMENU hMenu, ΕΝΙΣΧΥΣΗ

LPVOID lpParam);

Όπως μπορείτε να δείτε, η συνάρτηση επιστρέφει μια λαβή στο παράθυρο που δημιουργήθηκε ως αποτέλεσμα της εκτέλεσης. Εάν χρησιμοποιείται τάξη περιτυλίγματος, χρησιμοποιήστε τις μεθόδους της στο αντικείμενο που αντιστοιχεί στο παράθυρο που δημιουργήθηκε για να πάρετε τη λαβή.

Βήμα 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));

Εδώ βρίσκεται η λαβή παραθύρου ως αποτέλεσμα της εκτέλεσης των ενεργειών που περιγράφονται στο προηγούμενο βήμα.

Βήμα 4

Κάντε το παράθυρο ημιδιαφανές. Χρησιμοποιήστε το API SetLayeredWindowAttributes ή μεθόδους των τάξεων περιτυλίγματος. Το πρωτότυπο της συνάρτησης SetLayeredWindowAttributes μοιάζει με αυτό:

BOOL SetLayeredWindowAttributes (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);

Συνιστάται: