Microsoft Foundation Classes



Podobne dokumenty
Tworzenie projektu asemblerowego dla środowiska Visual Studio 2008.

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

Politechnika Gdańska Katedra Optoelektroniki i Systemów Elektronicznych

Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch

Instrukcja laboratoryjna cz.3

Informatyka I : Tworzenie projektu

Praca w środowisku Visual Studio 2008, Visual C

Król Łukasz Nr albumu:

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Programowanie RAD Delphi

1.Wstęp. 2.Generowanie systemu w EDK

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

MonoGame. Wieloplatformowe gry w C# Mateusz Cicheński

Spis treści. Rozdział 1. Aplikacje konsoli w stylu ANSI C i podstawowe operacje w Visual C

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

I - Microsoft Visual Studio C++

Qt sygnały i designer

Zadania: 1. Funkcja przeliczająca F na C: float FtoC(float f){ return (f 32.0) * 5.0 / 9.0; }

#line #endif #ifndef #pragma

Projektowanie i programowanie aplikacji biznesowych. Wykład 2

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Java jako język programowania

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

Wykład 5 Okna MDI i SDI, dziedziczenie

Programowanie niskopoziomowe

Implementacja aplikacji sieciowych z wykorzystaniem środowiska Qt

Programowanie obiektowe

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

IFiZR Laboratorium 5 Info

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

PROE wykład 8 Interfejs użytkownika (GUI) dr inż. Jacek Naruniec

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 8. Karol Tarnowski A-1 p.

Wykłady 1, 2. Wstęp do programowania w środowisku Visual C++ Autor: Zofia Kruczkiewicz

Programowanie proceduralne w języku C++ Podstawy

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

Wprowadzenie do biblioteki klas C++

Delphi podstawy programowania. Środowisko Delphi

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Podczas dziedziczenia obiekt klasy pochodnej może być wskazywany przez wskaźnik typu klasy bazowej.

DYNAMICZNE PRZYDZIELANIE PAMIECI

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

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

Automatyzacja kompilacji. Automatyzacja kompilacji 1/28

Język ludzki kod maszynowy

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

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Laboratorium Projektowania Systemów VLSI-ASIC Katedra Elektroniki Akademia Górniczo-Hutnicza

Wprowadzenie do środowiska Qt Creator

Programowanie obiektowe

Microsoft Visual Studio: zintegrowane środowisko programistyczne (IDE), umożliwia tworzenie samodzielnych aplikacji, aplikacji sieciowych, usług

Programowanie obiektowe zastosowanie języka Java SE

Metody Metody, parametry, zwracanie wartości

Analiza i projektowanie aplikacji Java

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 7. Karol Tarnowski A-1 p.

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Delphi. Lazarus. Kompilatory Delphi. Linki do stron o Delphi

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

ZSBD ćwiczenie 4. Obiektowe systemy zarządzania bazą danych. Przygotowanie środowiska pracy. Wymagania: ZSBD ćwiczenie 4

Programowanie obiektowe i zdarzeniowe wykład 1 Wprowadzenie do programowania zdarzeniowego

Środowiska i platformy programistyczne

Zacznij Tu! Poznaj Microsoft Visual Basic. Michael Halvorson. Przekład: Joanna Zatorska

Programowanie w środowiskach graficznych. Wykład 1 OS, Podstawy Windows API

Rozdział 3. Zapisywanie stanu aplikacji w ustawieniach lokalnych

1 LINQ. Zaawansowane programowanie internetowe Instrukcja nr 1

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

Programowanie w środowiskach RAD Język C++ w środowiskach RAD

I. WSTĘP. Przykład 1. Przykład 2. Programowanie czyli tworzenie programów komputerowych (aplikacji komputerowych)

Programowanie w środowiskach graficznych. Wykład 1 OS, Podstawy Windows API

Wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

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

Od uczestników szkolenia wymagana jest umiejętność programowania w języku C oraz podstawowa znajomość obsługi systemu Windows.

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Ćwiczenie laboratoryjne. Oprogramowanie i badanie stosu lub kolejki w środowisku Visual Basic 2005

Programowanie obiektowe

Kurs programowania. Wykład 9. Wojciech Macyna

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

Projektowanie układów VLSI-ASIC techniką od ogółu do szczegółu (top-down) przy użyciu pakietu CADENCE

Wstęp do programowania

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:

Programowanie obiektowe

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Biorąc udział w projekcie, możesz wybrać jedną z 8 bezpłatnych ścieżek egzaminacyjnych:

Szablony funkcji i szablony klas

Szablony funkcji i klas (templates)

Programowanie niskopoziomowe

4 bity zarezerwowane dla przyszłych zastosowań 11 bitów określających źródło błędu 16 bitów określających rodzaj błędu.

Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja

Programowanie Systemów Czasu Rzeczywistego

Biblioteki DLL. 8 marca 2013

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Narzędzia RAD (wykład 1)

Zaawansowane aplikacje WWW - laboratorium

1. Wybierz File New Application. Pojawi się nowa aplikacja w Delphi.

Zaawansowane środowiska programistyczne 2009/2010

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Przegląd języka Python. Łukasz Anwajler

Programowanie C++ Wykład 1 - Aplikacje konsowlowe w środowisku QT. dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Papyrus. Papyrus. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Programowanie w języku C++ z użyciem Windows API

Transkrypt:

Microsoft Foundation Classes Piotr Janczyk

Co to jest MFC? Jest to podstawowa biblioteka Visual C++, której klasy stanowią szkielet aplikacji dla programów pracujących w systemie Windows. Napisane w języku C++ klasy zawierają bardzo dużo kodu potrzebnego do zarządzania oknami, elementami menu i dialogami; zapewniają podstawowe operacje wejścia/wyjścia i dostarczają gotowe struktury danych: listy, kolekcje itp. Historia: MFC powstała ponad 10 lat temu razem z pojawieniem się Visual C++ 1.0. Od wersji 3.0, aż do obecnej ( 6.0 ) MFC jest biblioteką 32 bitową, poprzednie wersje były 16 bitowe (1.0-2.5). Ze względu na szybko zmieniające się wersje biblioteki, Microsoft zdecydował od wersji 4.2 wprowadzić zgodność ze wszystkimi kolejnymi wersjami. Od tego czasu uaktualnienia biblioteki skompilowane są do pliku MFC42.DLL. Typowe funkcje używane przez Visual C++ zawarte są w bibliotece MSVCRT.DLL, nie są to jednak funkcje biblioteki MFC, co jest często mylone, gdyż obydwa te pliki są potrzebne do prawidłowego działania aplikacji korzystających z MFC. 2

Przykłady aplikacji: SDI Oparta o okienko dialogowe WIN32 Console Application with MFC support MDI Wykorzystując MFC możemy tworzyć ponadto: 1. Kontrolki ActiveX 2. Static Libraries 3. Dynamic-Link Libraries 3

Cechy charakterystyczne: Architektura dokument/widok Technika programowania, w której dane programu (model) oraz interfejs użytkownika są rozdzielone. Zrozumienie tej techniki oraz jej implementacji w MFC jest niewątpliwie konieczne w przypadku programistów zamierzających korzystać z dobrodziejstw oferowanych przez tą bibliotekę. Wśród korzyści wypływających ze stosowania tej techniki trudno przecenić ułatwienie pielęgnacji programu, dzięki wyraźnemu rozgraniczeniu merytorycznej części programu od interfejsu użytkownika. Mapa komunikatów BEGIN_MESSAGE_MAP(CTramView, CScrollView) //AFX_MSG_MAP(CTramView) ON_WM_LBUTTONDOWN() ON_WM_SETCURSOR() ON_WM_LBUTTONDBLCLK() ON_WM_CONTEXTMENU() ON_COMMAND(ID_EDIT_CLEAR, OnEditClear) ON_COMMAND(ID_STATION_PROPERTIES, OnStationProperties) ON_COMMAND(ID_START_SIMULATION, OnStartSimulation) ON_COMMAND(ID_STATION_BEGIN_LINE, OnStationBeginLine) ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() Kolekcje o Biblioteka MFC udostępnia różnego rodzaju kolekcje, które są podobne i równie efektywne jak te z STL: CList (CObList... ) CArray CStringList CMap... 4

Serializacja klas o Jest to bardzo prosty i wygodny sposób zapisywania zawartości całych obiektów klas do pliku lub czegoś innego (drukarka, urządzenia zewnętrzne, itp.). Pisanie aplikacji w Visual C++ Jeżeli budujemy projekt oparty na bibliotece MFC, możemy efektywnie automatyzować proces pisania kodu. Podstawową pomocą w tej czynności jest ClassWizard y : tworzenie okienek, łączenie zdarzeń razem z funkcjami, itp.. Biblioteka zawiera wiele funkcji wspierających debugowanie: o TRACE o ASSERT o Detekcja wycieków pamięci: CMemoryState z metodami: CheckPoint 5

Difference DumpStatistics I wiele innych Przykładowy program: Plik MFC.H #include "resource.h" // main symbols class CMfcApp : public CWinApp public: CMfcApp(); virtual BOOL InitInstance(); DECLARE_MESSAGE_MAP() }; Plik MFC.CPP #include "stdafx.h" #include "mfc.h" BEGIN_MESSAGE_MAP(CMfcApp, CWinApp) //AFX_MSG_MAP(CMfcApp) //}}AFX_MSG_MAP ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN, CWinApp::OnFileOpen) END_MESSAGE_MAP() CMfcApp::CMfcApp() } CMfcApp theapp; BOOL CMfcApp::InitInstance() CMultiDocTemplate* pdoctemplate; pdoctemplate = new CMultiDocTemplate( IDR_MFC1TYPE, RUNTIME_CLASS(CDocument), RUNTIME_CLASS(CMDIChildWnd), RUNTIME_CLASS(CView)); AddDocTemplate(pDocTemplate); CMDIFrameWnd* pmainframe = new CMDIFrameWnd; if (!pmainframe->loadframe(idr_mainframe)) return FALSE; m_pmainwnd = pmainframe; 6

CCommandLineInfo cmdinfo; ParseCommandLine(cmdInfo); if (!ProcessShellCommand(cmdInfo)) return FALSE; pmainframe->showwindow(m_ncmdshow); pmainframe->updatewindow(); } return TRUE; Funkcja WinMain zaszyta wewnątrz biblioteki: ///////////////////////////////////////////////////////////////////////////// // Standard WinMain implementation // Can be replaced as long as 'AfxWinInit' is called first int AFXAPI AfxWinMain(HINSTANCE hinstance, HINSTANCE hprevinstance, LPTSTR lpcmdline, int ncmdshow) ASSERT(hPrevInstance == NULL); int nreturncode = -1; CWinThread* pthread = AfxGetThread(); CWinApp* papp = AfxGetApp(); // AFX internal initialization if (!AfxWinInit(hInstance, hprevinstance, lpcmdline, ncmdshow)) goto InitFailure; // App global initializations (rare) if (papp!= NULL &&!papp->initapplication()) goto InitFailure; // Perform specific initializations if (!pthread->initinstance()) if (pthread->m_pmainwnd!= NULL) TRACE0("Warning: Destroying non-null m_pmainwnd\n"); pthread->m_pmainwnd->destroywindow(); } nreturncode = pthread->exitinstance(); goto InitFailure; } nreturncode = pthread->run(); InitFailure: #ifdef _DEBUG // Check for missing AfxLockTempMap calls if (AfxGetModuleThreadState()->m_nTempMapLock!= 0) TRACE1("Warning: Temp map lock count non-zero (%ld).\n", 7

AfxGetModuleThreadState()->m_nTempMapLock); } AfxLockTempMaps(); AfxUnlockTempMaps(-1); #endif AfxWinTerm(); return nreturncode; } Kompilacja programu: Przykładowy plik konfiguracyjny MAKEFILE wygenerowany przez Visual C++. # Microsoft Developer Studio Generated NMAKE File, Based on MFC.dsp CFG=MFC - Win32 Release!IF "$(OS)" == "Windows_NT" NULL=!ELSE NULL=nul!ENDIF CPP=cl.exe RSC=rc.exe OUTDIR=.\Release INTDIR=.\Release # Begin Custom Macros OutDir=.\Release # End Custom Macros ALL : "$(OUTDIR)\MFC.exe" "$(OUTDIR)" : if not exist "$(OUTDIR)/$(NULL)" mkdir "$(OUTDIR)" CPP_PROJ=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_AFXDLL" /Fp"$(INTDIR)\MFC.pch" /Yu"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c RSC_PROJ=/l 0x415 /fo"$(intdir)\mfc.res" /d "NDEBUG" /d "_AFXDLL" BSC32=bscmake.exe BSC32_FLAGS=/nologo /o"$(outdir)\mfc.bsc" BSC32_SBRS= \ LINK32=link.exe LINK32_FLAGS=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:no /pdb:"$(outdir)\mfc.pdb" /machine:i386 /out:"$(outdir)\mfc.exe" LINK32_OBJS= \ "$(INTDIR)\MFC.obj" \ "$(INTDIR)\StdAfx.obj" \ "$(INTDIR)\MFC.res" 8

"$(OUTDIR)\MFC.exe" : "$(OUTDIR)" $(DEF_FILE) $(LINK32_OBJS) $(LINK32) @ $(LINK32_FLAGS) $(LINK32_OBJS).c$(INTDIR)}.obj:: $(CPP) @.cpp$(intdir)}.obj:: $(CPP) @.cxx$(intdir)}.obj:: $(CPP) @.c$(intdir)}.sbr:: $(CPP) @.cpp$(intdir)}.sbr:: $(CPP) @.cxx$(intdir)}.sbr:: $(CPP) @ SOURCE=.\MFC.cpp "$(INTDIR)\MFC.obj" : $(SOURCE) "$(INTDIR)" "$(INTDIR)\MFC.pch" SOURCE=.\MFC.rc "$(INTDIR)\MFC.res" : $(SOURCE) "$(INTDIR)" $(RSC) $(RSC_PROJ) $(SOURCE) SOURCE=.\StdAfx.cpp CPP_SWITCHES=/nologo /MD /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D "_AFXDLL" /Fp"$(INTDIR)\MFC.pch" /Yc"stdafx.h" /Fo"$(INTDIR)\\" /Fd"$(INTDIR)\\" /FD /c 9

"$(INTDIR)\StdAfx.obj" "$(INTDIR)\MFC.pch" : $(SOURCE) "$(INTDIR)" $(CPP) @ $(CPP_SWITCHES) $(SOURCE) Ustawienia do kompilacji: Ustawieni a konsolidac ji: 10

Alternatywa dla MFC: Inprise stworzył bibliotekę VCL (Visual Component Library), pozwalającą na bardzo prostą obsługę graficznych elementów aplikacji oraz okien dialogowych. Większa część bibliotek VCL została napisana w obiektowym Pascalu. Można również posłużyć się bibliotekami OWL (Object Windows Library) wykorzystywanymi w poprzednich wersjach kompilatorów Borlanda. Innowacją wprowadzoną do najnowszej wersji jest wsparcie dla bibliotek MFC, dzięki któremu możliwe jest łączenie projektów pochodzących ze środowiska Visual C++ Microsoftu z projektami tworzonymi w pakiecie firmy Inprise. 11