Ćwiczenie (1). Dostosuj poniższy program do swojego programy zaliczeniowego . (Plik z programem jest dostępny pod adresem http://mijprogramowania.w.interia.pl/18_01_2009.c) #include #include typedef struct{ char imie[30]; char nazwisko[50]; int rokUrodzenia; - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Ćwiczenie (1)Dostosuj poniższy program do swojego programy zaliczeniowego.(Plik z programem jest dostępny pod adresem http://mijprogramowania.w.interia.pl/18_01_2009.c)
void edytuj(){ int i, option; wypiszKlientow(); printf("Wprowadz numer klienta do edycji:"); scanf("%d", &i); do { printf("Wybierz opcję:\n1 - Edytuj imie\n2 - Edytuj nazwisko\n0 - powrot do menu\n"); scanf("%d", &option); switch(option){ case 0: break; case 1: edytujImie(i - 1); break; case 2: edytujNazwisko(i - 1); break; } } while (option != 0); };void usun(){};
Ćwiczenie (1)int znajdzImie(char *szukane){ char imie2[30], imie1[30]; strcpy(imie2, strtoupper(szukane)); int i; for (i = 0; i < sizeof(tKlienci)/sizeof(klient); i++){ //if (strstr(toupper(tKlienci[i].imie), toupper(szukane)) != NULL) return i; strcpy(imie1, strtoupper(tKlienci[i].imie)); if (strstr(imie1, imie2) != NULL) return i; } return -1;}
void wyszukajImie(){ char szukane[50]; int option, znalezione; printf("Imie: "); scanf("%s", szukane); znalezione = znajdzImie(szukane); if (znalezione != -1) wypiszKlienta(znalezione); else printf("Nie znaleziono klienta o imieniu %s\n", szukane);}
void wyszukajNazwisko(){};
Ćwiczenie (1)void wyszukaj(){ int option; do { printf("Wybierz opcję:\n1 - Wyszukaj imie\n2 - Wyszukaj nazwisko\n0 - powrot do menu\n"); scanf("%d", &option); switch(option){ case 0: break; case 1: wyszukajImie(); break; case 2: wyszukajNazwisko(); break; } } while (option != 0);};
void zakoncz(){ int i; system("del c:\\temp\\abc.txt"); for(i = 0; i < sizeof(tKlienci)/sizeof(klient); i++){ if (strlen(tKlienci[i].PESEL) > 0) zapisz(tKlienci[i]); }};
Ćwiczenie (1)int main(int argc, char *argv[]){ wczytajKlientow(); int option; while(option!=0){ //system("cls"); printf("Wybierz opcję:\n1 - Dodaj kienta\n2 - Edytuj klienta\n3 - Usuń klienta\n"); printf("4 - Wyszukaj klienta\n5 - Wypisz klientow\n0 - Zakończ\n"); scanf("%d", &option); switch(option){ case 0: zakoncz(); break; case 1: dodaj(); break; case 2: edytuj(); break; case 3: usun(); break; case 4: wyszukaj(); break; case 5: wypiszKlientow(); break; } } system("PAUSE"); return 0;}
Zadanie1) Popraw program tak, aby funkcja znajdzImie zwracała nie pierwszy
znaleziony rekord, ale tablicę rekordów spełniających kryterium wyszukiwania.
2) Zmodyfikuj funkcję strtoupper tak, aby nie zmieniała wartości przekazywanej jako parametr.
Uruchamianie zewnętrznych aplikacji (1)Plik nagłówkowy windows.h zawiera prototyp funkcji WinExec pozwalającej uruchomić zewnętrzną aplikację. Pierwszy parametr funkcji wskazuje uruchamiany plik, zaś drugi przyjmuje wartości:• SW_HIDE - okno aplikacji jest niewidoczne • SW_MINIMIZE - okno aplikacji jest zminimalizowane • SW_SHOWNORMAL - standardowe okno aplikacji
Zadanie:1) Przepisz i uruchom poniższy progran#include <windows.h>int main(){ WinExec("NOTEPAD.exe", SW_SHOWNORMAL);}
2) Zmodyfikuj program tak, aby uruchomiony został Excel3) Zmodyfikuj program tak, by otwarta została wpisana przez
użytkownika liczba okienek notatnika
Okna dialogowe (1)Plik nagłówkowy windows.h zawiera prototyp funkcji MessageBox pozwalającej wyświetlać okna dialogowe. Funkcja ma postać:
int Message Box(hwndParent, lpszText, lpszTitle, Style)
2) Zmodyfikuj powyższy program tak, aby w zależności od wyboru użytkownika uruchamiany był notatnik lub Excel.
Tworzenie okna programu (1)
1) Utwórz nowy projekt wybierając opcję „Windows Application”
2) Skompiluj i uruchom utworzony program
Tworzenie okna programu (2)
Informacje o oknie przechowywane są w strukturze WNDCLASSEX. Struktura ta zawiera m. in. dane o Window Procedure kontrolującej działanie okna, ikonach, kursorze i tle.
• lpfnWndProc - wskaźnik do Window Procedure danego okna,• cbClsExtra - ilość dodatkowej pamięci przydzielonej klasie,• cbWndExtra - ilość dodatkowej pamięci przydzielonej oknu, • hInstance - uchwyt do instancji aplikacji (przekazany w pierwszym
parametrze WinMain),• hIcon - ikona (zazwyczaj 32x32) pokazywana przy naciśnięciu Alt+Tab,• hCursor - kursos wyświetlany w oknie• hbrBackground - kolor okna,• lpszMenuName - nazwa menu okna,• LpszClassName - nazwa klasy,• hIconSm - ikona (zazwyczaj 16x16) pokazywana w pasku zadań i w
lewym górnym rogu okna.
Tworzenie okna programu (4)
Zadanie:1) Zmodyfikuj program utworzony przez Dev-C++ zmieniając kursor za pomocą stałych: IDC_HELP, IDC_WAIT, IDC_CROSS, IDC_HAND, IDC_NO, IDC_APPSTARTING, IDC_UPARROW, IDC_IBEAM, IDC_SIZEWE, IDC_SIZENS.
2) Zmodyfikuj parametr hIcon okna. Jako drugi parametr funkcji LoadIcon wstaw IDI_QUESTION, IDI_HAND, IDI_EXCLAMATION, IDI_ASTERISK, IDI_WINLOGO. Sprawdź działanie parametrów naciskając Alt+Tab po uruchomieniu programu.
Tworzenie okna programu (5)
Po ustaleniu wartości pól struktury okna należy je zarejestrować:
W kolejnym kroku można już utworzyć okno aplikacji: hwnd = CreateWindowEx( WS_EX_CLIENTEDGE, g_szClassName, "The title of my window", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 240, 120, NULL, NULL, hInstance, NULL);
Tworzenie okna programu (6)
Parametry funkcji CreateWindowEx;• styl obramowania okna,• nazwa klasy,• tytuł okna,• styl okna,• współrzędna x lewego górnego rogu okna,• współrzędna y lewego górnego rogu okna,• szerokość okna,• wysokość okna,• uchwyt macierzystego okna,• uchwyt menu, • uchwyt instancji aplikacji,• dodatkowe dane o oknie (rzadko używane).
Tworzenie okna programu (7)
Zadanie:1) Zmodyfikuj parametry położenia i wielkości tworzonego okna.
2) Zmodyfikuj program zmieniając kolejno wartości pierwszego parametru funkcji CreateWindowEx na WS_EX_LAYERED, WS_EX_WINDOWEDGE, WS_EX_PALETTEWINDOW. Zaobserwuj zmiany wyglądu okna w zależności od tego parametru.
Obsługa zdarzeń (1)
Każde zdarzenie ruchu myszy, naciśnięcia klawisza, kliknięcie na pozycję menu itp. generuje informację przechwytywaną przez aplikację i wstawianą do kolejki zdarzeń. Wywołanie GetMessage() powoduje pobranie z kolejki kolejnego zdarzenia w celu jego obsługi przez program. Jeśli kolejka jest pusta aplikacje oczekuje na kolejne zdarzenie.
LPARAM lParam){ switch (message) /* handle the messages */ { case WM_DESTROY: PostQuitMessage (0); /* send a WM_QUIT to the message queue */ break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0;}
{ switch (message) /* handle the messages */ { case WM_LBUTTONDOWN: MessageBox(hwnd, "Obsłużono zdarzenie myszki", "Komunikat o zdarzeniu", MB_OK); break;
case WM_DESTROY: PostQuitMessage (0); /* send a WM_QUIT to the message queue */ break; default: /* for messages that we don't deal with */ return DefWindowProc (hwnd, message, wParam, lParam); } return 0;}
Obsługa zdarzeń (4)
Zadanie: 1) Dodaj obsługę zdarzeń obrotu rolki myszki (WM_MOUSEWHEEL), utworzenia okna (WM_CREATE), naciśnięcia klawisza klawiatury (WM_KEYDOWN), przesunięcia okna (WM_MOVE), podwójnego kliknięcia lewego klawisza myszy (WM_LBUTTONDBLCLK), pojedynczego kliknięcia prawego klawisza myszy (WM_RBUTTONDOWN). Przy wystąpieniu każdego ze zdarzeń dodaj okno dialogowe z odpowiednim komunikatem.
Menu (1)W celu utworzenia w okienku menu należy obsłużyć zdarzenie WM_CREATE wywołując w nim kolejno metody:CreateMenu – tworzy menuAppendMenu – dodaje element menuSetMenu – przypisuje menu do okna
Menu (2)Zadanie:1) Skonstruuj okno z menu zawierającym funkcje dostępne w Twoim semestralnym programie zaliczeniowym. Aplikację zachowaj do wykorzystania w kolejnym ćwiczeniu.
Menu (3)Obsługa zdarzeń menuWybór przez użytkownika opcji menu powinien powodować określone akcje.
Przykład: case WM_COMMAND: switch(LOWORD(wParam)) { case 9001: MessageBox(hwnd, "Wyjście", "Komunikat o zdarzeniu", MB_OK);
break; case 9002: MessageBox(hwnd, "Przejdź do...", "Komunikat o zdarzeniu", MB_OK);
break; } break;
Menu (4)Zadanie:1) Dodaj do utworzonej w poprzednim ćwiczeniu aplikacji obsługę zdarzeń wyboru pozycji z menu.
Standardowe kontrolki (5)Zadania:1) Dodaj do aplikacji kilka przycisków związanych tematycznie z semestralnym programem zaliczeniowym.2) Dodaj grupę przycisków radio zawierającą opcję wyboru związaną z programem zaliczeniowym.3) Dodaj pionowy pasek przewijania.
Pasek statusu (1)Pole edycyjnePrzykład: HWND hStatus; int statwidths[] = {100, -1};