Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: FAQ - MFC ::  VC GUI - Alten Dialog in neuem Projekt verwenden  
Gehen Sie zu Seite 1, 2  Weiter
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
don_basto
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2004
Beiträge: 467
Beitrag don_basto Mitglied 12:41:24 21.11.2006   Titel:   VC GUI - Alten Dialog in neuem Projekt verwenden            Zitieren

Hi,

ich hab eine schicke Dialogklasse, die ich gerne auch außerhalb des ursprünglichen Projekts verwenden möchte. Allerdings bestehen innerhalb eines Projekts ein paar Abhängigkeiten mit den Ressourcen, die sich mir nicht sofort erschließen.

Es scheinen sich Dialoginformatioen in der Ressource.h und MyProject.rc zu befinden.

Gibt's irgendwo ein Anleitung, wie man den Dialogexport am besten bewerkstelligt?
Dass man alles hat was man braucht aber nicht mehr. ;)

Grüße,
don_basto.


Zuletzt bearbeitet von estartu am 14:07:28 15.03.2007, insgesamt 1-mal bearbeitet
Werbeunterbrechung
estartu
Moderator

Benutzerprofil
Anmeldungsdatum: 05.09.2003
Beiträge: 11494
Beitrag estartu Moderator 12:50:48 21.11.2006   Titel:              Zitieren

http://www.c-plusplus.de/forum/viewtopic-var-t-is-39052.html
Und die Klasse mitnehmen.

Der Rest ergibt sich mit den Compilerfehlern. ;)

_________________
Das c-plusplus.de-Magazin sucht Mitmacher --- Die Artikel --- meine Homepage
don_basto
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2004
Beiträge: 467
Beitrag don_basto Mitglied 13:04:54 21.11.2006   Titel:              Zitieren

Ohne das ich das den Tipp ausprobiert hab: ;)

Wenn ich nur die .rc-Datei kopiere, dann fehlen doch die Defines aus der Resource.h noch. Und selbst wenn ich die danach kopiere, können da ganz schnell Überschneidungen mit schon vorhandenen Defines entstehen.
Also trotzdem noch richtig Handarbeit ..

Werd's nachher mal ausprobieren.
LowFly
Mitglied

Benutzerprofil
Anmeldungsdatum: 07.05.2005
Beiträge: 568
Beitrag LowFly Mitglied 13:46:59 21.11.2006   Titel:              Zitieren

hmm also ich hab das mal mit nem AboutDlg gemacht.

erstell dir eine Neue.rc (aus einer leeren *.txt datei) und eine NeueResource.h datei zb unter einem Verzeichniss MyIncludes unter VisualStudios oder sonstwo

in der NeueResource.h copierst du dir die #defines des Dialoges.
damit die nun nicht in konflickt mit definitionen in dem Dialog kommen in dem du diesen verwenden willst setzt die Zahlen einfach sehr hoch.

in der Neue.rc includest du dann als erstes die NeueResource.h & die afxres.h

danach kommt der Dialog und zwar gehst du jetzt in den Explorer und öffnest die *.rc datei mit dem TextEditor deiner schicke Dialogklasse ;) und kopierst dir nur das ab
IDD_NEUERDIALOG DIALOG DISCARDABLE
.....// bis
END//<--ende des dialoges

dann brauchst du in der Neue.rc noch das DESIGNINFO ab
#ifdef APSTUDIO_INVOKED
...//bis
#endif // APSTUDIO_INVOKED

das DesignInfo aber nur für den IDD_NEUERDIALOG danach kannst du die Neue.rc speichern.

in der jeweiligen Project *.h datei includest du dann die NeueResource.h (achte aber auf die richtige pfadangabe).

in deinem Project öffnest du die *.rc datei mit nem texteditor und includest dort unter TEXTINCLUDE DISCARDABLE hinter "#endif //_WIN32\r\n" deine Neue.rc datei. am besten dort wo die *.rc2 datei includet wird. achte auch hier wieder auf die Pfadangabe und auch darauf wie die *.rc2 includet wird (schreibweise doppelte "" usw..)
das selbe machst du (Neue.rc includen) dann nochmal ganz am ende deiner project *.rc bei #ifndef APSTUDIO_INVOKED unterhalb von #endif //_WIN32 dort müste auch wieder ein *.rc2 verweis sein (wieder darauf achten wie die schreibweise ist ist anderst als oben & pfadangabe halt)

wenn du jetzt alles richtig gemacht hast wird dir nach dem compilern die neue.rc datei & NeueResource.h unter Externe Abhängigkeiten deines Projectes angezeigt ein doppelklick sollte dann auch den ResourcenEditor öffnen. (Aber der Dialog wird nicht im arbeitsbereich des ResourcenEditors angezeigt sondern es öffnet sich ein externer resourceneditor)
jetzt solltest du die IDC_'s und IDD des Dialoges in deiner Classe verwenden können.

für die zukunft sollte dann alles mit drei kleinen schritten resource.h includen in der *.rc die zwei pfade setzen erledigt sein.


Zuletzt bearbeitet von LowFly am 14:01:43 21.11.2006, insgesamt 4-mal bearbeitet
don_basto
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2004
Beiträge: 467
Beitrag don_basto Mitglied 18:47:12 21.11.2006   Titel:              Zitieren

@LowFly:
Danke für die Anleitung. Bin gerade am umsetzen. Allerdings gibt's dabei auch den ein oder anderen Haken. Also zuerst mal die Ressourceninformationen ausgelagert:
Zitat:
SchickerDialog.h
SchickerDialog.cpp
SchickerDialog.rc
SchickerDialogResource.h

Danach hab ich SchickerDialog.rc in MyProject.rc und SchickerDialogResource.h in Resource.h inkludiert. Und jetzt kommt folgende Fehlermeldung:
Zitat:
fatal error RC1004: unexpected end of file found ..\mfc\SchickerDialogResource.h

Ich weiss nicht, ob ich die Anleitung richtig verstanden hab?

Grüße,
don_basto.
don_basto
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2004
Beiträge: 467
Beitrag don_basto Mitglied 19:09:10 21.11.2006   Titel:              Zitieren

Ich bekomm den Fehler nicht weg. :(

Also ich hab SchickerDialogResource.h jetzt in MyProject.h hizugefügt:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
1
2
3
4
5
6
7
8
9
10
11
// MyProject.h
#pragma
once

#ifndef
__AFXWIN_H__
    #error
'stdafx.h' muss vor dieser Datei in PCH eingeschlossen werden.
#endif

#include
"resource.h"
#include
"mfc/DisplayDialogResource.h"

// ..
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
// MyProject.h
#pragma
once

#ifndef
__AFXWIN_H__
#error
'stdafx.h' muss vor dieser Datei in PCH eingeschlossen werden.
#endif

#include
"resource.h"
#include
"mfc/DisplayDialogResource.h"

// ..
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
// MyProject.h
#pragma
once

#ifndef
__AFXWIN_H__
    #error
'stdafx.h' muss vor dieser Datei in PCH eingeschlossen werden.
#endif

#include
"resource.h"
#include
"mfc/DisplayDialogResource.h"

// ..

Dann wie beschrieben in MyProject.rc meine Ressourcendatei SchickerDialog.rc eingetragen:
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// MyProject.rc

//..


3 TEXTINCLUDE
BEGIN
    "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
    "#define _AFX_NO_OLE_RESOURCES\r\n"
    "#define _AFX_NO_TRACKER_RESOURCES\r\n"
    "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
    "\r\n"
    "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)\r\n"
    "LANGUAGE 7, 1\r\n"
    "#pragma code_page(1252)\r\n"
    "#include ""res\\MyProject.rc2""  // Nicht mit Microsoft Visual C++ bearbeitete Ressourcen\r\n"
    "#include ""afxres.rc""         // Standardkomponenten\r\n"
    "#include ""src\\mfc\\SchickerDialog.rc""    // externe Dialogressource"

    "#endif\r\n"
    "\0"
END

// ..

#if
!defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
LANGUAGE 7, 1
#pragma
code_page(1252)
#include
"res\MyProject.rc2"  // Nicht mit Microsoft Visual C++ bearbeitete Ressourcen
#include
"afxres.rc"        // Standardkomponenten
#include
"src\mfc\SchickerDialog.rc"    // externe Dialogressource
#endif


// ..
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// MyProject.rc

//..


3 TEXTINCLUDE
BEGIN
"#define _AFX_NO_SPLITTER_RESOURCES\r\n"
"#define _AFX_NO_OLE_RESOURCES\r\n"
"#define _AFX_NO_TRACKER_RESOURCES\r\n"
"#define _AFX_NO_PROPERTY_RESOURCES\r\n"
"\r\n"
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)\r\n"
"LANGUAGE 7, 1\r\n"
"#pragma code_page(1252)\r\n"
"#include ""res\\MyProject.rc2"" // Nicht mit Microsoft Visual C++ bearbeitete Ressourcen\r\n"
"#include ""afxres.rc"" // Standardkomponenten\r\n"
"#include ""src\\mfc\\SchickerDialog.rc"" // externe Dialogressource"

"#endif\r\n"
"\0"
END

// ..

#if
!defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
LANGUAGE 7, 1
#pragma
code_page(1252)
#include
"res\MyProject.rc2" // Nicht mit Microsoft Visual C++ bearbeitete Ressourcen
#include
"afxres.rc" // Standardkomponenten
#include
"src\mfc\SchickerDialog.rc" // externe Dialogressource
#endif


// ..
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// MyProject.rc

//..


3 TEXTINCLUDE
BEGIN
    "#define _AFX_NO_SPLITTER_RESOURCES\r\n"
    "#define _AFX_NO_OLE_RESOURCES\r\n"
    "#define _AFX_NO_TRACKER_RESOURCES\r\n"
    "#define _AFX_NO_PROPERTY_RESOURCES\r\n"
    "\r\n"
    "#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)\r\n"
    "LANGUAGE 7, 1\r\n"
    "#pragma code_page(1252)\r\n"
    "#include ""res\\MyProject.rc2""  // Nicht mit Microsoft Visual C++ bearbeitete Ressourcen\r\n"
    "#include ""afxres.rc""         // Standardkomponenten\r\n"
    "#include ""src\\mfc\\SchickerDialog.rc""    // externe Dialogressource"

    "#endif\r\n"
    "\0"
END

// ..

#if
!defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
LANGUAGE 7, 1
#pragma
code_page(1252)
#include
"res\MyProject.rc2"  // Nicht mit Microsoft Visual C++ bearbeitete Ressourcen
#include
"afxres.rc"        // Standardkomponenten
#include
"src\mfc\SchickerDialog.rc"    // externe Dialogressource
#endif


// ..

Fehlt noch was? :confused:
LowFly
Mitglied

Benutzerprofil
Anmeldungsdatum: 07.05.2005
Beiträge: 568
Beitrag LowFly Mitglied 19:11:38 21.11.2006   Titel:              Zitieren

du must wenn du SchickerDialog.cpp & SchickerDialog.h zB in MyIncludes auslagerst dort auch ne StdAfx.h mitauslagern die kann komplett leer sein also keine weiteren verweise auf includes lediglich wie unten folgt muss drinne stehn

Code:
#if !defined(AFX_STDAFX_H__79714F13_A220_48E3_9921_5876E86E2F5F__INCLUDED_)
#define AFX_STDAFX_H__79714F13_A220_48E3_9921_5876E86E2F5F__INCLUDED_

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ fügt unmittelbar vor der vorhergehenden Zeile zusätzliche Deklarationen ein.

#endif // !defined(AFX_STDAFX_H__79714F13_A220_48E3_9921_5876E86E2F5F__INCLUDED_)
Code:
#if !defined(AFX_STDAFX_H__79714F13_A220_48E3_9921_5876E86E2F5F__INCLUDED_)
#define AFX_STDAFX_H__79714F13_A220_48E3_9921_5876E86E2F5F__INCLUDED_

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ fügt unmittelbar vor der vorhergehenden Zeile zusätzliche Deklarationen ein.

#endif // !defined(AFX_STDAFX_H__79714F13_A220_48E3_9921_5876E86E2F5F__INCLUDED_)
Code:
#if !defined(AFX_STDAFX_H__79714F13_A220_48E3_9921_5876E86E2F5F__INCLUDED_)
#define AFX_STDAFX_H__79714F13_A220_48E3_9921_5876E86E2F5F__INCLUDED_

//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ fügt unmittelbar vor der vorhergehenden Zeile zusätzliche Deklarationen ein.

#endif // !defined(AFX_STDAFX_H__79714F13_A220_48E3_9921_5876E86E2F5F__INCLUDED_)


in den SchickerDialog.cpp includest du die StdAfx.h vor SchickerDialog.h

dann sollte der fehler behoben sein

dann noch nen tip nachdem du die *.cpp *.h auch ausgelagert hast.
unter dem MenuPunkt Extra/Optionen Regsiterblatt Verzeichnisse unter dem Dropdownfeld "Verzeichnisse anzeigen für" Includedateien legst du nen Pfad für das Verzeichniss an, in dem die ausgelagerten dateien liegen. via Button & Pfadsuche ;)

somit reicht es dann wenn du in der StdAfx.h deines Projectes (nicht in der die im ausgelagertem verzeichniss liegt)

#include <SchickerDialog.h>

schreibst. da ist dann keine Pfadangabe mehr nötig.

dann must du noch bei deinem project die SchickerDialog.cpp & SchickerDialog.h im Arbeitsbereich mit "Dateien dem Project hinzufügen" eben selbiges tun. Sonst motzt der compiler. aber ich denke das weist du eh schon ;)

[NEW EDIT]
in den codeschnipseln von der Poste um 18:09:10 21.11.2006 past alles


Zuletzt bearbeitet von LowFly am 20:32:25 21.11.2006, insgesamt 1-mal bearbeitet
don_basto
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2004
Beiträge: 467
Beitrag don_basto Mitglied 19:18:47 21.11.2006   Titel:              Zitieren

LowFly schrieb:
du must wenn du SchickerDialog.cpp & SchickerDialog.h zB in MyIncludes auslagerst dort auch ne StdAfx.h mitauslagern die kann komplett leer sein also keine weiteren verweise auf includes lediglich wie unten folgt muss drinne stehn [..]

Da sprichst du gleich ein generelles Problem mit den vorkompilierten Headern an! ;)
Eine Dummy-stdAfx.h ist ein guter Tipp, wenn man mal ohne vorkompilierte Header arbeiten will (bisher kamen dann Fehlermeldungen). :live:

Den Rest muss ich mir erstmal genauer anschauen.
don_basto
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2004
Beiträge: 467
Beitrag don_basto Mitglied 19:55:16 21.11.2006   Titel:              Zitieren

Geschafft! Der Fehler war so einfach, dass ich nicht gleich drauf gekommen bin. Der Ressourcenkompiler will am Ende jeder Ressourcendatei eine Leerzeile.

Danke für die Hilfe. :)
don_basto
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.04.2004
Beiträge: 467
Beitrag don_basto Mitglied 20:13:34 21.11.2006   Titel:              Zitieren

// EDIT: alles prima. :D


Zuletzt bearbeitet von don_basto am 20:18:57 21.11.2006, insgesamt 1-mal bearbeitet
C/C++ Forum :: FAQ - MFC ::  VC GUI - Alten Dialog in neuem Projekt verwenden  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum nicht antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.