• Keine Ergebnisse gefunden

Grundlagen in Visual Studio in Visual Studio MFC und .net

N/A
N/A
Protected

Academic year: 2021

Aktie "Grundlagen in Visual Studio in Visual Studio MFC und .net"

Copied!
54
0
0

Wird geladen.... (Jetzt Volltext ansehen)

Volltext

(1)

1 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Grundlagen

Grundlagen in Visual Studio in Visual Studio MFC und .net

MFC und .net

Dipl.-Inf., Dipl.-Ing. (FH) Michael Wilhelm

Hochschule Harz

FB Automatisierung und Informatik

mwilhelm@hs-harz.de

Raum 2.202

Tel. 03943 / 659 338

(2)

Inhalt

1. Einführung, Windows-Schleife, API, MFC 2. Grafik

3. Dialogfenster

4. MFC-Zusatzklassen

5. SDI-Programme

(3)

3 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Visual Studio Wizard:

1. File / New / Project STRG+Shift+N 2. Visual Studio

3. MFC

4. MFC-Application

(4)

Visual Studio Wizard:

(5)

5 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Auswahl: Dialog

(6)

Dialog: Programmtyp: Dialog, SDI, MDI

(7)

7 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Dialog: User Interface Features

(8)

Dialog: Erweiterte Eigenschaften

(9)

9 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Dialog: Klassennamen

(10)

Erzeugte Dateien:

Header-Dateien:

• dialog.h

• dialogDlg.h

• resource.h

Quellcode-Dateien:

• dialog.cpp Windowsrahmen, erzeugt das Dialogfenster, ruft es auf

• dialogDlg.cpp Dialogfenster

• dialog.rc Klassen:

• CDialogApp abgeleitet von CWinApp

• CDialogDlg abgeleitet von CDialog

(11)

11 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Dialog: IDE, Klassen

(12)

Weitere Eigenschaften

Vorgehensweise:

Anzeige der Werkzeugleiste, GUI-Elemente

Menü View, Eintrag: Toolbox (STRG+ALT+X)

Änderung des Unicode-Eintrags

Menü Project, Eintrag: Properties (ALT+7)

Eintrag: Configuration Properties

Eintrag: General

Eintrag: Use UNICODE Response File

Wert auf „No“ setzen

(13)

13 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

AfxMessageBox (_T("String"));

Zeigt eine modale Meldung

Wichtige Funktionen

(14)

int MessageBox(lpText, lpCaption: PChar;

uType: UINT);

Flag für Funktionen

MB_ABORTRETRYIGNORE MB_OK

MB_OKCANCEL

MB_RETRYCANCEL MB_YESNO

MB_YESNOCANCEL Flag des Symbols

MB_ICONEXCLAMATION, MB_ICONWARNING

MB_ICONINFORMATION MB_ICONASTERISK

MB_ICONQUESTION MB_ICONSTOP

MB_ICONERROR MB_ICONHAND

Wichtige Funktionen

Flag für den Default-Schalter (Eingabetaste) MB_DEFBUTTON1

MB_DEFBUTTON2 MB_DEFBUTTON3 MB_DEFBUTTON4

Flags der Modalität MB_APPLMODAL MB_SYSTEMMODAL MB_TASKMODAL

Gültige Rückgabewerte:

IDABORT IDCANCEL IDIGNORE IDNO

IDOK

IDRETRY

IDYES

(15)

18 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

retcode = MessageBox("Text","Caption",

MB_ABORTRETRYIGNORE | MB_ICONWARNING);

int retcode = MessageBox("Text","Caption",MB_OK | MB_ICONWARNING);

(16)

int retcode = MessageBox(_T("Text"), _T("Caption"), MB_YESNO | MB_ICONQUESTION);

switch (retcode) { case IDYES:

AfxMessageBox("YES gedrückt");

break;

case IDNO:

AfxMessageBox("NO gedrückt");

break;

}

(17)

20 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

retcode = MessageBox("Text","Caption",

MB_YESNOCANCEL | MB_ICONERROR | MB_DEFBUTTON3);

switch (retcode) { case IDYES:

AfxMessageBox("YES gedrückt");

break;

case IDNO:

AfxMessageBox("NO gedrückt");

break;

case IDCANCEL:

AfxMessageBox("CANCEL gedrückt");

break;

}

(18)

Label, CStatic

Editorfeld, CEdit

Groupbox

Schalter, Klasse CButton

check box

radio button

pushbutton

ComboBox, CComboBox

Listenfeld, CListBox

Bildlaufliste, CScrollBar

Drehfeld, CSpinButtonCtrl

Statusanzeige

Tab-Control

Dialogelemente in Visual Studio

Regler

Zugriffstasten

Listenelement

Strukturansicht (Baum)

Registerkarte

Animation

Rich Edit

Datum- Zeitauswahl

Kalender

IP-Adresse

Erweitertes Kombinationsfeld

(19)

22 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Propertie-Dialog

(20)

Eigenschaften eines Labels

ID-Kennung

Beschriftung

Textausrichtung

Enabled

Kein Umbruch

Mit Rand

Vertieft

Visible

Dialogelemente: CStatic

(21)

24 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Eigenschaften des Editorfeldes

ID-Kennung

Textausrichtung

Einzeilig, mehrzeilig

Kennwort

Groß- Kleinbuchstaben

Nummer

Readonly

Enabled

Visible

Dialogelemente: CEdit

(22)

Eigenschaften eines Radiobuttons

ID-Kennung

Groupbox ist nur optisch

Der Anfang einer Gruppe wird definiert durch Element „Gruppe“ mit dem Wert

„TRUE“

Tabulator-Reihenfolge ändern mit Strg-D

Dialogelemente: CRadioButton

(23)

26 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Eigenschaften einer CheckBox

ID-Kennung

Groupbox ist nur optisch

Sichtbar

Enabled

Tabulator-Reihenfolge ändern mit Strg-D

Dialogelemente: CCheckBox

(24)

Eigenschaften eines Drehfeldes

ID-Kennung

Verknüpft mit einem Editorfeld

Änderung per Mausklick

Buddy-Eigenschaft setzen

Sichtbar

Enabled

Tabulator-Reihenfolge ändern mit Strg-D

Dialogelement: Drehfeld, CSpinButtonCtrl

(25)

28 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Einfügen eines Drehfeldes

Einfügen eines Editorfeldes

Ändern der Number-Eigenschaften im Editorfeld

Sofort danach Einfügen des Drehfeldes

Ändern der beiden Buddy-Eigenschaften im Register „Formate“

Ändern der ID auf z. B. IDC_SPIN_XTICKS

Damit ist die Verknüpfung zum Editorfeld definiert

Leider ist die Reihenfolge (Decrement, Increment) falsch

Abhilfe:

Dazu muss in der OnInitDialog-Methode folgender Code eingefügt werden:

m_SpinX1.SetRange(0,12); // (Membervariable) m_SpinX2.SetRange(0,12);

Dialogelement: Drehfeld, CSpinButtonCtrl

(26)

Eigenschaften der Combox

Dialogelemente: CComboBox

Dropdown (Liste und Editor)

• Dropdown-Listenfeld (Keine weitere Eingabe möglich)

• Einfacher Editor

(27)

30 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Eigenschaften der Combox

• Eintrag Data

• Eingabe jedes Wertes

• Trennen mit Semikolon

Dialogelemente: CComboBox

Inhalt:

123;456;789

(28)

Erzeugen einer Combox mit Drag & Drop

• Anklicken in der Werkzeugleiste

• Im Dialogfenster auf die gewünschte aufklappbare Größe aufziehen. Mehrere Zeilen hoch!!

Dialogelemente: CComboBox: Wichtig

Blau ist der aufgezogene Bereich.

Der roter Rahmen ist die Abmessung der ComboBox (automatisch). Dieser

Bereich definiert die

aufklappbare Liste.

(29)

32 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Nachträgliches Ändern der Länge der Liste

Dialogelemente: CComboBox: Wichtig

Auf den Haken klicken, bis das untere mittlere Quadrat schwarz ist.

Nun mit der linken Maustaste dieses

Quadrat nach unten schieben

(30)

Membervariablen der ComboBox eintragen

• Rechte Maustaste

• Eintrag: Add Variable

Dialogelemente: CComboBox:

(31)

34 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

(32)

Initialisierung der Combox (CString Membervariable)

Dialogelemente: CComboBox:

BOOL Cdialog1Dlg::OnInitDialog() {

CDialog::OnInitDialog();

// TODO: Add extra initialization here

m_ComboControl.AddString(_T("Value1"));

m_ComboControl.AddString(_T("Value2"));

return TRUE; // return TRUE unless you set the focus to a control }

_T ist ein Makro für Unicode

(33)

36 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Abfrage des aktuelles Textes der Combox (CString M-Var)

Dialogelemente: CComboBox:

void Cdialog1Dlg::OnBnClickedButton1() {

CString sStr;

UpdateData(true);

sStr = m_Combo;

AfxMessageBox(sStr);

}

UpdateData(bRichtung)

TRUE ⇒ Aus GUI nach Membervariable

FALSE ⇒ Aus Membervariable nach GUI

(34)

Member-Variablen

• Editfeld: CString

• CheckBox: BOOL

• ListBox: CString

• RadioButton: int (Gruppen bezogen, 0..N-1)

UpdateData(bRichtung)

TRUE ⇒ Aus GUI nach Membervariable

FALSE ⇒ Aus Membervariable nach GUI

Ereignisprozedur (Actionlistener)

Funktionen mit Dialogelemente

(35)

38 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

1. Beispiel: Strings

ID-Kennungen:

IDC_QUELLE

IDC_ZIEL1

IDC_ZIEL2

IDC_CALC

Aufgaben

Transportieren eines String per Schalter

Transportieren eines String bei Änderung

(36)

Erzeugen von Member-Variablen

Membervariablen der Quelle eintragen

• Rechte Maustaste

• Eintrag: Add Variable

(37)

40 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Member-Variablen

IDC_QUELLE IDC_ZIEL1 IDC_ZIEL2

m_ziel1_str

m_quelle_str m_ziel2_str

(38)

Member-Variablen: Überblick, gibt es nur in Visual Studio 6

(39)

42 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Erzeugen von Member-Variablen: Definition

void CDialogDlg::DoDataExchange(CDataExchange* pDX) {

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CDialogDlg)

DDX_Text(pDX, IDC_QUELLE, m_quelle_str);

DDX_Text(pDX, IDC_ZIEL1, m_ziel1_str);

DDX_Text(pDX, IDC_ZIEL3, m_ziel2_str);

//}}AFX_DATA_MAP }

Diese Methode bitte nicht direkt aufrufen ! (UpdateData)

(40)

Initialisierung von GUI-Elementen: 1. Variante

Vor dem Konstruktor wird die Member-Variable definiert BOOL Cbsp1Dlg::OnInitDialog()

{

m_quelle_str = "Hallo";

m_ziel1_str = "1. Ziel";

m_ziel2_str = "2. Ziel";

CDialog::OnInitDialog(); // // Elemente werden gezeichnet return TRUE;

}

(41)

44 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Initialisierung von GUI-Elementen: 2. Variante

Vor dem Konstruktor wird die Member-Variable definiert BOOL CDialogDlg::OnInitDialog()

{

CDialog::OnInitDialog(); // Elemente werden gezeichnet m_quelle_str = "Hallo";

m_ziel1_str = "1. Ziel";

m_ziel2_str = "2. Ziel";

UpdateData(FALSE); // // Elemente werden gezeichnet return TRUE;

}

(42)

Ereignisroutine definieren

Vorgehensweise:

Doppelklick auf den Schalter

Ändern des Namens der Methode in der Propertie-Liste

void Cbsp1Dlg::OnBnClickedButton1() {

// TODO: Add your control notification handler code here

}

(43)

46 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Ereignisroutine definieren

1. Version:

void CDialogDlg::OnCalc() {

m_ziel1_str = m_quelle_str;

}

2. Version:

void CDialogDlg::OnCalc() {

UpdateData(TRUE);

m_ziel1_str = m_quelle_str;

}

(44)

Ereignisroutine definieren

3. Version:

void CDialogDlg::OnCalc() {

// Übertragung in die MemberVariablen UpdateData(TRUE);

m_ziel1_str = m_quelle_str;

// Übertragung von den MemberVariablen UpdateData(FALSE);

}

(45)

48 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

1. Beispiel: Aufgabe: Transportieren eines String

von IDC_QUELLE nach IDC_ZIEL2 Aktion bei Änderung

Vorgehensweise:

Membervariablen erzeugen

Ereignisroutine OnChange definieren

Datentransfer von einer Variablen zur anderen

UpdateData aufrufen

(46)

Ereignisroutine definieren

Vorgehensweise:

Anklicken der Quelle im Dialog

In der Propertie-Liste: Auswahl Ereignisse

Auswahl in der ComboBox

Automatischer Name

OnEnChangeQuelle

(47)

50 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Ereignisroutine definieren

void CDialogDlg::OnEnChangeQuelle () {

// Übertragung in die MemberVariablen UpdateData(TRUE);

m_ziel2_str = m_quelle_str;

// Übertragung von den MemberVariablen UpdateData(FALSE);

}

(48)

GUI-Element: Button, Radionbutton, Checkbox

Dialogelemente: CButton:

CButton * pBtn1 = (CButton *) GetDlgItem(IDC_RADIO1);

CButton * pBtn2 = (CButton *) GetDlgItem(IDC_RADIO2);

UpdateData(true);

m_RadioFB_Control=2;

if (m_CheckboxFB) {

m_ComboFB=0; // group=true, init-Wert

pBtn1->EnableWindow( true); // Disabled(false) pBtn2->EnableWindow( true);

}

else {

pBtn1->EnableWindow( false);

pBtn2->EnableWindow( false);

}

UpdateData(false);

(49)

52 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Übertragung der Daten

Event-Methode eines RadioButtons // Alternative zur GUI-Variable

int k, iChangeButton;

// ID holen

k = GetCheckRadioButton( IDC_RADIO1, IDC_RADIO3);

// welcher Button wurde geändert?

iChangeButton = k - IDC_RADIO1+1;

// Setzen der Beschriftung

SetDlgItemInt( IDC_STATIC1, iChangeButton);

// für alle RadioButtons

(50)

Übertragung der Daten

Event-Methode eines RadioButtons

// Aufruf eines zusätzlichen Dialogfensters // Abfrage der gesetzten Werte

CMyDialog dlg;

dlg.m_radio1 = 0;

if (dlg.DoModal() == IDOK) { CString sStr;

sStr.Format("R1: %d R2: %d",dlg.m_radio1,dlg.m_radio2);

AfxMessageBox(sStr);

}

(51)

54 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

Übertragung der Daten

Eigenschaften der Liste

BOOL CTestDlg::OnInitDialog() { CDialog::OnInitDialog();

// TODO: Hier zusätzliche Initialisierung einfügen

CListBox * pListBox = (CListBox *) GetDlgItem(IDC_LIST1);

pListBox->AddString("a");

pListBox->AddString("b");

pListBox->AddString("c");

pListBox->AddString("d");

return TRUE;

}

(52)

Manuelle Übertragung der Daten von einer Liste in ein Label

Eigenschaften der Liste // OnSelChange der Liste

BOOL CTestDlg::OnLbnSelchangeList1 () { // ohne Membervariable

CListBox * pListBox = (CListBox *) GetDlgItem(IDC_LIST1);

CString sMsg;

pListBox->GetText( pListBox->GetCurSel(), sMsg);

SetDlgItemText( IDC_STATIC1, sMsg);

}

Einfache Ausgabe

UpdateData(true);

AfxMessageBox(m_liste);

(53)

56 FB Automatisierung und Informatik: GUI mit Visual Studio: MFC / .net

// Ohne Membervariable

BOOL CTestDlg::OnSelchangeCombo1() { CComboBox * pComboBox;

pComboBox = (CComboBox *) GetDlgItem(IDC_COMBO1);

CString sMsg;

pComboBox->GetLBText( pComboBox->GetCurSel(), sMsg);

SetDlgItemText( IDC_STATIC1, sMsg);

}

Manuelle Übertragung der Daten von einer Liste in ein Label

(54)

Übungen

Dialogfenster mit Übertragung der Strings

Dialogfenster mit Übertragung einer Zahl

IDC_QUELLE eintragen einer Zahl

Wenn numerisch, dann Ausgabe: „Ergebnis: 123“

Dialogfenster mit Übertragung von berechneten Zahlen

Zwei Editfelder (Input, A und B)

Eine ComboBox (mathematische Operation)

Ein Schalter

Ein Editfeld (Output C) in Abhängigkeit der Operation

Referenzen

ÄHNLICHE DOKUMENTE

Halle (Saale), Berlin, Berlin-Neukölln, Chemnitz, Hannover, Köln, Leipzig, Reutlingen, Stuttgart, Ulm, Erfurt, Jena, Marburg, Nordhausen, Brand-Erbisdorf, Bernburg,

Halle (Saale), Berlin, Berlin-Neukölln, Chemnitz, Hannover, Köln, Leipzig, Reutlingen, Stuttgart, Ulm, Erfurt, Jena, Marburg, Nordhausen, Brand-Erbisdorf, Bernburg,

Halle (Saale), Berlin, Berlin-Neukölln, Chemnitz, Hannover, Köln, Leipzig, Reutlingen, Stuttgart, Ulm, Erfurt, Jena, Marburg, Nordhausen, Brand-Erbisdorf, Bernburg,

Halle (Saale), Berlin, Berlin-Neukölln, Chemnitz, Hannover, Köln, Leipzig, Reutlingen, Stuttgart, Ulm, Erfurt, Jena, Marburg, Nordhausen, Brand-Erbisdorf, Bernburg,

Halle (Saale), Berlin, Berlin-Neukölln, Chemnitz, Hannover, Köln, Leipzig, Reutlingen, Stuttgart, Ulm, Erfurt, Jena, Marburg, Nordhausen, Brand-Erbisdorf, Bernburg,

Halle (Saale), Berlin, Berlin-Neukölln, Chemnitz, Hannover, Köln, Leipzig, Reutlingen, Stuttgart, Ulm, Erfurt, Jena, Marburg, Nordhausen, Brand-Erbisdorf, Bernburg,

Halle (Saale), Berlin, Berlin-Neukölln, Chemnitz, Hannover, Köln, Leipzig, Reutlingen, Stuttgart, Ulm, Erfurt, Jena, Marburg, Nordhausen, Brand-Erbisdorf, Bernburg,

Bereits compilierte Quellen (*.obj) können ins Verzeichnis [~\MySw\]_Libs kopiert, per Drag&Drop im Projektmappen-Explorer des VS2010 als Quellcodedateien eingebunden und