Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Nicht modaler Dialog flickert immer wieder

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 <
000
06.01.2009, 12:35 Uhr
kayserili80



Hallo zusammen,

bin ein Neueinsteiger in MFC und habe folgendes Problem: Ich möchte eine SDI Anwenung erstellen. Dabei soll beim Programmstart direkt ein nicht modaler Dialog erzeugt werden. Dieser Dialog CReg1 ist vom Typ CPropertySheet und hat drei Register.

Falls ich nun folgenden Code in die Initinstance() einfüge, passiert nichts.

CReg1 Eigenschaftsseite1( "Eigenschaftsfenster" );
Eigenschaftsseite1.Create(this, WS_CHILD | WS_VISIBLE | WS_TABSTOP, 0);
Eigenschaftsseite1.ShowWindow(SW_SHOW);

Füge ich die gleichen Zeilen in die Funktion

CTestView::OnDraw(CDC* pDC)

ein, so flickert das Dialogfenster! Passiert das weil das Tochterfenster immer neu gezeichnet wird?

Vielen Dank für eure Hilfe..
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.01.2009, 12:58 Uhr
mmc20
puss in boots


hi,

du legst "Eigenschaftsseite1" ja in der Initinstance(...) an, also existiert dieses object ja nur in Initinstance(...) und ist danach nicht mehr vorhanden.
die OnDraw(...) ist der schlechteste ort für solche objecte, eigentlich aus dem selben grund wie in der Initinstance (und weil diese mehrmals die sekunde aufgerufen werden kann).

muss der dialog denn unbedingt nonmodal sein ?

ansonsten leg "CReg1 Eigenschaftsseite1;" als member der CTestApp an, und mach dann nur die initialisierung in Initinstance (ist dann wie ne globale variable, also eigentlich auch unschön)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.01.2009, 13:19 Uhr
kayserili80




Zitat von mmc20:
hi,

du legst "Eigenschaftsseite1" ja in der Initinstance(...) an, also existiert dieses object ja nur in Initinstance(...) und ist danach nicht mehr vorhanden.
die OnDraw(...) ist der schlechteste ort für solche objecte, eigentlich aus dem selben grund wie in der Initinstance (und weil diese mehrmals die sekunde aufgerufen werden kann).

muss der dialog denn unbedingt nonmodal sein ?

ansonsten leg "CReg1 Eigenschaftsseite1;" als member der CTestApp an, und mach dann nur die initialisierung in Initinstance (ist dann wie ne globale variable, also eigentlich auch unschön)



Hi MMC20,,danke für deine Antwort.

Das habe ich gerade versucht..bekomme aber dann folgende Fehlermeldung:

error C2512: 'CReg1': Kein geeigneter Standardkonstruktor verfügbar
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
07.01.2009, 00:03 Uhr
mmc20
puss in boots


folgendes sollte funktionieren:


C++:
// in der App
private:
    CPropertySheet* m_pPropertySheet;




C++:
// in der Initinstance() der App
    m_pPropertySheet= new CPropertySheet( _T(" Titel ") );
    ASSERT(m_pPropertySheet);
    m_pPropertySheet->AddPage( new CPropPage0 );
    m_pPropertySheet->AddPage( new CPropPage1 );
    m_pPropertySheet->Create( this, WS_VISIBLE|WS_TABSTOP, 0 );
    m_pPropertySheet->SetActivePage(1);// initialisiert die einzelnen Sheets
    m_pPropertySheet->SetActivePage(0);




C++:
// im destructor der App
    if ( m_pPropertySheet) {
        for ( int i = m_pPropertySheet->GetPageCount(); i > 0; --i ) {
            delete m_pPropertySheet->GetPage(i-1);
            m_pPropertySheet->RemovePage(i-1);
        }
        delete m_pPropertySheet;
    }

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
07.01.2009, 00:25 Uhr
mmc20
puss in boots


lese gerade das du nen dialog hast der sich um die propertysheets kümmert,
naja dann ist ja eigentlich ganz einfach...

C++:
// im header der App
private:
    CReg1 Eigenschaftsseite1;

// in der init der App
    Eigenschaftsseite1.Create( IDD_DIALOG1, this );


wovon ist CReg1 eigentlich abgeleitet ?

C++:
class CReg1 : public CDialog
{
...
}

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
07.01.2009, 13:40 Uhr
0xdeadbeef
Gott
(Operator)


Wenn kein Standardkonstruktor für CReg1 verfügbar ist, musst du das Objekt in der Konstruktor-Initialisierungsliste initialisieren. Das sieht aus wie folgt (unter der Annahme, dass das CReg1-Objekt ein Member von CTestApp ist):

C++:
class CTestApp : public CApp {
public:
  CTestApp();

private:
  CReg1 reg1_;
};

// ...

CTestApp::CTestApp() : reg1_(/* Parameter hier */) { }


--
Einfachheit ist Voraussetzung für Zuverlässigkeit.
-- Edsger Wybe Dijkstra

Dieser Post wurde am 07.01.2009 um 13:40 Uhr von 0xdeadbeef editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
24.01.2009, 11:22 Uhr
kayserili80



Hallo zusammen,

war im Urlaub konnte mich deswegen nicht für eure Hilfe bedanken.Werd mich mal ransetzen und eure Ideen einbauen..
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
24.01.2009, 12:03 Uhr
kayserili80




Zitat von mmc20:
folgendes sollte funktionieren:


C++:
// in der App
private:
    CPropertySheet* m_pPropertySheet;




C++:
// in der Initinstance() der App
    m_pPropertySheet= new CPropertySheet( _T(" Titel ") );
    ASSERT(m_pPropertySheet);
    m_pPropertySheet->AddPage( new CPropPage0 );
    m_pPropertySheet->AddPage( new CPropPage1 );
    m_pPropertySheet->Create( this, WS_VISIBLE|WS_TABSTOP, 0 );
    m_pPropertySheet->SetActivePage(1);// initialisiert die einzelnen Sheets
    m_pPropertySheet->SetActivePage(0);




C++:
// im destructor der App
    if ( m_pPropertySheet) {
        for ( int i = m_pPropertySheet->GetPageCount(); i > 0; --i ) {
            delete m_pPropertySheet->GetPage(i-1);
            m_pPropertySheet->RemovePage(i-1);
        }
        delete m_pPropertySheet;
    }





Hallo MMc20,

habe nach deiner Einweisung das PropertySheet erzeugt. Das klappt auch. Nur habe ich dann ein PropertySheet was nicht mehr im Hauptfenster angezeigt wird, sondern irgendwie ausserhalb liegt. Wie kann ich das PropertySheet ins Hauptfenster anbinden so dass es genau in die Ansicht des mainFrame reinpasst?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: