Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Cpropertysheet

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] [ 2 ] > 3 < [ 4 ]
020
20.12.2004, 13:41 Uhr
deKeep



ok, das hab ich behoben...

nur jetzt seh ich nichts mehr!

ich zeig mal ein paar konkrete textstellen:

hier die OnInitDialog() des startdialogs in dem ich meine reiter starte:

C++:
...
    CRegister TurnierProgramm(_T("TurnierVeranstalter"));
    m_dlgPropertySheet = &TurnierProgramm;
    m_dlgPropertySheet->Create(this, WS_VISIBLE | WS_TABSTOP, 0);
    m_dlgPropertySheet->SetActivePage(0);
    m_dlgPropertySheet->SetActivePage(1);
    m_dlgPropertySheet->SetActivePage(2);
    m_dlgPropertySheet->SetActivePage(3);
    m_dlgPropertySheet->SetActivePage(4);
    m_dlgPropertySheet->SetActivePage(5);
    m_dlgPropertySheet->SetActivePage(0);




und hier der konstruktor von CRegister:

C++:
CRegister::CRegister(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage)
    :CPropertySheet(pszCaption, pParentWnd, iSelectPage)
{
    AddPage(&m_Seite1);
    Spiel[0].pS1 = &m_Seite1;  // zeiger für eine andere klasse benötigt
    AddPage(&m_Seite2);
    Spiel[0].pS2 = &m_Seite2;  // ist für dieses problem wohl unerheblich
    AddPage(&m_Seite3);
    Spiel[0].pS3 = &m_Seite3;  // also nicht wundern
    AddPage(&m_Seite4);
    Spiel[0].pS4 = &m_Seite4;
    AddPage(&m_Seite5);
    Spiel[0].pS5 = &m_Seite5;
    AddPage(&m_Seite6);
    Spiel[0].pS6 = &m_Seite6;

}




modal klappt das programm wunderbar, nur unmodal bekomm ich kein bild oder nur ganz kurz!

vielleicht fällt dir ja was auf, nebenbei, ich hab das programm nicht dynamisch gestaltet, also nicht wundern, macht bei dieser anwendung auch nicht sonderlich viel sinn, da ich alle seiten immer brauche, dementsprechend auch keine löschen kann!


deKeep
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
021
20.12.2004, 14:01 Uhr
deKeep



hmmm...

das erste war veraltet, sorry


C++:
    CRegister TurnierProgramm(_T("TurnierVeranstalter"));

    m_dlgPropertySheet = &TurnierProgramm;
//    ASSERT(m_dlgPropertySheet);
    m_SheetPage[0] = &TurnierProgramm.m_Seite1; // deine klasse für page 0
    m_SheetPage[1] = &TurnierProgramm.m_Seite2; // deine klasse für page 1
    m_SheetPage[2] = &TurnierProgramm.m_Seite3;
    m_SheetPage[3] = &TurnierProgramm.m_Seite4;
    m_SheetPage[4] = &TurnierProgramm.m_Seite5;
    m_SheetPage[5] = &TurnierProgramm.m_Seite6;
    m_iSheetPages = 6;


    m_dlgPropertySheet->Create(this, WS_VISIBLE | WS_TABSTOP, 0);

    for ( int j = 0; j < m_dlgPropertySheet->GetPageCount(); j++ )
        m_dlgPropertySheet->SetActivePage(j);



tja, damit bleibt mir folgender fehler:

dlgcore.cpp line 164

warum auch immer, was ist da falsch?

ASSERT(FALSE); // invalid dialog template name

schwierig, schwierig, aber danke für deinen einsatz!

deKeep
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
022
20.12.2004, 15:45 Uhr
mmc20
puss in boots


naja... ich steig da nicht so ganz dahinter auf was die referenzen (&m_Seite1) zeigen, bist du sicher das die gültig sind ? wo werden die initialisiert ? zeigen die überhaupt auf eine instanz deiner page-klassen ?

wie gesagt, folgender code produziert bei mir fehlerfrei einen nonmodalen propertydialog...

C++:
public:
    int m_iSheetPages;
    CPropertyPage* m_SheetPage[4];
    CPropertySheet* m_dlgPropertySheet;
...
{
    m_dlgPropertySheet = new CPropertySheet("nameless");
    m_SheetPage[0] = new Page_0;
    m_SheetPage[1] = new Page_1;
    m_iSheetPages = 2;
    for ( int i = 0; i < m_iSheetPages; i++ )
        m_dlgPropertySheet->AddPage(m_SheetPage[i]);
    m_dlgPropertySheet->Create(this, WS_VISIBLE | WS_TABSTOP, 0);

// alle sheets anzeigen... damit werden sie scheinbar initialisiert
    for ( i = 0; i < m_dlgPropertySheet->GetPageCount(); i++ )
        m_dlgPropertySheet->SetActivePage(i);
// und wieder den 1.anzeigen
    m_dlgPropertySheet->SetActivePage(0);

// zugriff auf steuerelement im sheet[0] vom maindlg aus
//    ((Page_0*)m_dlgPropertySheet->GetPage(0))->SetDlgItemText(IDC_BUTTON1, "Text");
// oder über die sheetpage-member
//    ((Page_0*)m_SheetPage[0])->zb_InitPage_oderso();

}


natürlich nicht vergessen die genewten members beim schliessen wieder zu deleten.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
023
20.12.2004, 16:43 Uhr
deKeep



klar sind die gültig, stehen nur im header Register.h


C++:
#include "Seite1.h"
#include "Seite2.h"
#include "Seite3.h"
#include "Seite4.h"
#include "Seite5.h"
#include "Seite6.h"

...

public:
    Seite1 m_Seite1;
    Seite2 m_Seite2;
    Seite3 m_Seite3;
    Seite4 m_Seite4;
    Seite5 m_Seite5;
    Seite6 m_Seite6;



damit erzeuge ist sie, aber statisch, wie auch immer, die seiten gibt es, sie funktionieren auch!

gerade das mit dem deleten finde ich unschön beim testen, stürzt es vor dem delete ab...

wer mag schon gerne ständig den pc neustarten?

aber ein paar fragen hab ich da noch...

muss ich einen speziellen dialog schaffen, in dem geöffnet wird? ("nameless")

ausserdem gehe ich richtig in der annahme aus, dass du das beispeil auf 2 seiten gekürzt hast? (m_SheetPage[4])

deKeep
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
024
20.12.2004, 17:08 Uhr
mmc20
puss in boots


hi, ja ich hab das gekürzt waren mal mehr seiten, aber das stört ja jetzt nicht...
du brauchst keinen extra dialog ("nameless") der wird ja eben mit dem create erstellt.
ich werd das mal mit deiner variante probieren ob der das so frisst... ausserdem sollten die leaks die beim absturz enstehen jetzt nicht den pc lahmlegen, so groß sind die dann ja auch nicht... ok ausser man hat nur 64mb ram... ?

werds mal probieren...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
025
20.12.2004, 17:27 Uhr
mmc20
puss in boots


oh, jetzt seh ich das erst !
das steht in deiner oninitdialog ?

C++:
    CRegister TurnierProgramm(_T("TurnierVeranstalter")); *1*

    m_dlgPropertySheet = &TurnierProgramm; *2*
//    ASSERT(m_dlgPropertySheet);
    m_SheetPage[0] = &TurnierProgramm.m_Seite1; // deine klasse für page 0
    m_SheetPage[1] = &TurnierProgramm.m_Seite2; // deine klasse für page 1
    m_SheetPage[2] = &TurnierProgramm.m_Seite3;
...


*1* damit legst du ein object an welches am ende der oninitdlg nicht mehr gültig ist
da nützt auch die referenz *2* nichts mehr, da die dann auf irgendetwas zeigt.
warum übergiebst denn überhaupt die referenz auf "m_dlgPropertySheet" wenn du dann doch über "&TurnierProgramm.m_Seite1" zugreifst.
machs mit dem new, das ist übersichtlicher. in den dtor schreibst dann einfach:

C++:
CPropertySheetDlg::~CPropertySheetDlg()
{
    if (m_dlgPropertySheet) {
        for ( int i = 0; i < m_iSheetPages; i++ )
            delete m_SheetPage[i];
        delete m_dlgPropertySheet;
    }
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
026
20.12.2004, 18:26 Uhr
deKeep



richtig, in der oninitdialog!

bei modal, geht es da erst weiter, wenn ich das kartenreiterprogramm schliesse...

anscheinend geht es jetzt gleich weiter... das hatte ich nicht bedacht, nun gut teste ich es an einer anderen stelle, mal sehen, obs dann besser geht!

deKeep
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
027
20.12.2004, 18:37 Uhr
deKeep



hmmm...

es blinkt immer nur mal auf!

tja, dann muss ich es mal mit new versuchen... aber das ist viel umschreiben...

deKeep
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
028
20.12.2004, 18:53 Uhr
deKeep



hmmm...

mit paarmaligem ignorieren klappts ja wenigstens mal mit dem programmaufruf!

ein paar kleinigkeiten stören mich dann aber noch, besonders, wie schliesse ich das wieder? mir fehlt noch die x-schaltfläche oben rechts...


deKeep
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
029
20.12.2004, 19:11 Uhr
mmc20
puss in boots


hi, einfach "WS_SYSMENU" mit angeben, schon iss das "x" da

MSDN:

CPropertySheet::Create
Call this member function to display a modeless property sheet. You can call Create from inside the constructor, or you can call it after the constructor is invoked.

Syntax
BOOL Create( CWnd* pParentWnd = NULL, DWORD dwStyle = WS_SYSMENU | WS_POPUP | WS_CAPTION | DS_MODALFRAME | WS_VISIBLE, DWORD dwExStyle = WS_EX_DLGMODALFRAME );


ansonsten das ganze in einen dialog "einbetten" (WS_CHILD), dann kannste noch irgendwelche speicheroperation machen beim schliessen (oder was auch immer).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] > 3 < [ 4 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: