Przedstawię tylko jeden. Resztę znajdziecie sami bo będziecie mieli punkt odniesienie. Ewentualnie możecie spytać, choć osobiście podchodzę z założenie, że ćwiczenie, a co zarazem idzie szukanie czyni mistrza - więc polecam jednak google :]
Reasumując naszym zadaniem będzie utworzenie (w moim przypadku w Dev-C++ 4.9.9.2) wyboru czy zmaksymalizować, czy pozostawić normalne okienko i w wypadku tego pierwszego wyboru dosowskie okienko zostanie zwiększone do rozmiarów ekranu (jak wiadomo standardowo pod dosem można je zwiększyć do połowy i to jeszcze z menu i titleboxem :]).1. na początek wiadomo: File/New/Project... => Console Application => Nazwa => Docelowy Zapis i mamy coś takiego.
#include <cstdlib> #include <iostream> using namespace std; int main(int argc, char *argv[]) { system("PAUSE"); return EXIT_SUCCESS; }2. Na początek musicie zaincludeować nowy nagłówek #include <windows.h> i polecam zmienić końcowe system("PAUSE"); na getch();* lub wprowadzenie nowej zmiennej, np. char jeśli jesteś pod Windowsem - w stylu: char wyjdz; cin >> wyjdz;. Zalecam też zmienić na końcu return EXIT_SUCCESS; na return 0;.* z getch(); pod Devem mogą się zrodzić problemy. Jeśli chcesz użyć tej funkcji to musisz zaincludować #include <conio.h>. Niestety jest to borlandowski nagłówek i nie zawsze działa on dobrze pod tym kompilatorem w którym piszemy teraz. Jeśli taki problem by wystąpił należy ściągnąć conio2.h z nofollow paczki, zainstalować, po czym w kompilatorze wejść: Project/Project Options/Parameters/Add Library or Object i w folderze z kompilatorem w lib dodać libconio.a Zamiast includeowania conio.h musiecie wtedy zaincludeować conio2.h.
Tak więc przy standardowym conio.h (zakładam, że jednak będzie działać, jeśli nie - zrób powyższe :]) i po zmianach nasz kod będzie wyglądać tak.
[/list]
#include <cstdlib> #include <iostream> #include <windows.h> #include <conio.h> using namespace std; int main(int argc, char *argv[]) { getch(); return 0; }3. Na początek ciała programu należałoby zadeklarować jakąś zmienną która będzie sprawdzać czy użytkownik wybrał opcję zmaksymalizowaną, czy nie. A ponieważ najłatwiej operować jest na liczbach to możemy wrzucić zmienną całkowitą, oczywiście short (2 bitowa) i unsigned (liczby dodatnie tylko). Dodatkowo należało by wyświetlić jakieś pytanie (ja to zrobię na cout'ach, a nie na printf'ach bo będzie to łatwiejsze do zrozumienia) o maksymalizacje i pobranie wyniku (na cin'ach).
#include <cstdlib> #include <iostream> #include <windows.h> #include <conio.h> using namespace std; int main(int argc, char *argv[]) { unsigned short int wybor; cout << "Czy chcesz zmaksymalizowac okno na starcie? [wpisz 1, aby sie zgodzic] "; cin >> wybor; getch(); return 0; }4. Jak widać zawarłem już część tego co będziemy robić dalej powyżej. Chodzi o tą jedynkę :] Tak, teraz będzie warunek: jeśli użytkownik wciśnie 1 - nastąpi przekierowanie do funkcji maksymalizującej, jeśli inną cyfrę większą lub równą 0 - okienka pozostanie takie jakie jest. Można to zrobić na kilka sposobów, np. poprzez warunek if (bardziej popularny) i switch (szybszy). Powiedzmy w kwestiach edukacyjnych pokażę obydwa sposoby, gdyż stworzymy sobie dwie funkcje: jedną do sprawdzania wyboru, druga do ustawiania okna. Pierwsza funkcja do sprawdzania wyboru warunkiem if będzie sprawdzać, czy użytkownik wcisnął 1, czy coś innego. W stylu: jeśli użytkownik wcisnął 1, wywołaj kolejną funkcję z argumentem true, jeśli coś innego z argumentem false. Oczywiście w sekcji main musimy wywołać tą funkcję sprawdzania wyboru, a ona sama musi być nad głównym ciałem. Czyli.
#include <cstdlib> #include <iostream> #include <windows.h> #include <conio.h> using namespace std; void maksymalizacja(int maks_wybor) { if ( maks_wybor == 1 ) { maksymalizuj(true); // jesli w wybor zostala wpisana 1 - wywolanie maksymalizacji okna z funkcji maksymalizuj } else { maksymalizuj(false); // jesli zostalo wpisane cos innego - pozostawienie okna takiego jakie jest } } int main(int argc, char *argv[]) { unsigned short int wybor; cout << "Czy chcesz zmaksymalizowac okno na starcie? [wpisz 1, aby sie zgodzic] "; cin >> wybor; maksymalizacja(wybor); // wywołanie powyższej funkcji sprawdzającej wybór (czyli to co zostało pobrane do zmiennej wybor) getch(); return 0; }5. No i na koniec funkcja maksymalizuj maksymalizująca lub nie okno. Na switchu rzecz jasna. Jak on działa? Prosta sprawa. Podajemy zmienną którą switch ma sprawdzać i wewnątrz niego poprzez case wyłapywanie wartości. Jeśli zmienna którą sprawdzamy ma wartość w którymś z case'ów to zostaje wykonany kod wewnątrz tego case'a. Na końcu najczęściej dodaje się default, czyli kod wykonywany jeśli żaden z case'ów nie zostanie spełniony. No i pamiętajcie by po każdym bloku dodawać break; - inaczej nawet po spełnieniu warunku program będzie sprawdzał kolejne.
#include <cstdlib> #include <iostream> #include <windows.h> #include <conio.h> using namespace std; void maksymalizuj(bool prawda_falsz) { switch ( prawda_falsz ) { case true: SetConsoleDisplayMode( GetStdHandle( STD_OUTPUT_HANDLE ), CONSOLE_FULLSCREEN_MODE, NULL); // maksymalizacja break; default: SetConsoleDisplayMode( GetStdHandle( STD_OUTPUT_HANDLE ), CONSOLE_WINDOWED_MODE, NULL); // tryb okienkowy break; } } void maksymalizacja(int maks_wybor) { if ( maks_wybor == 1 ) { maksymalizuj(true); } else { maksymalizuj(false); } } int main(int argc, char *argv[]) { unsigned short int wybor; cout << "Czy chcesz zmaksymalizowac okno na starcie? [wpisz 1, aby sie zgodzic] "; cin >> wybor; maksymalizacja(wybor); getch(); return 0; }6. Sprawa ostateczna. A dokładniej dwie. Użyłem w funkcjach na początku jako deklaracje void, a nie int bo funkcje te nic nie zwracają. Druga sprawa - na 99% program Wam nie działa. Tak? :> Niestety często stosując WinAPI (bo SetConsoleDisplayMode to odwołanie do WinAPI) należy zadeklarować na początku dyrektywę, w tym przypadku stałą preprocesora. W tym wypadku musi ona sprawdzić, czy system na którym działa aplikacja jest z serii NT (a co za tym idzie program będzie działał prawidłowo tylko na tej serii). Czyli nas cały, końcowy kod wygląda tak:
#ifndef _WIN32_WINNT #define _WIN32_WINNT 0x0502 #endif #include <cstdlib> #include <iostream> #include <windows.h> #include <conio.h> using namespace std; void maksymalizuj(bool prawda_falsz) { switch ( prawda_falsz ) { case true: SetConsoleDisplayMode( GetStdHandle( STD_OUTPUT_HANDLE ), CONSOLE_FULLSCREEN_MODE, NULL); break; default: SetConsoleDisplayMode( GetStdHandle( STD_OUTPUT_HANDLE ), CONSOLE_WINDOWED_MODE, NULL); break; } } void maksymalizacja(int maks_wybor) { if ( maks_wybor == 1 ) { maksymalizuj(true); } else { maksymalizuj(false); } } int main(int argc, char *argv[]) { unsigned short int wybor; cout << "Czy chcesz zmaksymalizowac okno na starcie? [wpisz 1, aby sie zgodzic] "; cin >> wybor; maksymalizacja(wybor); getch(); return 0; }
Mam nadzieję, że tutorial jest zrozumiały i prosty. Pytania proszę tutaj.
© m1chu.eu, 2007
Tutorial udostępniony na forum.tweaks.pl. Nie wyrażam zgody na jego przetwarzanie, kopiowanie, wykorzystywanie całości, ani części bez mojej zgody na inne strony lub do innych materiałów niezwiązanych bezpośrednio z serwisem tweaks.pl.