[C++] WinApi czy MFC

0

Chcialbym sprobowac napisac cos pod winde wiec mam pytanie: czy warto uczyc sie czystego WinApi (mam ksiazke "Programming Windows" Petzholda) czy moze MFC - jesli to drugie to moze znacie jakies kursy lub ebooki dla totalnie poczatkujacych?

0

I WinApi i MFC warto.
Coś o Winapi i MFC http://www.ultimategameprogramming.com/

0

W MFC można zrobić większość rzeczy dużo prościej i dużo szybciej. Sam aktualnie piszę aplikację w MFC i jak na razie dość dobrze mi idzie :D. Jako książkę polecam "MFC Czarna księga" - przeczytałem na razie tylko jeden rozdział, ale autor przekonał mnie, że MFC to dość fajna sprawa (szczegulnie przy większych projektach). Książka na pewno jest gdzieś w sieci w postaci rtf (po Polsku), bo właśnie taką czytałem.

Najwięcej z MFC nauczyłem się klepiąc na oślep różny kod, aż coś zadziałało (no może nie całkowicie na oślep :P). Zaglądanie do MSDN'a jest również wskazane.

0

MFC oczywisciej prosciej oraz szybciej. natomiast w winapi masz duzo wiecej mozliwosci. maz praktycznie pelna kontrole nad swoim programem. dla poczatkujacych polecam jednak MFC

0

MFC jest beznadziejne. M$ nie umie projektowac bibliotek. API nieintuicyjne, niezgodne z filozofia C++, wszedzie trzeba typecastowac, brak constraintsow do rozkladu kontrolek, niehierarchiczne definicje okien dialogowych, makrodefinicje do mapowania zdarzen zamiast slotow, .... itp. Moglbym tak dlugo wymieniac. Ogolnie do robienia interfejsow do d**, czyli 100 lat przed Murzynami jakby to powiedzial moj fizyk ze szkoly sredniej. No coz, ale to jest niestety jedyne rozwiazanie, jak ktos ma Visuala (jesli juz wydal te kase na licencje...).

Mozna sobie oczywiscie w WinAPI cos naskrobac, ale to juz jest kompletna porazka. 2 ekrany kodu, zeby glupie okienko otworzyc!!! 1000 razy lepiej i wygodniej jest pisac w Builderze / Delphi / Javie / wxWidgets / QT / GTK. Jak ktos sie nie zgadza, no to jeszecze pozostaje mu assembler - powodzenia.

Oczywiscie NALEZY sie nauczyc MFC i sprobowac chociaz ze 2 programy w czystym WinAPI napisac, zeby poznac co to za badziewie i nie probowac pozniej robic w tym duzych projektow. Polecam tylko, jesli komus naprawde zalezy na malym kodzie wynikowym (Ale komu zalezy na tych 200 kB???? Chyba tylko maniakom, ktorzy nigdy nic powaznego nie programowali, a pisza jedynie dla zabawy).

0

Anonim: Jesli masz wyskakiwac z takimi idiotycznymi tekstami, to sie nawet nie odywaj, jeszcze ktos wezmie sobie na powaznie to co wypisujesz. Ehh odezwal sie 'prawdziwy' programista.

PS. Te wszystkie wizualne nakladki na winapi, sa straszne i strasznie wolne. W ogole do d****, moje zdanie jest takie: pÓÓÓÓki nie musisz trzymaj sie z daleka! Co to za problem napisac sobie wrappera do winapi wedle wlasnych upodoban, widac ze kolega Anonim strasznym leniem jest, albo wzial sobie do serca to co mu koledzy 'z piaskowniky' powiedzieli.

0

MFC archaiczne? M$ nie umie projektować bibliotek? Całkiem ciekawa teoria :]

Jeżeli chodzi o "archaiczność" to w jakim języku/bibliotece widziałeś coś jak np. CDhtmlDialog lub CDhtmlView?

Wspominając o projektowaniu bibliotek, to nie widziałem nigdzie, żeby to było tak rozwiązane jak tutaj. Z początku jest ciężko, ale szybko można się dostosować. Makra do obsługi komunikatów są tłumaczono bardzo prosto. MFC może użyć obsługi komunikatu w prawie dowolnym miejscu (dokument, widok, aplikacja) a dodatkowo pozwala to na bardzo łatwe tworzenie własnych komunikatów. "Sloty na zdarzenia" rozumiem w Twoim znaczeniu jako metody klasy. Wiesz jakie TO jest kłopotliwe? Dla każdeko komunikatu Windows'a trzebaby było pisać w podstawowej klasie odpowiednią funkcję wirtualną i odpowiednio później ją przesłaniać. A co z własnymi komunikatami? Za pomocą makr wykorzystujesz tylko te komunikaty które chcesz.

Dodatkowo makra idealnie się sprawdzają do obsługi komunikatów wysyłanych z kontrolki web browser (w wypadku CDhtmlDialog). Dla przykładu, kod HTML:

<BUTTON STYLE="WIDTH:100" ID="Button1">OK</BUTTON>

obsłużony przez MFC wygląda tak (obsługa naciścnięcia BUTTON'a):

BEGIN_DHTML_EVENT_MAP(CMyDialog)
	DHTML_EVENT_ONCLICK(_T("Button1"), OnButton1)
END_DHTML_EVENT_MAP()

Zostaje wywołana metoda CMyDialog.OnButtonOK(IHTMLElement* /pElement/). Powiedz mi teraz Anonim jak w innym języku za pomocą "nowoczesnych" (jeżeli MFC jest "archaiczne") technik obsłużyłbyś taki banał?

Zanim Anonim będziesz wypowiadał się na temat MFC, lepiej je poznaj. Jeżeli nie potrafisz wykorzystać tej biblioteki (może jesteś za tępy? :p ) to Twój problem. Programiści na całym świecie używają tej biblioteki i nie narzekają.

0

Oj, narzekaja. Raz, ze trzeba za to placic, a dwa, ze programy pisze sie w tym obiektywnie trudniej niz w innych frameworkach (np. Java). Przede wszystkim trzeba uzywac wskaznikow i recznie zarzadzac pamiecia - ryzyko bledow i przeciekow. Generalnie ponad 30% dluzej trwa pisanie programu (robiono takie badania, sam tego nie wymyslilem). Nie ma dobrego frameworku dla c++, ktory by rozwiazywal ten problem. Dlatego w wielu firmach przechodzi sie na J2SE. Te makra to tez archaiym, w QT i w Javie sa sloty. Dzieki temu mozna w trakcie pracy programu zmieniac powiazania "zdarzenie->wywolanie metody".

Moja odpowiedz na pyt w tytule: Lepiej nauczyc sie MFC niz WinAPI. WINAPI tez sie b. przydaje (w progr. MFC), wiec tez trzeba co nieco umiec. Przynajmniej naucz sie korzystac z dokumentacji.

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