Henryk Budzisz ZPORR Koszalin 2009
Wykaz ćwiczeo Ćw.1. Przycisk zamykajacy Ćw.2. Strzałka blokowa Uwaga: Ćwiczenia wymagają zainstalowania środowiska programistycznego VisualStudio.
Ćwiczenie 1 Zadania: zdefiniować komponent.net przycisk zamykający, dodać komponent do palety Toolbox, przetestować jego użycie w przykładowej aplikacji.
Ćwiczenie 1 przygotowanie komponentu 1. Utworzyć nowy projekt typu Class Library o nazwie Przycisk (File/New Project/Visual C++). 2. Z pliku Przycisk.h usunąć domyślnie utworzoną klasę Class1. 3. Do projektu Przycisk dodać klasę PrzyciskZamykający (Add/Class/Visual C++/Component Class). 4. Dodać do projektu Przycisk referencje do bibliotek System.Windows.Forms.dll oraz System.Drawing.dll (References/Add New Reference/.NET/...). 5. W pliku Przycisk.h dodać deklaracje: using namespace System::Windows::Forms; using namespace System::Drawing; 6. Zastąpić klasę bazową Component klasą UserControl. 7. Utworzyć plik biblioteczny Przycisk.dll (Build).
Ćwiczenie 1 - c.d: aplikacja testująca 1. Dodać nowy projekt typu Windows Form Application o nazwie TestKontrolek (Add/New Project/Visual C++). 2. Dodać kontrolkę PrzyciskZamykający do palety Toolbox (Tools/Choose Toolbox Items/Browse i odszukać Przycisk.dll). 3. W trybie Design przeciągnąć komponent PrzyciskZamykający na formatkę. Sprawdzić jego właściwości (Properties Window) i skasować go.
Ćwiczenie 1 c.d: rozbudowa komponentu PrzyciskZamykający. 1. W konstruktorze klasy PrzyciskZamykający dodać: Size = System::Drawing::Size(40,40); BorderStyle = System::Windows::Forms::BorderStyle::Fixed3D; 2. Odbudować komponent i przetestować na formatce i w przeglądarce właściwości (Properties Window). 3. Skasować z formatki.
Ćwiczenie 1 c.d: rozbudowa komponentu PrzyciskZamykający; funkcja OnPaint. dodać funkcję OnPaint: virtual void OnPaint(PaintEventArgs^ e) override { int l = ClientRectangle.Left+4; int r = ClientRectangle.Right-4; int t = ClientRectangle.Top+4; int b = ClientRectangle.Bottom-4; Pen^ pen = gcnew Pen(ForeColor, 2); e->graphics->drawline(pen,l,t,r,b); e->graphics->drawline(pen,l,b,r,t); i przetestować.
Ćwiczenie 1 c.d: zamykanie okna W trybie Design, wygenerować funkcję obsługującą zdarzenie Click komponentu PrzyciskZamykający (Properties Window zakładka Events). W funkcji dodać: Close(); Po odbudowaniu komponentu - przetestować.
Ćwiczenie 2 Zadania: zdefiniować strzałkę blokową ( ) na bazie klasy System.Windows.Forms.Control, zdefiniować właściwość Direction określającą kierunek strzałki i właściwy sposób odrysowania, dodać ikonę do komponentu, przetestować komponent w przykładowej aplikacji.
Ćwiczenie 2 przygotowanie komponentu 1. Utworzyć nowy projekt typu Class Library o nazwie Arrow (Add/New Project/Visual C++). 2. Dodać do projektu Arrow referencje do bibliotek System.Windows.Forms.dll oraz System.Drawing.dll (References/Add New Reference/.NET/...). 3. Zmodyfikować zawartość pliku Arrow.h do postaci: using namespace System; using namespace System::Windows::Forms; using namespace System::Drawing; namespace Arrow { public ref class BlockArrow : public Control { ; 4. Utworzyć plik biblioteczny Arrow.dll (Build).
Ćwiczenie 2 c.d: rozbudowa komponentu BlockArrow. protected: virtual void OnPaint(PaintEventArgs^ e) override { int l = ClientRectangle.Left; int r = ClientRectangle.Right-1; int t = ClientRectangle.Top; int b = ClientRectangle.Bottom-1; // wierzchołki trójkąta Point p1 = Point(l,t); Point p2 = Point(l,b); Point p3 = Point(r,t+ClientRectangle.Height/2); array<point>^ arrowpoints = {p1, p2, p3; Pen^ pen = gcnew Pen(Color::Black, 1); SolidBrush^ brush = gcnew SolidBrush(ForeColor); e->graphics->fillpolygon(brush, arrowpoints); e->graphics->drawpolygon(pen, arrowpoints); p1 p2 p3
Ćwiczenie 2 - c.d: aplikacja testująca 1. Do testowania może posłużyć aplikacja zawarta w projekcie TestKontrolek. 2. Dodać kontrolkę BlockArrow do palety Toolbox (Tools/Choose Toolbox Items/Browse i odszukać Arrow.dll). 3. W trybie Design przeciągnąć komponent BlockArrow na formatkę. Powiększyć komponent i zmienić kolor (odziedziczona właściwość ForeColor).
Ćwiczenie 2 poprawianie wyglądu komponentu. W klasy BlockArrow dodać konstruktor: public: BlockArrow() { // konstruktor bezparametrowy Size = System::Drawing::Size(70,70); ForeColor = Color::Aquamarine; odbudować plik Arrow.dll i przetestować komponent na formatce.
Ćwiczenie 2 definiowanie kierunków strzałki blokowej 1. W klasie BlockArrow dodać pole prywatne direction typu System.Windows.Forms.ArrowDirection: private: ArrowDirection direction; 2. W konstruktorze dodać inicjację tego pola: direction = ArrowDirection::Right;
Ćwiczenie 2 definiowanie właściwości Direction typu ArrowDirection W klasie BlockArrow zdefiniować właściwość: property ArrowDirection Direction { virtual ArrowDirection get() { return direction; virtual void set(arrowdirection value) { direction = value; Invalidate(); odbudować plik Arrow.dll i sprawdzić właściwość Direction w przeglądarce właściwości.
Ćwiczenie 2 modyfikacja sposobu wyświetlania właściwości Direction. W przeglądarce właściwości podzielone są na grupy, np: Appearance, Behawior, Data. Właściwość Direction należy dodać do grupy Layout. Realizacja: uzupełnić deklaracje użycia przestrzeni nazw: using namespace System::ComponentModel; przed definicją właściwości dodać atrybut: [ Category("Layout") ] Odbudować bibliotekę Arrow.dll i przetestować modyfikację.
Ćwiczenie 2 poprawienie rysowania strzałki (klasa BlockArrow, funkcja OnPaint) Point p1, p2, p3; switch(direction) { case ArrowDirection::Left: { // wierzchołki trójkąta p1=point(r,t); p2=point(r,b); p3=point(l,t+clientrectangle.height/2); break; case ArrowDirection::Right: { p1=point(l,t); p2=point(l,b); p3=point(r,t+clientrectangle.height/2); break; case ArrowDirection::Up: { p1=point(l,b); p2=point(r,b); p3=point(l+clientrectangle.width/2,t); break; case ArrowDirection::Down: { p1=point(l,t); p2=point(r,t); p3=point(l+clientrectangle.width/2,b); break;
Ćwiczenie 2 ikona komponentu 1. Do projektu Arrow dodać ikonę komponentu (Add/Resource/Icon/New) i przy użyciu narzędzi do rysowania zaprojektować ikonę 16x16 pikseli. 2. Zmienić nazwę pliku na: Arrow.BlockArrow.ico 3. Zapewnić dodawanie pliku do biblioteki.dll, poprzez modyfikacje właściwości projektu Arrow (Properties/Linker/Input w polu Embed Managed Resource File wpisać: Arrow.BlockArrow.ico) 4. Odbudować plik Arrow.dll i ponownie dodać komponent do palety narzędzi Toolbox (Tools/Choose Toolbox Items/Browse i odszukać Arrow.dll).