Skocz do zawartości

Aspect

Członkowie
  • Postów

    0
  • Dołączył

  • Ostatnio

    Nigdy

Wszystko napisane przez Aspect

  1. W takim razie moja odpowiedź była na inne pytanie . Wiem, że to troche leci w próżnię ;-), ale trudno: Zmenne nie nazywa się tak żeby było jak w książkach, tylko tak żeby Ci było łatwo na pierwszy rzut oka powiedzieć, co dana zmienna przechowuje. Dla programu ważniejszy od nazwy zmiennej jest jej typ.
  2. W wielkim skrócie wygląda to mniej więcej tak (za mało czasu i miejsca, żeby to wszystko dokładniej opisać, także moja wiedza na ten temat niestety nie jest kompletna :P): CMainFrame - jest to klasa opakowująca okno główne aplikacji (bez obszaru roboczego); znajdują się w niej więc informacje na temat wszelkich toolbarów, statusbarów; tutaj możesz też modyfikować wygląd onka (czy ma przyciski minimalizacji i maxymalizacji, czy da się rozciągać itp) CDoc - to klasa opakowująca dane wykorzystywane w Twojej aplikacji (bez sposobów ich wyświetlania); w niej powinna znajdować cała warstwa logiki Twojej aplikacji (wszystkie funkcje modyfikujące dane); udostępnia ona funkcję Serialize służącą do zapisywania dokumentu (a ściślej jego zmiennych) CView - klasa opakowująca warstwę interfejsu aplikacji; powina służyć do wyświetlania danych znajdujących się w dokumencie (interpretować te dane i podawać je w postaci łatwo dostępnej dla użytkownika - np.: w dokumencje masz tablicę punktów, a klasa CView wyświetla je jako wykres) Nie wiem tego na pewno, ale z tego co zdołałem wywnioskować z budowy aplikacji SDI, to jedynymi klasami, które się ze sobą komunkują są klasa widoku i klasa dokumentu. Po prostu w klasie widoku pobierasz wskaźnik do aktywnego dokumentu, przy użyciu funkcji GetDocument i wyświetlasz zawarte w nim dane. Pobieranie wskaźnika wygląda tak: W Swojej klasie CView, albo w którejś z jej funkcji, tworzysz sobie wskażnik do obiektu klasy Twojego dokumentu np.: CMyDoc* pMyDoc. Następnie przypisujesz tej zmiennej wskaźnik do bieżącego dokumentu np.: pMyDoc=GetDocument(); i w ten sposób masz już dostęp do wszystkich pól i metod Swojej klasy dokumentu poprzez operator -> np.: pMyDoc->WyznaczPunkty();. Architektura Document-View została zaprojektowana po to żeby oddzielić logikę aplikacji (dane i operacje na nich) od interfejsu (sposób wyświetlania tych danych). Ma to ułatwić zmiane interfejsu (np.: nie chcemy oglądać wykresu tylko tablekę z współrzędnymi punktów), bez potrzeby zmiany całej aplikacji oraz bez ryzyka namieszania w częci logicznej.
  3. Dokładnie tak. Nie rozumiem po co ten post był.
  4. Aspect

    DoubleBuffered

    Musisz stworzyć sobie kontekst w pamięci (HDC), kompatybilny z kontekstm, na którym normalnie wyświetlasz ( użyj funkcji CreateCompatibleDC(); ). Wszystko, co chcesz żeby Ci się wyświetliło, rysuj na tym kontekście w pamięci, a następnie użyj funkcji BitBlt(); do przekopiowania zawartości jednego kontekstu na drugi. Wszystko to jest w wielkim skrócie (zakładam, że już troche znasz winapi i GDI oraz, że masz dostęp do dobrego helpa), w razie niejasności - pytaj.
  5. Pytanie 1: a) Podczas toworzenia projektu MFC na zakładce (tam są takie dziwne te zakładki z boku) "Application Type" jest npis "Use of MFC:" i tam wybierasz czy chcesz zeby biblioteki MFC były łączone dynamicznie czy statycznie. b) Jeżeli chcesz to zmienić po stworzeniu projektu to wchodzisz w opcje projektu i tam na zakładce "General" również jest pole "Use of MFC:". Pytanie 2: Nie wiem jak jest u Ciebie, bo ja mam całe Visual Studio i u mnie jest (w takim katalogu Visual C++ Projects) Win32 Project.
  6. Aspect

    Tray Icon - przykład

    Wszystkie przykłady do lekcji są teraz na FTP (serwer: winapi.org login: anonymous).
  7. Aspect

    Ale Lam!

    Ja tam specjalistą od Delphi nie jestem, ale PChar to mi z nazwy wygląda na wskaźnik do char (albo do tablicy char'ów). Prawdopodobną przyczyną "nie iścia" ;-) jest więc zapewne fakt, że nie zaalokowałeś pamięci na napis, który chcesz zapisać.
  8. Nie wiem jak innym, ale mi jest trochę trudno zrozumieć co Ty do mnie piszesz (najbardziej dla mnie zrozumiała była Twoja wypowiedż zapisana w innym wątku pomiędzy znacznikami [ Code ] :) ). Dlatego to, co tu wyjaśniam może nie do końca być tym, o co Ci chodzi. ;-) ad 1. Zapis Win32 oznacza, ze program pisany jest na patformę 32 bitową. Moze to być zarówno projekt konsolowy jak i okienkowy. Z tego co piszesz wnioskuję, że poradziłes sobie z problemem dotyczącym typu DWORD. ad 2. Skoro mówisz, że wróciłeś do stanu (według Ciebie) wyjściowego i program również nie działa, to wydaje mi się, że jedynym rozwiązaniem (choć może trochę bolesnym) będzie stworzenie nowego projektu i przeniesienie do niego Twojego kodu. Najpierw jednak zastanów się jaką aplikacje chcesz pisać i przy tworzeniu projektu zaznacz tylko te opcje, które będą Ci potrzebne.
  9. Na wstępie chciałbym napisać, że ok 0.001% (jeżeli nie mniej) błędów programu to błędy kompilatora, natomiast pozostałe 99.999% to błędy programistów. Wnioski z tego wyciągnij sam. ;-) Teraz odnośnie błędów: 1. Błąd z DWORD. DWORD nie jest typem C ani C++ tylko WinAPI (zadeklarowany np w windows.h). Ty natomiast (wnioskuję z tego co tu napisałeś), stworzyłeś sobie projekt konsolowy, który nie używa bibliotek WinAPI i dlatego nie rozpoznaje typu DWORD. 2. Błąd z precompiled header. Przy wyborze projektu podejrzewam, ze wybrałeś opcję "Precompiled header", wygenerował Ci się "jakiś kod", który usunąłeś i wrzuciłeś własny. Ewentualnie wyrzuciłeś "jakieś niepotrzebne" nagłówki. Zgadłem???
  10. Poczytaj sobie jakąś dobrą książkę o programowaniu obiektowym. Tam będzie wyjaśnione po co. :) A co do zapisu: int klasa::*wskaznik; , to mówi on co następuje: Zmienna o nazwie wskaznik, będąca wskaznikiem na int, jest polem klasy o nazwie klasa. Tak więc, może i sie skompiluje, ale na pewno nie zadziała. :)
  11. Aspect

    Konfersja

    Na tym forum ten temat wielokrotnie padł i był dokładnie wyjaśniony. Funkcje konwetujące napis na liczbe i odwrotnie są następujące (trzeba to chyba do FAQ dać): atof Convert string to float atoi, _atoi64 Convert string to int atol Convert string to long _ecvt Convert double to string of specified length _fcvt Convert double to string with specified number of digits following decimal point _gcvt Convert double number to string; store string in buffer _itoa, _i64toa, _itow, _i64tow Convert int to string _ltoa, _ltow Convert long to string strtod, wcstod Convert string to double strtol, wcstol Convert string to long integer strtoul, wcstoul Convert string to unsigned long integer _ultoa, _ultow Convert unsigned long to string _wtoi Convert wide-character string to int _wtol Convert wide-character string to long
  12. Aspect

    fscanf

    Drugi parametr funkcji fscanf to jest tzw string formatujący, czyli string mówiący funkcji fscanf w jakim formacie i w jaki sposób zapisane są zmienne, które chcemy odczytać. Tutaj: fscanf(plik, "%f %f %f", &x, &y, &z); wyraźnie dałeś do zrozumienia funkcji fscanf(...), że będziesz odczytywał 3 zmienne typu float oddzielone spacjami i tylko zmienne zapisane w taki sposób zostaną odczytane poprawnie. Żeby wczytać zmienne oddzielone średnikami musiałbyś napisać: fscanf(plik, "%f;%f;%f", &x, &y, &z); Jeżeli chesz odczytywać zmienne oddzielone dowolnymi wybranymi przez Ciebie znaczkami (czyli np. wiesz, ze zmienne będą oddzielona spacjami lub średnikami lub przecinkami) zainteresuj się funkcją strtok.
  13. Aspect

    ListBox i columns

    Rzeczywiście w ListBox'ie nie ma obsługi kolumn (przynajmniej w takim znaczeniu o jakie chodzi Twardemu). Jednak biblioteka Common Controls (niestety nie wiem czy istnieje jej odpowiednik dla Delphi) oferuje kontrolkę ListView (jej klasa nazywa się SysListView32). Obsługuje ona różne widoki (takie jakie mamy do wyboru na przykład w Explorerze), między innymi widok raportu (kolumny), posiada również możliwośc dodawania do niej ikonek itp. Tutaj masz wylistowane wszystkie komunikaty które obsługuje ListView.
  14. Aspect

    Blad

    Nie, nie skończył. Jest cały czas w toku. Jednak niektórzy mają problemy ze swoją częścią (i prosiłbym tych, którzy już skończyli, żeby im troszkę pomogli w miarę swoich możliwości czasowych) albo mają mało czasu. Zrobimy tak - niech każdy z Was napisze tutaj, czy już skończył swoją część i jeśli tak to czy zgłasza gotowość do pomocy, a jeżeli nie to niech napisze z czym dokładnie ma problem.
  15. Myślę, że zasada powinna być taka, że jeśli ktoś ma ochotę napisać jakiś artykuł, albo dopisać dodatkowe informacje do tego, który już jest na stronie to może pisać bez pytania o zgodę. Wątpie, żeby Pinolec odrzucił czyjąś pomoc. Od przybytku głowa nie boli. ;-)
  16. WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_MINIMIZEBOX|WS_MAXIMIZEBOX Ta mieszanka stylów daje standardowe okienko bez możliwości zmiany rozmiaru.
  17. Aspect

    clrscr dla vc++ 6

    Istnieje na pewno w stdlib.h. Nie działa, bo funkcja system(); pobiera jako parametr wskaźnik do tablicy charów. Poprawnie powinno być: system("cls"); Więcej informacji znajdziesz TUTAJ. Zanim jednak użyjesz tej funkcji musisz byćpewien, że system na którym będzie on uruchomiony posiada komendę cls.
  18. Aspect

    Zmiana Czcionki

    Zamiast wysyłać komunikat WM_SETTEXT (który służy zupełnie od czegoś innego) musisz ustawić czcionkę, którą stworzyłeś, jako aktualną dla kontekstu urządzenia, na którym wyprowadzasz tekst. Wyswietlenie tekstu przy użyciu wybranej przez Ciebie czcionki powinno wyglądać tak: HFONT hFont=CreateFont(blabla); //utworzenie czcionki i otrzymanie uchwytu do niej hFont=(HFONT)SelectObject(hdc,hFont); //ustawienie jej jako domyślnej dla kontekstu i jednoczesne zapisanie poprzedniej czcionki używanej przez kontekst DrawText(blabla); //wypisujesz sobie co tam chcesz DeleteObject(SelectObject(hdc, hFont)); //kasowanie stworzonej czcionki i jednocześne przywracanie poprzedniej
  19. Aspect

    Blad

    Nie załamuj się. Spróbój popracować nad tymi DIBami (przeczytaj odpowiedni rozdział - chociaż ja z tej książki nie przeczytałem ani jednej strony). Nie wszyscy jeszcze się uporali ze swoimi modułami, więc masz jeszcze trochę czasu.
  20. Aspect

    Blad

    Ponieważ termin na oddanie modułów minął w tamtą niedzielę (chociaż ja nie naciskam - sam zupełnie nie mam czasu - i rozumiem, że macie mnóstwo zajęć obowiązkowych), więc każdy kto skończy(ł) ;-) niech utworzy w swoim katalogu na FTP podkatalog "modul" i umieści tam TYLKO pliki (cpp, h, dll lub lib) swojego modułu oraz skompilowany program testujący i ewentualnie jego kod (szczerze mówiąc kod programu testującego na pewno dużo mi pomoże - ALE CHODZI MI JEDYNIE O TE PROGRAMY, KTÓRE JUŻ NAPISALIŚCIE, ŻEBY PRZETESTOWAĆ WASZ MODUŁ - NIE PISZCIE NOWYCH). Piszę to dlatego, bo trudno mi jest stwierdzić, czy to co jest na FTPie to już skończony, działający program, czy może tylko taka testowa wersja wrzucona na serwer, żebym wiedział, że nie leniuchujecie ;-). Ja już zaczynam to wszystko powoli sklejać do kupy. Wiem, że pinolec i twardy już skończyli (jeżeli jest ktoś jeszcze - niech pisze na gg) i za ich moduły wkrótce się zabieram. Staram się poświęcić na to cały mój wolny czas, czyli okolo 1h dziennie, ale myślę, że już niedługo to skończymy. Jeżeli komuś już się zaczyna nudzić, niech zastanowi się nad następnym projektem, ewentualnie - niech zgłośi swoją chęć pomocy osobom, które mają problemy ze swoimi modułami.
  21. Aspect

    Zmiana tła kontrolki.

    Musisz obsłużyć w oknie będącym rodzicem ChceckBoxa komunikat WM_CTLCOLOR. W nim pobierz kolor tła TabControl i zwróć brusha o takim właśnie kolorze.
  22. Jeżeli Twój powyższy zapis powinien wyglądać tak: char *x="-2"; (bo to co napisałeś raczej poprawne nie jest). To musisz użyć funkcji atof.
  23. Aspect

    Blad

    No brak czasu to jest mało powiedziane. Do tej pory jeszcze nie miałem wszystkich zajęć (pierwszy tydzień), ale obliczyłem, że jak tak dalej pójdzie, to będę miał do napisania średnio 2-3 programy na tydzień i to pod warunkiem, że już teraz się zabiorę. Domyślałem się, że chociaż projekt jest mało skomplikowany i teoretycznie powinien zostać szybko skończony, to nie będzie on jedyną rzeczą, której poświęcamy czas. Dlatego też chciałem dać na niego trochę więcej czasu 2-3 tygodnie. Myślę jednak, że uda nam się to skończyć do niedzieli. Wrzucajcie tymczasem efekty swojej pracy do swoich katalogów na ftpie. Chciałbym jeszcze powiedzieć, żebyście się nie przejmowali, że to tak wolno idzie (i tak myślę, że nie jest tak źle - jak juz pisalem, planowałem na to 3 tygodnie), to jest nasz pierwszy wspólny projekt. Jest kilka takich rzeczy, których się nie da zrobić z marszu - trzeba się najpierw douczyć(np. DIBy, konwersja obrazu, ładowanie różnych formatów...). Nie traćcie nadziei! ;-)
  24. Aspect

    taki sam

    Zmienne standardowo inicjuje się w konstruktorze klasy (do tego własnie służy konstruktor).
  25. 1. W funkcji obsługi komunikatów, dodajesz obsługe komunikatu WM_CREATE. W niej najpierw używasz funkcji: HWND GetDlgItem( HWND hWnd, // uchwyt do Twojego głównego okna int nIDDlgItem // identyfikator edita, w którym chcesz mieć focus ); żeby uzyskać uchwyt do okna Edita, a potem wywołujesz HWND SetFocus( HWND hWnd // handle to window to receive focus ); podając jako parametr uchwyt uzyskany wcześniej. 2. Zeby uzyskać edit, do którego można wprowadzać tylko liczby nie trzeba subclassingu. Wystarczy nadać mu styl ES_NUMBER. Nie piszesz dokładnie co Ci nie działa, więc trudno cokolwiek powiedzieć. 3. Robisz sobie jakąś zmienną globalną, lub statyczną w funkcji obsługi komunikatów, np typu bool i ustawiasz na false. W obsłudze naciśniecia przycisku ustawiasz sobie tęzmiennąna true. Potem w obsłudze komunikatu WM_PAINT sprawdzasz czy wartość tej zmiennej jest równa true i jeżeli tak to wyrysowujesz tekst.
×
×
  • Utwórz nowe...