Przeglądarka graficzna w C++

Przeglądarka graficzna w C++
mbar254
  • Rejestracja:około 14 lat
  • Ostatnio:około 10 lat
  • Postów:47
0

Witajcie.

Jako projekt z programowania mam do napisania przeglądarkę graficzną, która dodatkowo dawałaby możliwość manipulowania obrazami przy pomocy Windows Animation Manager. Prowadzący zajmuje się głównie programami pod Windowsa, dlatego też pomyślałem o WinAPI, chociaż wiem, że nie jest ono przyjemne. Chciałbym, aby przeglądarka ta miała możliwość wyświetlania w oknie miniatur obrazków z danego folderu i po kliknięciu np. płynne rozszerzanie czy inne bajery (nie czytałem jeszcze o windows animation manager, więc nie wiem jakie mam możliwości). Zastanawiam się w czym jeszcze/przy pomocy jakich bibliotek mógłbym napisać taką aplikację. Moglibyście może podpowiedzieć?

Proszę o poważne podejście, gdyż do tej pory napisałem tylko 1 aplikację okienkową (w WinAPI).

vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
0

Daj znać jak Ci się uda, będziesz pierwszym kogo poznam kto programuje w WinAPI i nie jest to ASM...

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

nie wyglupiaj się, mamy rok 2013, użyj czegoś normalnego jak Qt


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
MA
  • Rejestracja:ponad 15 lat
  • Ostatnio:ponad 10 lat
0

Dokładnie. A jak bardzo chcesz coś wybitnie to .NET. Zlituj się. Nie pisz w Winapi...


Zero litości dla nieróbstwa.
Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

Ja mogę zrozumieć ze niskopoziomową komunikację z RS232 czy USB chcesz robić w WinAPI, ale jak chcesz napisać przeglądarkę grafik z jakimś normalnym GUI to zlituj się nad sobą i swoim czasem i wykorzystaj gotowe istniejące narzędzia. To jest jedyna ludzka porada jaką można komuś zaserwować. Poważnie chcesz korzystać z technologii która jest starsza od ciebie?
Czekam na twój następny temat gdzie będziesz pytał o hinty dotyczące pisania w kodzie maszynowym bo asembler ci się nie podoba :)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
mychal
E tam. Ja 2 semestry temu na zaliczenie pisałem warcaby sieciowe w WinAPI(obsługa sieci, GUI, wątki, procesy, pliki itp - wymóg prowadzącego) i mogę powiedzieć, że taki projekt zbliża zespół :). Mogę nawet powiedzieć, że z czasem wszystko stało się logiczne i w miarę przyjemne.
MA
Ta technologia okazała się na tyle dobra że przetrwała do dziś :) Jej wadą jest prostota i dużo rzeczy w niej po prostu nie ma. Wiele poważnych programów zostało napisanych na bazie samego WinApi. Zwykle w firmach pisano własne biblioteki oparte tylko na WinApi, a następnie na bazie tych bibliotek powstawały takie aplikacje photoshop. Zwróć uwagę, że WinApi działało na komputerach z procesorem 486 50MHz i 16Mb RAM, a na tym śmigał Corel. Nie pozwolę powiedzieć nic złego na WinApi.
Shalom
W asemblerze też pisano wiele programów i bibiliotek i też przetrwał do dziś. Ale to nie znaczy że nalezy w nim teraz pisać aplikacje z GUI ;] Da się, oczywiście, tylko że znacznie większym kosztem czasowym.
MA
Jeśli mowa o aplikacji która wykorzystuje tylko takie komponenty które są w WinApi to nakład czasowy jest zbliżony. Jeśli wykorzystuje więcej to cóż... same komponenty się nie napiszą.
Azarien
zauważcie, że Windows jest napisany w WinAPI ;-) /i miejscami w MFC/
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1

A co myślicie o połączenia MFC i WinAPI w Visual C++? Znalazłem książkę, która to opisuje, ale o MFC nie mam zielonego pojęcia.

AFAIK z WinAPI korzysta się tylko w zagadnieniach poza-okienkowych - zarządzanie procesami, rejestr, schowek.
MFC nie jest dowstępne w wersji Express.
Sam Microsoft chyba ucieka z tej technologii - dlaczego Ty chcesz się w nią pchać?
Jeśli robisz GUI to zrób to w Qt lub ew. wxWidgets.

Zobacz pozostałe 3 komentarze
Azarien
@mariotti: MFC ma pewien sens: próba samodzielnego opakowania tego niby-obiektowego WinAPI w klasy powoduje i tak powstanie czegoś udającego MFC – więc po co ciosać koło od nowa :) Natomiast trzeba pamiętać, że MFC to jest rzeczywiście cienki wrapper na WinAPI, w przeciwieństwie do kombajnów w stylu Qt.
MA
Można opakować w klasy tak, żeby potem łatwiej się używało. Czy łatwo się używa MFC? Spróbujcie napisać w MFC ręcznie jakąś aplikację bez wizarda. Gdy programowałem w WinApi to używałem swoich klas i programowało się podobnie jak w QT. Oczywiście nie miałem takiej dużej ilości wraperów jak w QT...
vpiotr
Zabawa z WinAPI kończy się gdy masz zrobić ładny wykres lub komponent do planowania zadań w czasie krótszym niż pół roku.
Azarien
tak się składa, że robiłem ostatnio okienko w MFC bez wizarda ;-) ale tylko w zakresie otwarcia okna i obsłużenia myszy/klawiatury. środek okna był rysowany w DirectDraw /tak tak, wiem że jest „deprecated” ;-)/
MA
vpiotr: wszędzie gdzie nie ma gotowego klocka "zabawa się kończy". jeśli klocek jest i w winapi i w qt, to nakład pracy jest podobny. Odpikslowanie komponentu do planowanie zadań w qt też jest pracochłonne.
MA
  • Rejestracja:około 12 lat
  • Ostatnio:prawie 12 lat
  • Postów:49
1
mbar254 napisał(a):

Witajcie.

Jako projekt z programowania mam do napisania przeglądarkę graficzną, która dodatkowo dawałaby możliwość manipulowania obrazami przy pomocy Windows Animation Manager. Prowadzący zajmuje się głównie programami pod Windowsa, dlatego też pomyślałem o WinAPI, chociaż wiem, że nie jest ono przyjemne. Chciałbym, aby przeglądarka ta miała możliwość wyświetlania w oknie miniatur obrazków z danego folderu i po kliknięciu np. płynne rozszerzanie czy inne bajery (nie czytałem jeszcze o windows animation manager, więc nie wiem jakie mam możliwości). Zastanawiam się w czym jeszcze/przy pomocy jakich bibliotek mógłbym napisać taką aplikację. Moglibyście może podpowiedzieć?

Proszę o poważne podejście, gdyż do tej pory napisałem tylko 1 aplikację okienkową (w WinAPI).

W WinApi pisze się bardzo przyjemnie i tak samo szybko jak w innych środowiskach. Napisałem wiele
aplikacji na bazie winapi. Samo w sobie WinApi jest bardzo dobre. Niestety WinApi udostępnia tylko
podstawowy zestaw komponentów i trudno jest znaleźć takie komponenty. Generalnie ja rzeźbiłem
wszystko od podstaw, rzadko mogłem zakupić komponent do ponownego użycia. W dodatku nie powstało
dedykowane środowisko RAD do programowania w WinApi, trzeba klepać wszystko ręcznie, można się
jedynie wspomagać prościutkim edytorem zasobów w Visual Studio. Podsumowując, to prosty zestaw
komponentów i procedur, ale bardzo dobry i przyjemnie się w tym pisze.


Pozdrawiam
edytowany 1x, ostatnio: mariotti
Zobacz pozostałe 5 komentarzy
MA
Nie używam "komponenty w winapi" jako jakiegoś pojęcia z terminologii winapi - chyba takie nie istnieje nawet. Używam tego jako ogólnego określenia. Komponent, czyli: klocek, półfabrykat, procedura, biblioteka, obiekty na bazie WNDCLASS, itd.
Azarien
@ŁF: nie ma przeszkód, by napisać (kupić, ukraść) DLL-kę, która udostępnia nowe kontrolki w WinAPI, tak jak to robi systemowa biblioteka comctl32.dll z kontrolkami standardowymi.
ŁF
@Azarien - oczywiście, ale to już nie winapi, tylko dodatkowa biblioteka.
Azarien
@ŁF: w ten sposób rozumując, to w żadnej bibliotece nie ma dodatkowych komponentów, bo "to już nie Qt, tylko dodatkowa biblioteka".
ŁF
możesz mi wytłumaczyć Twój tok rozumowania, bo trochę nie nadążam?
byku_guzio
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 7 lat
1

To chyba nigdy nie pisałeś w niczym poza WinAPI. Robienie w tym czegoś większego od okna dialogowego to koszmar. Nie mówiąc już, że sensowne zaprojektowanie aplikacji korzystającej bezpośrednio z WinAPI jest raczej trudne.

WinAPI to nie zestaw komponentów tylko pełne API systemu(strukturalne). Oferuje bardzo niski poziom abstrakcji, wymaga bardzo dużej ilości kodu w celu realizacji najprostszych funkcjonalności.
Jedynym argumentem za tworzeniem okienek bezpośrednio w WinAPI jest konieczność zrobienia czegoś bardzo nietypowego(ale nic takiego, czego nie dałoby się zrealizować w sensowniejszych narzędziach, nie przychodzi mi do głowy).


MA
Trzeba mieć wprawę, jak ktoś nie zna, to pewnie że jest koszmarem zrobienie jednego okienka. Podobnie uwaga z projektowaniem: jak ktoś nie umie zrobić dobrego projektu, to nie zrobi w żadnym środowisku. Gdy chcesz zrobić coś niestandardowego, to w QT też musisz rysować pixel po pixelu i lecą całe doby na kodowanie. Po prostu WinApi udostępnia mało gotowych elementów, ale tutaj dużo nie potrzeba.
mbar254
  • Rejestracja:około 14 lat
  • Ostatnio:około 10 lat
  • Postów:47
0

Zdecydowałem się wstępnie na Qt. Prosiłbym o podesłanie kilku tutoriali do GUI w Qt, które Waszym zdaniem zawierają najwięcej informacji. Mam już kilka, ale nadal szukam (im więcej tym lepiej).

MA
Na stronie QT jest ogromy zestaw przykładów. Poza tym z qtcreatorem instaluje się baza przykładów.
MA
Ta książka z amazonu przestarzała już. Lepiej nie kupować. Świeże informacje tylko na stronie QT.
n0name_l
najswiezsza nie jest, ale jak ktos woli ksiazki to jedna z nielicznych.
MA
Książek trochę jest, ale one szybko tracą wartość. Czasami w chwili wydania są już nieaktualne.
vpiotr
  • Rejestracja:ponad 13 lat
  • Ostatnio:prawie 3 lata
1
mariotti napisał(a):

W dodatku nie powstało
dedykowane środowisko RAD do programowania w WinApi, trzeba klepać wszystko ręcznie, można się
jedynie wspomagać prościutkim edytorem zasobów w Visual Studio.

Powstało - ale dla C:
Pelles C - http://www.smorgasbordet.com/pellesc/

MA
Faktycznie, wygląda nawet przyjemnie, ciekawe jakiej jest jakości.
vpiotr
Niewiele o nim wiem, bo w C nie programuję jeśli nie muszę.
Azarien
wygląda interesująco, dzięki za linka ;-)
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:2 minuty
2

Wyrażę trochę inne zdanie niż większość odpowiadających ;-)
Jeśli już masz użyć Windows Animation Manager, czyli i tak w zasadzie części WinAPI, można by się tego właśnie trzymać, i pokazać co rzeczywiście da się zrobić w WinAPI, bez użycia zewnętrznych bibliotek. Tak na pokaz, by udowodnić że się da ;-)

Mam tu na myśli głównie użycie Windows Imaging Component do ładowania plików graficznych, a do wyświetlania – Direct2D/Direct3D albo GDI+.

W ten sposób napisać aplikację, która będzie w 100% korzystała z API Microsoftu.

W dzisiejszych Windowsach wbudowanych jest naprawdę bardzo dużo różnych gotowych bibliotek. Wiem że tworzenie GUI w WinAPI do przyjemnych nie należy, ale zapomina się o całej reszcie (albo nie wie o istnieniu). Przykład? załóżmy, że pada na forum pytanie, jak odegrać muzykę MP3. pytający dostaje w odpowiedzi użycie zewnętrznych bibliotek jak FMOD czy BASS - ściąga ja, instaluje, kompiluje...
...a wystarczyłby 5-linijkowy przykład użycia DirectShow.
To tylko przykład, ale naprawdę polecam poczytanie dokumentacji Microsoftu (a zaczęcie od spisu treści) żeby chociaż wiedzieć, jakie API są w Windows dostępne.

edytowany 2x, ostatnio: Azarien
MA
Zgadzam się, ale ja nie widzę w tym nic nieprzyjemnego. Robota programistyczna jak każda inna.
byku_guzio
Jak się zna WinAPI to można tam wyprawiać cuda na kiju ;) Do tego API z DirectX i można naprawdę fajne rzeczy robić. Dlatego uważam, że WinAPI wypada poznać, ale nie koniecznie używać do pisania okienek.
MA
Ja pisałem aplikacje okienkowe. Pierwsza aplikacja to była męka.. z pół roku się uczyłem, to były czasy w których nie miałem internetu a co dopiero książkę czy dokumentację od API windowsa, wtedy jeszcze słabo znałem C/C++. Jednak gdy to przebrnąłem, czyli gdy byłem już po swojej pierwszej większej aplikacji w winapi, to robienie kolejnych szło gładko i szybko. Potem był petzold... Dużo kodu kopiowałem pomiędzy aplikacjami, potem miałem swoje kontrolki... podtrzymuję to co napisałem: gdy ma się doświadczenie, to idzie sprawnie.
mbar254
  • Rejestracja:około 14 lat
  • Ostatnio:około 10 lat
  • Postów:47
0

Zdecydowałem się jednak na Qt, chociaż nic w nim nigdy nie robiłem. Najwyższy czas nauczyć się chociaż podstaw. Chciałbym, aby przeglądarka wyglądała podobnie jak ta: user image.
Wiem już jak zrobić drzewo folderów, ale nie wiem jak wyświetlić miniaturki plików graficznych. Znalazłem jedynie sposób na wyświetlenie listy plików w listView. Czy da się to zrobić używając GraphicsView i ewentualnie jeśli możecie to podpowiedzcie jakie metody będą przydatne?

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
0

"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
mbar254
  • Rejestracja:około 14 lat
  • Ostatnio:około 10 lat
  • Postów:47
0

Tak, poważnie :P Nie każdy jest tak dobry jak Ty! Dzięki za linki, na pewno dużo pomogą.

n0name_l
podejrzewam, ze Shalom nie konczyl studiow dla detektywow, wiec kompetencje w szukaniu powinny byc w miare proporcjonalne.
mbar254
podejrzewam, ze Shalom zawodowo zajmuje się programowaniem i na pewno są dziedziny, w których nie umiałby zrobić najprostszej rzeczy. Po to jest forum, żeby można się było czegoś dowiedzieć...
n0name_l
przedstawie to bardziej obrazowo. Nie UMIEM zrobic pizzy, nie mam pojecia jak sie za nia zabrac, ani co musze kupic, wiec co robie? pytam na forum czy wpisuje w google "jak zrobic pizze"? Podpowiem, pierwszy link http://www.youtube.com/watch?v=sbMuO-5ke3c. Stad zapewne sie wzielo to "Ty tak na powaznie?".
mbar254
Zawsze zanim się zapytam wyszukuję rozwiązanie w googlach. A co jeśli nie wiesz jak dana rzecz się nazywa? Co wtedy wpisujesz? Jeśli nie masz nic konstruktywnego do przedstawienia, to po co się udzielasz? Chcesz się dowartościować? :D
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)