Checkbox Abhacken



  • /////////////////////////////////////////////////////////////////////////////
    // Eigenschaftenseite CMyPropertyPage3 
    
    IMPLEMENT_DYNCREATE(CMyPropertyPage3, CPropertyPage)
    
    CMyPropertyPage3::CMyPropertyPage3() : CPropertyPage(CMyPropertyPage3::IDD)
    {
    	//{{AFX_DATA_INIT(CMyPropertyPage3)
    	m_bDatum = FALSE;
    	//}}AFX_DATA_INIT
    	m_pDoc	= NULL;
    }
    
    CMyPropertyPage3::~CMyPropertyPage3()
    {
    
    }
    void CMyPropertyPage3::DoDataExchange(CDataExchange* pDX)
    {
    	CPropertyPage::DoDataExchange(pDX);
    	//{{AFX_DATA_MAP(CMyPropertyPage3)
    	DDX_Check(pDX, IDC_DATUM, m_bDatum);
    	//}}AFX_DATA_MAP
    
    }
    
    BEGIN_MESSAGE_MAP(CMyPropertyPage3, CPropertyPage)
    	//{{AFX_MSG_MAP(CMyPropertyPage3)
    
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // Behandlungsroutinen für Nachrichten CMyPropertyPage3 
    
    BOOL CMyPropertyPage3::OnInitDialog() 
    {
    
    	Init();
    	if (m_pDoc == NULL)
    		return FALSE;
    
    	CPropertyPage::OnInitDialog();
    
    	CWnd* pWnd	= GetDlgItem(IDOK);
    	if (pWnd)
    		pWnd->ShowWindow(SW_HIDE);
    	pWnd	= GetDlgItem(IDCANCEL);
    	if (pWnd)
    		pWnd->ShowWindow(SW_HIDE);
    
    	return TRUE;
    }
    
    BOOL CMyPropertyPage3::OnApply() 
    {
    
    	return CPropertyPage::OnApply();
    
    }
    void CMyPropertyPage3::	Init()
    {
    		CFrameWnd* pWnd	= (CFrameWnd*)AfxGetMainWnd();
    	if (pWnd == NULL)
    		return;
    	m_pDoc	= (CDenemeStatistikDoc*)pWnd->GetActiveDocument();
    
    }
    

    Oben sieht man Sourcecode meines Dialoges.Ich habe auf diesem Dialog ein Kontrokästchen ( Checkbox ) erstellt und die member variable meines Checkboxes ist "m_bDatum"
    Ich möchte folgendes machen -> wenn ich Checkbox abhacke und auf OK button dürcke und Dialog schließe, möchte ich bei der neuöffnung des Dialogs(also wenn ich mein dialog nochmal neu öffne) mein Checkbox abgehackt sehen oder umgekehrt.

    Könnte jemand mir Helfen? Was sollte ich noch hinzufügen??

    Vielen Dank



  • Du musst UpdateData(); aufrufen.



  • Wo muss ich das aufrufen ?
    ist das alles was ich machen muss?



  • Du musst dir natürlich außerhalb des Dialog den zuletzt gesetzten Wert merken.
    z.B. so

    BOOL bWert=FALSE;
    if(dlg.DoMoldal()==IDOK){
    bWert=dlg.GetBDatum();
    }
    

  • Mod

    UpdateData wird bei OK automatisch aufgerufen. Dito bei Apply.

    m_bDatum ist also in dem Moment aktuell...



  • ich bin total durcheinander..
    Wo muss ich GetBDatum() funktion schreiben? was muss der Funktion machen???



  • Ich würd mich sehr freuen wenn mir jemand bisschen deutlicher HElfen könnte..
    Vielen Dank



  • keiner da?????



  • Jede halbe Stunde frech pushen wird dir auch nicht weiterhelfen. :p



  • Na man das is doch ganz einfach

    dlg.m_bDatum=WERT; //mit deinem gemerkten Wert die Variable initialisieren
    if(dlg.DoMoldal()==IDOK)
    {
        bWert=dlg.m_bDatum; //zurücklesen wenn IDOK ansonsten bleibt dein gemerkter Wert erhalten
    }
    

    Jetzt kannst du das noch mit Getter und Setter-Funktionen die du in deiner Dialog-Klasse erstellst setzen und zurücklesen, wenn du das unbedingt machen willst, das würde dann der Funktion GetBDatum entsprechen.

    So sollten deine Fragen beantwortet sein.



  • Yeah, hack it ab!



  • CMyPropertySheet propSheet;
    	propSheet.DocPt2(m_pDoc1);
    	//+-----------------------------------------------------------------------------+
    	//! Test Anfang																	!
    	//+-----------------------------------------------------------------------------+
    	BOOL bWert;
    //	propSheet.m_Page3.m_bDatum=FALSE;
    //dlg.m_bDatum=WERT; //mit deinem gemerkten Wert die Variable initialisieren
    	if(propSheet.DoModal()==IDOK)
    	{
    	   bWert=propSheet.m_Page3.m_bDatum; //zurücklesen wenn IDOK ansonsten bleibt dein gemerkter Wert erhalten
    	} 
    	//+-----------------------------------------------------------------------------+
    	//! Test Ende																	!
    	//+-----------------------------------------------------------------------------+
    

    Hallo nochmal ,
    ich habe mein Code so geändert aber es funktioniert immer noch nicht.
    Ich tue Checkbox abhacken und auf OK button drücken , und wenn ich mein Dialog nochmal öffne, dann sehe ich dass Checkbox nixht abgehackt ist..

    Woran kann das liegen , muss ich noch was ändern??

    Vielen Dank



  • weil bWert ein Member deiner dialog-Klasse sein muß, sonnst ist doch der Wert verlohren wenn die Funktion beendet ist. Diesen Wert mußt du natürlich auch wieder in deiner Page setzen vor aufruf von DoModal.



  • CMyPropertySheet propSheet;
        propSheet.DocPt2(m_pDoc1);	//+-----------------------------------------------------------------------------+
    	//! Test Anfang																	!
    	//+-----------------------------------------------------------------------------+
    	propSheet.m_Page3.bWert=FALSE;
    
    	if(propSheet.DoModal()==IDOK)//propSheet.m_Page3.DoModal()==IDOK
    	{
    		propSheet.m_Page3.bWert=propSheet.m_Page3.m_bDatum; //zurücklesen wenn IDOK ansonsten bleibt dein gemerkter Wert erhalten
    	} 
    	//+-----------------------------------------------------------------------------+
    	//! Test Ende																	!
    	//+-----------------------------------------------------------------------------+
    

    ich habe mein Code so wie oben geändert aber es funktioniert einfach nicht.

    bWert ist jetzt member Variable meines Pages/bzw.Dialog Klasse siehe unten.

    propSheet.m_Page3.bWert
    

    Was muss noch geändert werden..?
    Unten kann man mein Page/dialog Klasse funktionen sehen , soll ich da etwas ändern???

    Vielen Dank

    // Eigenschaftenseite CMyPropertyPage3 
    
    IMPLEMENT_DYNCREATE(CMyPropertyPage3, CPropertyPage)
    
    CMyPropertyPage3::CMyPropertyPage3() : CPropertyPage(CMyPropertyPage3::IDD)
    {
    	//{{AFX_DATA_INIT(CMyPropertyPage3)
    	m_bDatum = FALSE;//
    	//}}AFX_DATA_INIT
    	m_pDoc	= NULL;
    }
    
    CMyPropertyPage3::~CMyPropertyPage3()
    {
    }
    
    void CMyPropertyPage3::DoDataExchange(CDataExchange* pDX)
    {
    	CPropertyPage::DoDataExchange(pDX);
    
    	//{{AFX_DATA_MAP(CMyPropertyPage3)
    	DDX_Check(pDX, IDC_DATUM, m_bDatum);
    	//}}AFX_DATA_MAP
    
    }
    
    BEGIN_MESSAGE_MAP(CMyPropertyPage3, CPropertyPage)
    	//{{AFX_MSG_MAP(CMyPropertyPage3)
    
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // Behandlungsroutinen für Nachrichten CMyPropertyPage3 
    
    BOOL CMyPropertyPage3::OnInitDialog() 
    {
    	// Um die Check box initialisieren zu können
    	// Was muss hier gemacht werden..!
    
    	Init();
    	if (m_pDoc == NULL)
    		return FALSE;
    
    	CPropertyPage::OnInitDialog();
    
    	CWnd* pWnd	= GetDlgItem(IDOK);
    
    	if (pWnd)
    
    	pWnd->ShowWindow(SW_HIDE);
    	pWnd	= GetDlgItem(IDCANCEL);
    	if (pWnd)
    		pWnd->ShowWindow(SW_HIDE);
    
    	return TRUE;
    }
    
    void CMyPropertyPage3::	Init()
    {
    		CFrameWnd* pWnd	= (CFrameWnd*)AfxGetMainWnd();
    	if (pWnd == NULL)
    		return;
    	m_pDoc	= (CDenemeStatistikDoc*)pWnd->GetActiveDocument();
    
    }
    
    void CMyPropertyPage3::OnOK() 
    {
    	// TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen
    
    	CPropertyPage::OnOK();
    }
    


  • Du verstehst den Sinn nicht wenn du schreibst

    propSheet.m_Page3.bWert=FALSE;
    

    und dann DoModal aufrufst, was glaubst du wie der Wert von bWert bei jeden aufruf ist? Immer FALSE weil du das ja genau so setzt. Leg doch die ganzen Variablen die du dir Merken willst in M-Doc also deiner Documentenklasse an und lies diese werte bei OnIni in deine Variablen ein und bei OnOK() wieder in dein Document zurück.

    BOOL CMyPropertyPage3::OnInitDialog()
    {
        // Um die Check box initialisieren zu können
        // Was muss hier gemacht werden..!
    
        Init();
        if (m_pDoc == NULL)
            return FALSE;
    
        CPropertyPage::OnInitDialog();
    
        bWert = m_pDoc->bWert; //Variablen einlesen
    
        CWnd* pWnd    = GetDlgItem(IDOK);
    
        if (pWnd)
    
        pWnd->ShowWindow(SW_HIDE);
        pWnd    = GetDlgItem(IDCANCEL);
        if (pWnd)
            pWnd->ShowWindow(SW_HIDE);
    
        return TRUE;
    }
    void CMyPropertyPage3::OnOK()
    {
        m_pDoc->bWert = bWert;//Wert in Document sichern
    
        CPropertyPage::OnOK();
    }
    

    genau so kannst du dir das auch machen wenn du das nicht in der Page machen willst sondern wie vorher beschrieben, du mußt dir halt nur eine Stelle suchen wo du die ganzen werte dir merkst, wenn das recht viel ist verpack ich das dann meist in eine eigene klasse (CSetup) die dann das Sichern und Laden der Werte aus irgendeinen File oder Registry oder was weis ich übernimmt. So is das dann alles gekapselt und man muß nicht endlos suchen.



  • Das ist die Erste schritt unten sieht man Doc.h

    // Mein Doc header Datei
    
    #include "MyPropertyPage3.h"
    #include "DateiStruktur.h"
    #include <afxdb.h>
    
    class CDenemeStatistikDoc : public CDocument
    {
    protected: // Nur aus Serialisierung erzeugen
    	CDenemeStatistikDoc();
    	DECLARE_DYNCREATE(CDenemeStatistikDoc)
    
    // Attribute
    public:
    	DateiStruktur	m_data;
    	CDatabase		*m_pDatabase;
    	BOOL bWert; //bWert hab ich in Doc klasse angelegt
    
    //	DataStruktur	m_data;
    

    Jetzt kommt die zweite schritt, das ist mein Page/ Dialog Klasse

    / Eigenschaftenseite CMyPropertyPage3 
    
    IMPLEMENT_DYNCREATE(CMyPropertyPage3, CPropertyPage)
    
    CMyPropertyPage3::CMyPropertyPage3() : CPropertyPage(CMyPropertyPage3::IDD)
    {
    	//{{AFX_DATA_INIT(CMyPropertyPage3)
    	m_bDatum = FALSE;//
    	//}}AFX_DATA_INIT
    	m_pDoc	= NULL;
    }
    
    CMyPropertyPage3::~CMyPropertyPage3()
    {
    }
    
    void CMyPropertyPage3::DoDataExchange(CDataExchange* pDX)
    {
    	CPropertyPage::DoDataExchange(pDX);
    
    	//{{AFX_DATA_MAP(CMyPropertyPage3)
    	DDX_Check(pDX, IDC_DATUM, m_bDatum);
    	//}}AFX_DATA_MAP
    
    }
    
    BEGIN_MESSAGE_MAP(CMyPropertyPage3, CPropertyPage)
    	//{{AFX_MSG_MAP(CMyPropertyPage3)
    
    	//}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    /////////////////////////////////////////////////////////////////////////////
    // Behandlungsroutinen für Nachrichten CMyPropertyPage3 
    
    BOOL CMyPropertyPage3::OnInitDialog() 
    {
    	// Um die Check box initialisieren zu können
    	// Was muss hier gemacht werden..!
    
    	Init();
    	if (m_pDoc == NULL)
    		return FALSE;
    
    	CPropertyPage::OnInitDialog();
    
    	bWert = m_pDoc->bWert; //Variablen einlesen 
    
    	CWnd* pWnd	= GetDlgItem(IDOK);
    
    	if (pWnd)
    
    	pWnd->ShowWindow(SW_HIDE);
    	pWnd	= GetDlgItem(IDCANCEL);
    	if (pWnd)
    		pWnd->ShowWindow(SW_HIDE);
    
    	return TRUE;
    }
    
    void CMyPropertyPage3::	Init()
    {
    		CFrameWnd* pWnd	= (CFrameWnd*)AfxGetMainWnd();
    	if (pWnd == NULL)
    		return;
    	m_pDoc	= (CDenemeStatistikDoc*)pWnd->GetActiveDocument();
    
    }
    
    void CMyPropertyPage3::OnOK() 
    {
    	m_pDoc->bWert = bWert;//Wert in Document sichern 
    
    	CPropertyPage::OnOK();
    }
    

    und jetzt kommt die dritte schritt wo ich meine Dialog aufrufe

    CMyPropertySheet propSheet;
    	propSheet.DocPt2(m_pDoc1);
    //	propSheet.DoModal();
    	//+-----------------------------------------------------------------------------+
    	//! Test Anfang																	!
    	//+-----------------------------------------------------------------------------+
    
    	if(propSheet.DoModal()==IDOK)//propSheet.m_Page3.DoModal()==IDOK
    	{
    		propSheet.m_Page3.bWert=propSheet.m_Page3.m_bDatum; //zurücklesen wenn IDOK ansonsten bleibt dein gemerkter Wert erhalten
    	} 
    	//+-----------------------------------------------------------------------------+
    	//! Test Ende																	!
    	//+-----------------------------------------------------------------------------+
    

    Könntest du mir sagen wo ich hier fehler mache...
    Ich mach jetzt dasgleiche was du sagst oder hab ich wieder was vergessen...

    Ich weiß ich nerve dich aber sorry..Danke im Voraus für die Unterstützung



  • langsam wird man gaga mit deinen Variablen, ersetz mal bitte in der Ini das so

    m_bDatum = m_pDoc->bWert; //Variablen einlesen
    

    dasw gleiche dann nur umgekehrt in der OnOK() und die zeile

    propSheet.m_Page3.bWert=propSheet.m_Page3.m_bDatum; //zurücklesen wenn IDOK ansonsten bleibt dein gemerkter Wert erhalten
    

    kannste ersatzlos löschen. Du solltest schon selbst mal sehn das du mit deinen Variablen klar kommst denn wenn du da nicht durch siehst, dann lass es lieber und befass dich noch mal mit den grundlagen, denn du solltest schon selbst durchsehen welche variable wo was macht.
    Wir haben jetzt eigentlich nichts weiter gemacht als die Membervariable in der OnInit mit dem Wert aus dem Doc zu setzen und bei OnOK den gesetzten wieder zurück in die Doc zu schreiben wo der dann sicher ist.
    Geh noch mal in dich und versuch das zu verstehen was du hier so stumpf abschreibst, denn wenn du das nicht verstehst wirst du beim nächsten problem gleich wieder fragen müssen. was dann wieder die gleiche oder ne ähnliche frage ist.


Log in to reply