Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych



Podobne dokumenty
Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

Wybieramy File->New->Project Wybieramy aplikację MFC->MFC Application jak na rysunku poniżej:

Zaawansowane aplikacje internetowe - laboratorium

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

1.1. Kontrolki ActiveX. Kontrolki ActiveX. Technologia ActiveX. Technologia ActiveX. Technologia ActiveX. Technologia ActiveX.

2. Kliknij Insert->Userform. Jeżeli Toolbox nie pojawi się automatycznie, kliknij View -> Toolbox. Otrzymany widok powinien być jak poniżej.

Dodanie nowej formy do projektu polega na:

Informatyka I : Tworzenie projektu

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Zasady rejestracji i instrukcja zarządzania kontem użytkownika portalu

USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Installation of EuroCert software for qualified electronic signature

Konfiguracja połączenia VPN w systemie Windows 7 z serwerem rozgrywki wieloosobowej gry Medal Of Honor: Wojna na Pacyfiku: Pacyfik.

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Zakopane, plan miasta: Skala ok. 1: = City map (Polish Edition)

Krok po kroku... (czyli jak stworzyć i wydrukować krzyżówkę)

DVD MAKER USB2.0 Instrukcja instalacji

Instrukcja konfiguracji usługi Wirtualnej Sieci Prywatnej w systemie Mac OSX

Karpacz, plan miasta 1:10 000: Panorama Karkonoszy, mapa szlakow turystycznych (Polish Edition)

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

Podstawy programowania. Ćwiczenie. Pojęcia bazowe. Języki programowania. Środowisko programowania Visual Studio

Programowanie obiektowe

Camspot 4.4 Camspot 4.5

Scenariusz lekcji. Scenariusz lekcji 1 TEMAT LEKCJI: 2 CELE LEKCJI: 2.1 Wiadomości: 2.2 Umiejętności: 3 METODY NAUCZANIA: 4 ŚRODKI DYDAKTYCZNE:

Aplikacje WWW - laboratorium

Ćwiczenia 9 - Swing - część 1

Microsoft.NET: LINQ to SQL, ASP.NET AJAX

Visual Studio instalacja

Wprowadzenie do programowania w języku Visual Basic. Podstawowe instrukcje języka

Programowanie Obiektowe GUI

USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian

USB firmware changing guide. Zmiana oprogramowania za przy użyciu połączenia USB. Changelog / Lista Zmian

Jak skonfigurować bezpieczną sieć bezprzewodową w oparciu o serwer RADIUS i urządzenia ZyXEL wspierające standard 802.1x?

Emilka szuka swojej gwiazdy / Emily Climbs (Emily, #2)

Programowanie w środowisku graficznym GUI

Programowanie wielowarstwowe i komponentowe

Praca w środowisku Visual Studio 2008, Visual C

Ćwiczenia z S Komunikacja S z dotykowymi panelami HMI na przykładzie współpracy sterownika z panelem KTP600 PN.

Oracle Application Express

Microsoft.NET: Warstwa dostępu do danych (DAL) w aplikacjach ASP.NET Web Forms

Utworzenie aplikacji mobilnej Po uruchomieniu Visual Studio pokazuje się ekran powitalny. Po lewej stronie odnośniki do otworzenia lub stworzenia

Projektowanie aplikacji internetowych laboratorium

ARNOLD. EDUKACJA KULTURYSTY (POLSKA WERSJA JEZYKOWA) BY DOUGLAS KENT HALL

Lokalizacja Oprogramowania


How to translate Polygons

Rys. 3. Kod elementów na stronie po dodaniu kontrolek podstawowych.

1. ISE WebPack i VHDL Xilinx ISE Design Suite 10.1 VHDL Tworzenie projektu Project Navigator Xilinx ISE Design Suite 10.1 File

ASP.NET MVC. Podstawy. Zaawansowane programowanie internetowe Instrukcja nr 3

Instrukcja obsługi User s manual

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej. Laboratorium przyrządów wirtualnych. Ćwiczenie 3

Ćwiczenia 2 IBM DB2 Data Studio

Rozdział 3. Zapisywanie stanu aplikacji w ustawieniach lokalnych

Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski SYSTEMY SCADA

Office 365 Midsize Business

Aplikacje w środowisku Java

Laboratorium programowania urządzeń mobilnych

Microsoft Visual C++

OSTC GLOBAL TRADING CHALLENGE MANUAL

Java Podstawy. Michał Bereta

Tworzenie okna dialogowego w edytorze raportu SigmaNEST. część 1

TwinCAT 3 konfiguracja i uruchomienie programu w języku ST lokalnie

Platformy Programowania

X11R5. .Xresources. Pliki konfiguracyjne X-Windows. Zasada działania X11. .xinitrc. X protocol X server. X client. X library

Katowice, plan miasta: Skala 1: = City map = Stadtplan (Polish Edition)

Zaawansowane aplikacje internetowe laboratorium

Ćwiczenia laboratoryjne. Oprogramowanie i badanie prostych metod sortowania w tablicach

Informatyzacja Przedsiębiorstw

****/ZN/2012. if you are pregnant or breast-feeding.

Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski SYSTEMY SCADA

Laboratorium 1. Wzorce oprogramowania lab1, Zofia Kruczkiewicz

Aplikacje WWW - laboratorium

Wojewodztwo Koszalinskie: Obiekty i walory krajoznawcze (Inwentaryzacja krajoznawcza Polski) (Polish Edition)

Dolny Slask 1: , mapa turystycznosamochodowa: Plan Wroclawia (Polish Edition)

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

1. W systemie Windows przejdź do Panel sterowania> Sieć i Internet> Centrum sieci i udostępniania.

Stargard Szczecinski i okolice (Polish Edition)

1.1. System otwartych baz danych ODBC. System otwartych baz danych ODBC. Interfejs ODBC. Interfejs ODBC. System otwartych baz danych ODBC

PROGRAMOWANIE SYSTEMÓW CZASU RZECZYWISTEGO

Rev Źródło:

Wykład 12. Programowanie serwera MS SQL 2005 w C#

Inżynieria Programowania Laboratorium 3 Projektowanie i implementacja bazy danych. Paweł Paduch paduch@tu.kielce.pl

Załącznik nr 8. do Studium Wykonalności projektu Sieć Szerokopasmowa Polski Wschodniej województwo podkarpackie

Tychy, plan miasta: Skala 1: (Polish Edition)

Instrukcja laboratoryjna cz.2

Zaawansowane Programowanie Obiektowe. Microsoft Visual Studio 2015

Instrukcja laboratoryjna

2. W oknie dialogowym Choose Toolbox Items w zakładce.net Framework Components naciskamy przycisk Browse...

Pobieranie edytora CodeLite

Delphi podstawy programowania. Środowisko Delphi

Krótki kurs obsługi środowiska programistycznego Turbo Pascal z 12 Opracował Jan T. Biernat. Wstęp

Laboratorium 1 - Programowanie proceduralne i obiektowe

Programowanie komponentowe. Przykład 1 Bezpieczeństwo wg The Java EE 5 Tutorial Autor: Zofia Kruczkiewicz

Wstęp - Prosta aplikacja internetowa w technologii Java EE 5. Programowanie komponentowe 1

Aplikacje WWW - laboratorium

INSTRUKCJE JAK AKTYWOWAĆ SWOJE KONTO PAYLUTION

Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski SYSTEMY SCADA

Transkrypt:

Laboratorium OiOSE. Projektowannie kontrolek ActiveX 1 Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych Organizacja i Oprogramowanie Systemów Elektronicznych Michał Kowalewski Projektowannie kontrolek ActiveX Politechnika Gdańska 2011

Laboratorium OiOSE. Projektowannie kontrolek ActiveX 2 1. Wprowadzenie Celem ćwiczenia jest zaznajomienie z metodologią projektowania i wykorzystania w aplikacji kontrolki ActiveX. Projektowana kontrolka będzie pełniła funkcjonalność zbliżoną do systemowej kontrolki typu Slider Control. Kontrolka typu Slider Control Projektowana kontrolka Programowanie realizowane jest w środowisku Microsoft Visual Studio. 2. Zadania do wykonania 1. Uruchomić środowisko MS Visual Studio 2005 lub 2008. 2. W menu View wybrać następujące okna: Solution Explorer, Class View, Resource View, Output, Toolbox, Properties Window. Pozostałe okna zamknąć. 3. Utworzyć nowy projekt kontrolki ActiveX bazujący na bibliotece MFC: a. Uruchomić kreatora aplikacji: File/New/Project Project Types/Visual C++/MFC/MFC ActiveX Control b. W polu Name wpisać nazwę programu i kliknąć OK. W nalszej części instrukcji nazwa programu została onaczona jako AX1. c. Wybrać Finish aby utworzyć kontrolkę. 4. Korzystając z zakładki Solution Explorer oraz okna edycji kodu przeanalizować strukturę utworzonego projektu. Jakie jest przeznaczenie klas CAX1Ctrl i CAX1PropPage? 5. Skompilować projekt (klawisz F7). 6. Uruchomić program ActiveX Control Test Container (menu Tools). 7. Wybrać Edit/Insert New Control... i otworzyć wygenerowaną kontrolkę. Znaleźć fragment kodu programu odpowiedzialny za rysowanie widocznej na ekranie figury geometrycznej. 8. Dodawanie właściwości, metod i zdarzeń do kontrolki: a. Zdefiniować w klasie CAX1Ctrl 3 właściwości typu SHORT: Pos, Min i Max. W tym celu przejść do zakładki Class View, wybrać AX1Lib/_DAX1 i z menu kontekstowego (dla każdej właściwości) wybrać opcję Add/Add Property...

Laboratorium OiOSE. Projektowannie kontrolek ActiveX 3 b. Dodać do klasy CAX1Ctrl metody GetRange i SetRange, których zadaniem będzie odczyt i ustawianie wartości właściwości Min i Max. W tym celu przejść do zakładki Class View, wybrać AX1Lib/_DAX1 i z menu kontekstowego wybrać opcję Add/Add Method... c. Zdefiniować zdarzenia PosChanged i RangeChanged generowane przez kontrolkę przy aktualizacji zmiennych Pos, Min i Max. W tym celu przejść do zakładki Class View, wybrać klasę CAX1Ctrl i z menu kontekstowego wybrać opcję Add/Add Event... 9. Zdefiniowanie funkcji kontrolujących wartości właściwości Pos, Min i Max. Zakładamy, iż bieżące położenie suwaka Pos spełnia warunek Min Pos Max. Próba przypisania zmiennej Pos wartości spoza tego zakresu powinna skutkować skorygowaniem wartości do wartości granicznej Min lub Max. W tym celu należy zdefiniować w klasie CAX1Ctrl funkcję CheckRange o następującej postaci

Laboratorium OiOSE. Projektowannie kontrolek ActiveX 4 bool CAX1Ctrl::CheckPos(void){ BOOL modified = FALSE; if (m_pos < m_min) { m_pos = m_min; modified = TRUE; else if (m_pos > m_max) { m_pos = m_max; modified = TRUE; return modified; Kolejną kwestią jest sprawdzenie warunku Min < Max. Jeżeli nie jest on spełniony wówczas przyjmujemy wartości domyślne: Min = 0, Max = 100. W tym celu definiujemy w klasie CAX1Ctrl funkcję CheckRange o następującej postaci bool CAX1Ctrl::CheckRange(void){ BOOL modified = FALSE; if (m_min >= m_max) { m_min = 0; m_max = 100; modified = TRUE; return modified; 10. Dodać do klasy CAX1Ctrl zmienne typu SHORT: m_pos, m_pos0 i m_width. 11. Edycja kodu źródłowego a. W funkcji OnResetState() dodać inicjalizację właściwości domyślnymi wartościami: Min = 0, Pos = 50, Max = 100. b. W funkcji GetPos() zamienić return 0; na return m_pos; c. Uzupełnić funkcję SetPos() dodając po //TODO następujące instrukcje m_pos = newval; if (CheckPos()) FirePosChanged(m_Pos); d. Uzupełnić funkcję OnMinChanged() i OnMaxChanged() dodając po //TODO te same instrukcje if (CheckRange()) FireRangeChanged(m_Min,m_Max); if (CheckPos()) FirePosChanged(m_Pos); e. Uzupełnić funkcję GetRange() dodając po //TODO następujące instrukcje *min = m_min; *max = m_max; f. Uzupełnić funkcję SetRange() dodając po //TODO następujące instrukcje m_min = min; m_max = max; if (CheckRange()) FireRangeChanged(m_Min,m_Max); if (CheckPos()) FirePosChanged(m_Pos); SetModifiedFlag();

Laboratorium OiOSE. Projektowannie kontrolek ActiveX 5 g. Zmodyfikować funkcję OnDraw() w sekcji TODO. // szerokość kontrolki m_width = rcbounds.right - rcbounds.left; // obliczenie położenia suwaka względem okienka kontrolki int centerpos = m_width * (m_pos-m_min) / (m_max-m_min); // suwak stanowi dwa przylegające do siebie prostokąty CRect selbounds = rcbounds, notselbounds = rcbounds; selbounds.right = centerpos; notselbounds.left = centerpos; CBrush lselbrush; lselbrush.createsolidbrush(rgb(0, 64, 224)); pdc->selectobject(&lselbrush); pdc->fillrect(selbounds,&lselbrush); CBrush lnotselbrush; lnotselbrush.createsolidbrush(rgb(224, 224, 224)); pdc->selectobject(&lnotselbrush); pdc->fillrect(notselbounds,&lnotselbrush); 12. Dodać do projektu funkcje obsługi zdarzeń WM_MOUSEMOVE i WM_LBUTTONDOWN i i WM_LBUTTONUP. W tym celu przejść do zakładki Class View, wybrać klasę CAX1Ctrl, z menu kontekstowego wybrać Properties i przejść do zakładki Messages. Dodać funkcje OnMouseMove, OnLButtonDown oraz OnLButtonUp. a. Uzupełnić kod źródłowy funkcji OnMouseMove dodając po TODO następujące instrukcje if ((nflags & MK_LBUTTON) == MK_LBUTTON) { m_pos = m_min + (m_max - m_min) * (point.x + m_width /(m_max - m_min)/2) / m_width; CheckPos(); if (m_pos!= m_pos0) { m_pos0 = m_pos; SetModifiedFlag(); b. Uzupełnić kod źródłowy funkcji OnLButtonDown dodając po TODO następujące instrukcje SetCapture(); m_pos = m_min + (m_max - m_min) * (point.x + m_width /(m_max - m_min)/2) / m_width; CheckPos(); if (m_pos!= m_pos0) { m_pos0 = m_pos; SetModifiedFlag(); c. Uzupełnić kod źródłowy funkcji OnLButtonUp dodając po TODO instrukcję ReleaseCapture();

Laboratorium OiOSE. Projektowannie kontrolek ActiveX 6 13. Skompilować projekt i przetestować działanie kontrolki za pomocą programu ActiveX Control Test Container. Sprawdzić działanie metod GetRange, SetRange, GetPos, SetPos. 14. Edycja okna właściwości a. Przejść do zakładki Resource View i otworzyć okno dialogowe o identyfikatorze IDD_PROPPAGE_AX1. b. Umieścić na panelu 3 kontrolki Static Text i określić ich nazwy w polu Caption jako Min, Pos i Max. c. Umieścić na panelu 3 kontrolki Edit Control i zdefiniować ich identyfikatory jako: IDC_MIN, IDC_POS i IDC_MAX. d. Dodać do kontrolek zmienne typu SHORT: Pos, Min i Max 15. Edycja kodu źródłowego a. Dodać do funkcji DoDataExchange klasy CAX1PropPage następujące instrukcje: DDP_Text(pDX, IDC_POS, pos, _T("Pos") ); DDP_Text(pDX, IDC_MIN, Min, _T("Min") ); DDP_Text(pDX, IDC_MAX, Max, _T("Max") ); Funkcja DDP_PostProcessing(pDX) powinna być wywołana na samym końcu! b. Dodać do funkcji DoPropExchange klasy CAX1Ctrl następujące instrukcje: PX_Short(pPX, _T("Min"), (short &)m_min, 0); PX_Short(pPX, _T("Pos"), (short &)m_pos, 50); PX_Short(pPX, _T("Max"), (short &)m_max, 100); 16. Sprawdzić w dokumentacji MSDN przeznaczenie funkcji DDX_, DDP_ i PX_. 17. Przetestować działanie okna właściwości w programie ActiveX Control Test Container.

Laboratorium OiOSE. Projektowannie kontrolek ActiveX 7 Zadanie dodatkowe 1 - Adding "Stock" properties The term stock properties means that its one of a set of common properties that MFC code stores and initializes for you. The MFC code also performs appropriate action when the value of a stock property is changed. The ClassWizard provides code for changing nine (9) such properties. Since these properties are built-in, they are obviously the easiest to deal with in terms of the work required by the developer. As you'll see shortly, you literally don't add a single line of code to add stock property to your control! The Visual Studio provides code for the following stock properties: o Appearance o BackColor o ForeColor o BorderStyle o Font o Caption o Enable o Text o hwnd From these, we will work with the BackColor and ForeColor properties. We'll start by adding the BackColor stock property 1. Select AX1Lib/_DAX1 in Class View window. Next choose Add/Add Property... 2. Click Finish button to finalize the generation of the stock property. At this point, the ClassWizard will store the value of the BackColor property and initialize it to background color of the container window. The ClassWizard will also add the following line to your control's IDL file: [id(dispid_backcolor), bindable, requestedit] OLE_COLOR BackColor; Finally, ClassWizard will also add the code to invalidate the control whenever the value of the BackColor property changes, thereby forcing the OnDraw function to redraw the control. The only thing you have to do is to use the color contained in the property to paint the background color of control.

Laboratorium OiOSE. Projektowannie kontrolek ActiveX 8 At this point, replace the following line of code in OnDraw function lnotselbrush.createsolidbrush(rgb(224, 224, 224)); lnotselbrush.createsolidbrush(translatecolor(getbackcolor())); Now, let's add a Color property page to the program. This page will allow users of the control to change the BackColor our newly added property property at design-time. To do this, simply open the AX1Ctrl.cpp file and locate the // Property pages comment. Once you've done that, you should see the following: BEGIN_PROPPAGEIDS(CPlotCtrl, 1) ROPPAGEID(CPlotPropPage::guid) END_PROPPAGEIDS(CPlotCtrl) The first line tells the compiler how many pages exist. Notice that it's set to 1. Change this value to 2 as we're going to add a new page. Now insert the following line just before the END_PROPPAGEIDS line (The CLSID_CColorPropPage is defined automatically since this is a property page CLSID for a stock property). PROPPAGEID(CLSID_CColorPropPage) Once you've finished, your new property page id map should look like the following: BEGIN_PROPPAGEIDS(CPlotCtrl, 2) PROPPAGEID(CPlotPropPage::guid) PROPPAGEID(CLSID_CColorPropPage) END_PROPPAGEIDS(CPlotCtrl) Once you make the above changes, the stock property page is automatically linked to the BackColor property. Now that you've seen how to add the BackColor stock property to an ActiveX control, follow these same steps in order to add the ForeColor property. Note that you do not need to add a property page for the second property. Replace the following line of code in OnDraw function lselbrush.createsolidbrush(rgb(0, 64, 224)); lselbrush.createsolidbrush(translatecolor(getforecolor()));

Laboratorium OiOSE. Projektowannie kontrolek ActiveX 9 After adding these stock properties, build your control and test it using ActiveX Test Container. As you can see in the figure below, the ClassWizard has added the appropriate controls for changing the stock properties. Zadanie dodatkowe 2 Napisać program wykorzystujący utworzoną kontrolkę ActiveX. 1. Utworzyć nowy projekt bazujący na bibliotece MFC i oparty o okna dialogowe: a. Uruchomić kreatora aplikacji: File/New/Project Project Types/Visual C++/MFC/MFC Application b. W polu Name wpisać nazwę programu i kliknąć OK. c. W kolejnych krokach wybrać rodzaj aplikacji: Dialog Based. 2. Wstawić na panelu dwie kontrolki: Slider Control i AX1. 3. Dodać zmienne typu kontrolnego do obu kontrolek. 4. Dodać do programu procedury obsługi zdarzenia zmiany położenia suwaka kontrolek Slider Control oraz AX1. W tym celu wybrać jedną z kontrolek, a następnie z menu kontekstowego wybrać opcję Add Event Handler. W przypadku kontrolki Slider Control wybrać komunikat powiedomienia NM_CUSTOMDRAW, natomiast w przypadku kontrolki AX1 zdarzenie PosChanged. 5. Uzupełnić kod źródłowy utworzonych funkcji. Kontrolka SliderControl powinna zmieniać położenie suwaka kontrolki AX1 i odwrotnie zmiana położenia suwaka kontrolki AX1 powinna aktualizować położenie suwaka kontrolki SliderControl.