Hallo zusammen,
ich arbeite daran ein Projekt zu Bildverarbeitung, dass ich als Konsolenprogramm und auch mit GTK unter Linux entwickelt habe auf eine Windows GUI umzuschreiben. Nach ersten Versuchen mit Windows Forms und C++/CLI hab ich mich nun für MFC entschieden.
Ich bin also MFC-Neuling und habe deshalb einige Grundlagenfragen, für die ich im Internet keine Lösung gefunden habe.
Um möglichst wenig an den ursprünglichen Funktionen und der Struktur ändern zu müssen, möchte ich die Bildverarbeitungsfunktionen in einer eigenen .cpp belassen. Was mir nicht gelingt ist, aus diesen Funktionen auf die Elemente der Dialogklasse zuzugreifen, um z.B. einen String (z.B. Pfad) einzulesen oder ein paar Informationen in eine ListBox zu schreiben.
Quelltextbeispiele:
Dialog-Klasse
"externe" cpp-Datei
Es soll z.B. ein Element zur ListBox m_LogList hinzugefügt werden.
Die 2 Header, die die durch das VS2010/MFC erstellt werden sind eingebunden und ich könnte meine Funktionen als Memberfunktionen der Dialogklasse deklarieren. Das möchte ich aber nicht und das ist sicher auch keine saubere Variante, oder?
Dennoch hätte ich aber gern eine ähnlich einfache Schreibweise wie in der unteren Funktion. Die Listbox ist ja selbst eine Klasse vom Typ CListBox innerhalb der Dialogklasse. Ist es möglich auf diese Elemente ohne weiteres zuzugreifen?
Danke für eure Hilfe!
Mfg lmeinel
ich arbeite daran ein Projekt zu Bildverarbeitung, dass ich als Konsolenprogramm und auch mit GTK unter Linux entwickelt habe auf eine Windows GUI umzuschreiben. Nach ersten Versuchen mit Windows Forms und C++/CLI hab ich mich nun für MFC entschieden.
Ich bin also MFC-Neuling und habe deshalb einige Grundlagenfragen, für die ich im Internet keine Lösung gefunden habe.
Um möglichst wenig an den ursprünglichen Funktionen und der Struktur ändern zu müssen, möchte ich die Bildverarbeitungsfunktionen in einer eigenen .cpp belassen. Was mir nicht gelingt ist, aus diesen Funktionen auf die Elemente der Dialogklasse zuzugreifen, um z.B. einen String (z.B. Pfad) einzulesen oder ein paar Informationen in eine ListBox zu schreiben.
Quelltextbeispiele:
Dialog-Klasse
Code:
// CImageLab2011Dlg-Dialogfeld
class CImageLab2011Dlg : public CDialogEx
{
// Konstruktion
public:
CImageLab2011Dlg(CWnd* pParent = NULL); // Standardkonstruktor
// Dialogfelddaten
enum { IDD = IDD_IMAGELAB2011_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV-Unterstützung
// Implementierung
protected:
HICON m_hIcon;
// Generierte Funktionen für die Meldungstabellen
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
public:
afx_msg void OnEnChangeMfceditbrowse2();
afx_msg void OnBnClickedOk();
afx_msg void OnBnClickedMfcbutton1();
afx_msg void OnBnClickedButton1();
afx_msg void OnEnChangeMfceditbrowse1();
CMFCEditBrowseCtrl m_Pfad1;
CMFCEditBrowseCtrl m_Pfad2;
CMFCEditBrowseCtrl m_Pfad3;
afx_msg void OnBnClickedResetbtn();
CString StrPfad1;
CString StrPfad2;
CString StrPfad3;
CListBox m_LogList;
//falls man die eigene Funktion als Member der Dialog-Klasse deklariert
void processImage();
};
"externe" cpp-Datei
Es soll z.B. ein Element zur ListBox m_LogList hinzugefügt werden.
Code:
//processImage.cpp: Hauptprojektdatei
#include "stdafx.h"
#include "processImage.h" //beinhaltet MFC-Header
//eigene Fkt. als Member der Dialog-Klasse - funktioniert:
void CImageLab2011Dlg::processImage()
{
m_LogList.AddString("geschrieben durch Member-Funktion");
}
//funktioniert natürlich nicht:
void externe_funktion()
{
m_LogList.AddString("geschrieben durch externe Funktion");
}
Die 2 Header, die die durch das VS2010/MFC erstellt werden sind eingebunden und ich könnte meine Funktionen als Memberfunktionen der Dialogklasse deklarieren. Das möchte ich aber nicht und das ist sicher auch keine saubere Variante, oder?
Dennoch hätte ich aber gern eine ähnlich einfache Schreibweise wie in der unteren Funktion. Die Listbox ist ja selbst eine Klasse vom Typ CListBox innerhalb der Dialogklasse. Ist es möglich auf diese Elemente ohne weiteres zuzugreifen?
Danke für eure Hilfe!
Mfg lmeinel