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.








