Koncept korisničkog sučelja u sustavu Windows temelji se na konceptu prozora. Dijalozi, gumbi, upravljačke ploče, popisi su svi prozori. Stoga, da biste izvršili bilo koju radnju s bilo kojim elementom sučelja vlastite ili tuđe aplikacije, morate nabaviti ručku prozora.
Potrebno
- - SDK paket platforme;
- - sastavljač.
Upute
Korak 1
Donesite kvaku do prozora tako što ćete je stvoriti. Uputi pozive funkcijama CreateWindow ili CreateWindowEx API ili pozovi odgovarajuće metode omota (na potrebnim objektima) klasa korištenog okvira ili biblioteke koje obuhvaćaju funkcionalnost rada s prozorima ili kontrolama. Funkcije CreateWindow i CreateWindowEx izravno vraćaju ručka prozora za uspješno stvaranje. Ako se neuspješno pozove, vraćaju NULL. Kôd razloga pogreške može se zatražiti pomoću funkcije GetLastError API. Prototipovi i detaljni opisi parametara funkcija CreateWindow i CreateWindowEx mogu se dobiti na poveznicama https://msdn.microsoft.com/en-us/library/windows/desktop/ms632679%28v=vs.85%29.aspx i https:// msdn.microsoft.com / en-us / library / windows / desktop / ms632680% 28v = vs.85% 29.aspx Kada se koriste klase različitih okvira, stvaranje objekata prozora operativnog sustava može se dogoditi ili eksplicitno (pozivanjem metode) ili implicitno (provedba RAII strategije). Stoga je bolje nabaviti kvaku prozora na gotovom inicijaliziranom objektu. O metodama klasa koje vraćaju kvaku prozora enkapsuliranu objektom možete naučiti u dokumentaciji odgovarajućeg okvira. Na primjer, u MFC-u je slična metoda GetSafeHwnd klase CWnd.
Korak 2
Dohvatite kvaku do prozora tražeći ga. Upotrijebite funkcije FindWindow i FindWindowEx API ili odgovarajuće omote predmeta klase za okvir koji koristite. FindWindow vraća ručicu u prozor najviše razine ako je pronađen ili NULL u slučaju neuspjeha. Pretraživanje se vrši prema nazivu klase i naslovu prozora. Opis parametara i aspekte funkcije možete pronaći na poveznici https://msdn.microsoft.com/en-us/library/windows/desktop/ms633499%28v=vs.85%29.aspx. funkcija FindWindowEx slična je FindWindowu s jedinom razlikom što traži podređene prozore. Dokumentacija za FindWindowEx dostupna je na
3. korak
Pronađite kvaku na prozoru dok popisujete njihove skupove. Koristite API funkcije EnumWindows, EnumChildWindows, EnumThreadWindows ili metode objekata klase okvira koji koristite. Funkcije EnumWindows i EnumChildWindows nabrajaju prozore najviše razine i podređene prozore. Funkcija EnumThreadWindows nabraja sve ne-podređene prozore navedene niti. Svakoj od ovih funkcija mora se proslijediti pokazivač na postupak povratnog poziva, koji će se ručicama pronađenog prozora prosljeđivati kao parametri tijekom rada. Kombinacijom funkcija popisivanja, dobivanjem i analizom svojstava prozora u postupku povratnog poziva možete pronaći ručicu potreban prozor. Dokumentacija za opisane funkcije dana je na poveznicama: - EnumWindows: https://msdn.microsoft.com/en-us/library/windows/desktop/ms633497%28v=vs.85%29.aspx; - EnumChildWindows: https:// msdn.microsoft.com/en-us/library/windows/desktop/ms633494%28v=vs.85%29.aspx; - EnumThreadWindows: https://msdn.microsoft.com/en-us/library / windows / desktop /ms633495%28v=vs.85%29.aspx.
4. korak
Nabavite kvaku do prozora na poznatim koordinatama. Funkcije WindowFromPoint, ChildWindowFromPoint, ChildWindowFromPointEx vraćaju ručke u prozore kojima pripada navedena točka. Funkcija WindowFromPoint najjednostavnija je za upotrebu, ali ne vraća ručke za skrivene ili onemogućene prozore. Dokumentaciju o njegovoj upotrebi možete pronaći na https://msdn.microsoft.com/en-us/library/windows/desktop/ms633558%28v=vs.85%29.aspx. Funkcije ChildWindowFromPoint i ChildWindowFromPointEx pronalaze ručke za dijete prozori datog nadređenog prozora koji pripadaju danoj točki. U tom se slučaju ponašanjem ChildWindowFromPointEx-a može fleksibilno kontrolirati pomoću dodatnog parametra. Dokumentacija za ove funkcije pruža se na vezama: - ChildWindowFromPoint: https://msdn.microsoft.com/en-us/library/windows/desktop/ms632676%28v=vs.85%29.aspx; - ChildWindowFromPointEx: https:// msdn.microsoft.com/en-us/library/windows/desktop/ms632677%28v=vs.85%29.aspx.