Kilka pytań odnośnie programowania obiektowego.

0

Witajcie, liznąłem c++ w okienku, chciałbym pójść kawałek dalej i przejść na obiektówkę, tylko którą najlepiej wybrać?

Stworzyłem w okienku program, który będzie przesuwał myszkę w winampie i uruchamiał wybraną piosenkę, lecz działam jakby po "mojej stronie", w trakcie działania programu nie mogę ruszyć myszką ani zakończyć programu, gdy ustawię więcej kliknięć.
Czy można zrobić tak, że w tle będą leciały piosenki ustawione przez mój program bez ingerencji mojej myszki? Jakby podpięcie się pod winampa?

Czy WinApi to będzie dobrym wyborem? Czy może tracę na niego czas? Chciałbym zostać przy C++ bo trochę już przy nim spędziłem czasu (konsola).
I czym najlepiej się zainteresować, żeby osiągnąć owy efekt?

Aktualnie przerabiam cpp0x i inne blogi po WinAPI.
Jestem początkującym programistą, jestem na tym forum pierwszy raz, liczę na wyrozumiałość.

5

Najlepszym wyborem dla okienkowego C++ jest bezsprzecznie Qt, które jest nowoczesnym i dynamicznie rozwijanym frameworkiem. Inne nie mają startu.

WinAPI można sobie darować, nie te czasy.

4
Program1 napisał(a):

Stworzyłem w okienku program, który będzie przesuwał myszkę w winampie i uruchamiał wybraną piosenkę, lecz działam jakby po "mojej stronie", w trakcie działania programu nie mogę ruszyć myszką ani zakończyć programu, gdy ustawię więcej kliknięć.

A to nie możesz sobie zwykłej playlisty zrobić? Będziesz miał ustalone utwory w odpowiedniej kolejności i Winamp je będzie odtwarzał – po to one istnieją.

Czy można zrobić tak, że w tle będą leciały piosenki ustawione przez mój program bez ingerencji mojej myszki?

Tak, do tego służą playlisty.

Jakby podpięcie się pod winampa?

Można wysyłać komunikaty do okien, ale wybieranie konkretnego utworu oznacza pośrednie otwarcie okna Jump to file. IMO takie kombinacje nie mają sensu – wyżej napisałem dlaczego.

Czy WinApi to będzie dobrym wyborem? Czy może tracę na niego czas?

Zależy w jakim sensie – pisanie aplikacji w gołym WinAPI nie ma sensu, bo jest trudne i czasochłonne. Natomiast korzystanie z funkcji z systemowych bibliotek nie jest niczym nadzwyczajnym.


Przy okazji – Winamp został reaktywowany i według zapowiedzi, w przyszłym roku pojawi się nowa wersja. :)

0

Zaufam Ci Grzesiek i poczytam o tym Qt, więc odpuszczę sobie dalsze czytanie o WinApi. Ogólnie to w Qt można w praktyce osiągnąć te same rzeczy co w WinApi?

Furious załóżmy, że mam już otwarte okno, nie przeszkadza mi to, można później zminimalizować. Podasz mi jakieś słowa kluczowe czego mam się uczyć, żeby te komunikaty wysyłać do poszczególnych utworów? Wolę się pobawić nawet jeśli to głupie, przynajmniej mam jakiś cel pisania czegoś, a tak to brak motywacji:)

0

Ogólnie to w Qt można w praktyce osiągnąć te same rzeczy co w WinApi?

Zazwyczaj tak i jest to dużo prostsze, ponieważ Qt jest w pełni obiektową biblioteką z wszystkimi jej nowoczesnymi cechami vide drzewko dziedziczenia od wspólnej klasy QObject etc.

Nie należy jednakowoż zapominać, że to wciąż C++ z masą osobliwości. :-)

@Program1:

liznąłem c++ w okienku
Podasz mi jakieś słowa kluczowe czego mam się uczyć, żeby te komunikaty wysyłać do poszczególnych utworów?

Jeżeli nie poznałeś podstaw języka, a chcesz uczyć się go od razu na cięższych przypadkach to z góry mówię, że nie tedy droga.

0

Ok, to się skupie na poradnikach jakiś, builder c++ wystarczy? czy jakies inne środowisko polecasz lepsze?

3

Polecam QtCreator oraz dobrą książkę do C++.

Inaczej polegniesz; C++ jest tylko pozornie łatwym językiem.

0

Ok, dziękuję Wam za odpowiedzi, do usłyszenia za jakiś czas :)

1
Program1 napisał(a):

Furious załóżmy, że mam już otwarte okno, nie przeszkadza mi to, można później zminimalizować.

Nie wiem czy zrozumiałeś o co chodzi.

Jeśli Twoja aplikacja ma wybrać utwór, to musi wysłać do okna Winampa komunikat wciścięcia klawisza J, bo ten odpowiada za pokazanie listy wszystkich utworów z możliwością ich filtrowania. Następnie musiałby wysłać tekst do odpowiedniego pola edycyjnego, tak aby wypełnić to pole konkretnym tytułem utworu. Na koniec wysłanie komunikatu wciścięcia klawisza Enter, bo tak wybiera się zaznaczony utwór. Jak widzisz jest trochę roboty, a do tego dochodzi jeszcze aktywowanie i podbijanie okien odtwarzacza na ekranie i to samo dla okna, które było aktywne tuż przed całym procesem zmiany utworu.

Problem w tym, że w momencie gdy Twój program przełączałby utwór, obecnie aktywne okno w systemie (program w którym akurat coś robiłeś, np. przeglądarka) traciłaby focusa. Jeśli byś w tym czasie grał czy pisał, to komunikaty o wciskanych klawiszach nie leciałyby do okna przeglądarki, a do okna aktywowanego przez Twoje narzędzie, czyli do okna Jump to file. Wszedłbyś swojemu programowi w paradę, przez co mógłby wybrać zły utwór lub nie wybrać go wcale. Problem byłby także z określeniem kiedy wybrać utwór – w końcu każdy ma inną długość.

Ogólnie to rozwiązanie nie jest jakoś szczególnie trudne, ale wzamian jest wadliwe i może przeszkadzać w normalnym używaniu komputera (już nie mówiąc o wnerwiającym efekcie migania na ekranie okna do wyboru utworu).

Podasz mi jakieś słowa kluczowe czego mam się uczyć, żeby te komunikaty wysyłać do poszczególnych utworów?

Nie do utworów – komunikaty wysyła się do okien. Przy czym mianem okna określa się nie tylko wizualne okienka, ale też wszelkie osadzone kontrolki posiadające uchwyt, np. przyciski, pola edycyjne, listy itd.

Wolę się pobawić nawet jeśli to głupie, przynajmniej mam jakiś cel pisania czegoś, a tak to brak motywacji:)

Wolałbym abyś napisał sobie plugin do tego odtwarzacza, bo w ten sposób miałbyś bezpośredni dostęp do jego funkcjonalności. Tyle że nie pisałem jeszcze takich pluginów, więc niezbyt wiele miałbym tutaj do powiedzenia, a po drugie, w dalszym ciągu nie ma to sensu, bo w zupełności wystarczy Ci własna playlista.

Jeśli jednak mimo wszystko chcesz się pobawić, to musisz poczytać o enumeracji okien i osadzonych komponentów, wysyłaniu komunikatów do okien i imitowaniu wciskania klawiszy z poziomu kodu. W Google znajdziesz mnóstwo przykładów i objaśnień, a także dużo gotowców.

3

Co do tego Winampa.
Popatrz jakie dowiązania do menu kontekstowego zrobił sobie Winamp. Sprawdź co się dzieje gdy klikasz na mp3.
To ci wystarczy by potem wywołać Winamp z odpowiednimi parametrami i zrobić z nim wiele praktycznych rzeczy, bez kombinowania z myszką.
To będzie tak proste, że można zrobić w zwykłym pliku bat.

0

Ok, dziękuje za wszystkie wskazówki. Szukam na razie materiałów do nauki. Mam nadzieję, że nie odpuszczę za szybko.

Edit: Przepraszam za natręctwo, jestem bardzo niezdecydowany. Przeszukując internet od dwóch dni doszedłem do wniosku, że bardzo mało jest poradników w języku polskim. Może i po angielsku bym sobie poradził, ale na pewno by zrozumienie zajęło więcej czasu.

Dlatego mam do Was parę pytań o język Python. Ucząc się tego języka nie będę się w jakikolwiek sposób ograniczał niżeli bym miał uczyć się c++ Qt?
W tym języku będę miał spore pole do popisu w aplikacjach pod Windowsa?
Czy język konsolowy różni się od obiektowego tak jak to jest w c++ (ucząc się konsoli znamy podstawy, jednak trzeba się poleceń uczyc od nowa w obiektówce)?
Jeśli to by był dobry wybór, to lepiej zacząć od konsoli czy iść od razu na obiektówkę?
I na koniec, jakie środowisko najlepiej wybrać?
Wybrałem ten język, a nie inny ze względu na dużą ilość materiałów do nauki jak i rzekomą prostotę w pisaniu programów.

3

Nie ma czegoś takiego jak język Konsolowy. Python jest językiem wieloparadygmatowym, podobni jak C++, różni ich to, że Wąż jest interpretowany, natomiast C++ kompilowany[no nie tylko to, ale głównie].

Prościej według mnie jest pisać okienka z Qt/C++ niż z Pythonem, ale z drugiej strony - Qt wspiera Pythona[na ile? nie wiem, nie korzystam].

Proponuję na start wziąć dobrą książkę do jakiegokolwiek języka i usystematyzować pojęcia. Obiektowy != Okienkowy.

2
Tenonymous napisał(a):

Nie ma czegoś takiego jak język Konsolowy. Python jest językiem wieloparadygmatowym […]

Tu już nawet nie chodzi o mnogość paradygmatów, a o nierozróżnianie języka programowania od środowiska uruchomienia. Program może działać w środowisku konsolowym, okienkowym lub w ”żadnym”, czyli nie posiadać interfejsu i wizualnie nie dawać o sobie znać użytkownikowi (np. usługa).

0

Wow. Ktoś jeszcze używa Winampa XD

Ale Winamp nie ma przypadkiem jakiegoś swojego api do wtyczek?

Czy język konsolowy różni się od obiektowego tak jak to jest w c++
(ucząc się konsoli znamy podstawy, jednak trzeba się poleceń uczyc od nowa w obiektówce)?

Mieszasz pojęcia. Obiektowość to nie jest kwestia ani wyglądu (konsolowa apka też może być napisana w sposób obiektowy) ani tego jakie jest API (a w szczególności WinAPI jest (a przynajmniej było ileś lat temu, kiedy z tego ostatni raz korzystałem) proceduralnym API, przynajmniej pod kątem tego, jak to się obsługiwało. Bo koncepcyjnie w pewnym sensie jest tam obiektówka (wszystko jest oknem, a okna są obiektami do których można wysyłać komunikaty - czyli czysta obiektówka. No i polimorfizm w postaci nadpisywania "procedury okna").

No tylko, że na poziomie implementacji obsługiwało się to jednak w sposób proceduralny.

1 użytkowników online, w tym zalogowanych: 0, gości: 1