<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Probleme mit ctrltab in der view]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe 2 Probleme und eine SDI-Anwendung geschrieben.<br />
im doc Objekt wird beim ablauf des Programms ein gebilde aus datenobjekte durch Dialogabfragen erstellt.nachdem die abfragen alle durch sind soll das Programm die daten über ein Tabctrl in der view, auf den einzelnen Seiten mit hilfe von einem ListCtrl welches sich in dem PropertyPage objekt befindet darstellen.Also habe ich ein Tabcontrol in die form eingefügt und es wird in der überschriebenen Funktion Ondraw() initialisiert welches dann die seiten initialisiert und somit auch die jeweilige listCtrl.<br />
nun beginnt das erste Problem sobalt das Progammfenster in den hintergrund rutscht weil ich zum beispielden internetexplorer öffne kommt ne Assert fehlermeldung und das Programmstürzt ab.<br />
und zwar bei</p>
<pre><code>m_AusgabeTab.Create( WS_CHILD | WS_VISIBLE, ClientRect, this, 255 );
</code></pre>
<p>in der überschriebenen Ondraw()funktion!<br />
ich hab versucht mit einer if anweisung sie nur einmal durchlaufen zulassen aber dann ist die form der view danach leer!<br />
was mach ich da falsch???<br />
mein 2 Problem ist wenn das gebilde aufgebaut ist werden die Daten von der jeweiligen list nicht dargestellt,<br />
sondern sie Bleibt leer!</p>
<pre><code>//die View.h////////////////////////////////////////////////////////////

#pragma once
#include &quot;ErgCtrl.h&quot;
#include &quot;afxcmn.h&quot;
class CKabelstPrfSet;

class CKabelstPrfView : public CRecordView
{
protected: // Nur aus Serialisierung erstellen
	CKabelstPrfView();
	DECLARE_DYNCREATE(CKabelstPrfView)

public:
	enum{ IDD = IDD_KABELSTPRF_FORM };
	CKabelstPrfSet* m_pSet;

// Attribute
public:
	CKabelstPrfDoc* GetDocument() const;

// Operationen
public:

// Überschreibungen
	public:
	virtual CRecordset* OnGetRecordset();
virtual BOOL PreCreateWindow(CREATESTRUCT&amp; cs);
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung
	virtual void OnInitialUpdate(); // Erster Aufruf nach Erstellung
	virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
	virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
	virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);

// Implementierung
public:
	virtual ~CKabelstPrfView();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext&amp; dc) const;
#endif

protected:

// Generierte Funktionen für die Meldungstabellen
protected:
	DECLARE_MESSAGE_MAP()
public:
 :arrow: 	CErgCtrl m_AusgabeTab; // Das tab dessen Seiten die Daten ausgeben sollen
protected:
//	void OnAusgabe();
 :arrow: 	afx_msg LPARAM OnAusgabe(WPARAM wpar, LPARAM lpar);// der Meldungshandler der diemeldung abfängt welche geschickt wird wenn die daten dargestellt werden sollen!
	virtual void OnDraw(CDC* pDC);
public:

	bool erledigt;
};

#ifndef _DEBUG  // Debugversion in KabelstPrüfView.cpp
inline CKabelstPrfDoc* CKabelstPrfView::GetDocument() const
   { return reinterpret_cast&lt;CKabelstPrfDoc*&gt;(m_pDocument); }
#endif

//Die View.cpp/////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CKabelstPrfView, CRecordView)
	// Standarddruckbefehle
	ON_COMMAND(ID_FILE_PRINT, CRecordView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CRecordView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRecordView::OnFilePrintPreview)
 	ON_MESSAGE(WM_AUSGABE,OnAusgabe) 
END_MESSAGE_MAP()

// CKabelstPrfView Erstellung/Zerstörung

CKabelstPrfView::CKabelstPrfView()
	: CRecordView(CKabelstPrfView::IDD)
	, erledigt(false)
{
	m_pSet = NULL;
	// TODO: Hier Code zum Erstellen einfügen

}

CKabelstPrfView::~CKabelstPrfView()
{
}

void CKabelstPrfView::DoDataExchange(CDataExchange* pDX)
{
	CRecordView::DoDataExchange(pDX);
	// Sie können hier DDX_Field*-Funktionen einfügen, um die Steuerelemente mit den Datenbankfeldern zu verbinden:
	// DDX_FieldText(pDX, IDC_MYEDITBOX, m_pSet-&gt;m_szColumn1, m_pSet);
	// DDX_FieldCheck(pDX, IDC_MYCHECKBOX, m_pSet-&gt;m_bColumn2, m_pSet);
	// Weitere Informationen finden Sie in den MSDN- und ODBC-Beispielen.
}

BOOL CKabelstPrfView::PreCreateWindow(CREATESTRUCT&amp; cs)
{
	// TODO: Ändern Sie hier die Fensterklasse oder die Darstellung, indem Sie
	//  CREATESTRUCT cs modifizieren.

	return CRecordView::PreCreateWindow(cs);
}

void CKabelstPrfView::OnInitialUpdate()
{
	m_pSet = &amp;GetDocument()-&gt;m_KabelstPrfSet;
	CRecordView::OnInitialUpdate();
}

// CKabelstPrfView drucken

BOOL CKabelstPrfView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// Standardvorbereitung
	return DoPreparePrinting(pInfo);
}

void CKabelstPrfView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: Zusätzliche Initialisierung vor dem Drucken hier einfügen
}

void CKabelstPrfView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: Bereinigung nach dem Drucken einfügen
}

// CKabelstPrfView Diagnose

#ifdef _DEBUG
void CKabelstPrfView::AssertValid() const
{
	CRecordView::AssertValid();
}

void CKabelstPrfView::Dump(CDumpContext&amp; dc) const
{
	CRecordView::Dump(dc);
}

CKabelstPrfDoc* CKabelstPrfView::GetDocument() const // Nicht-Debugversion ist inline
{
	ASSERT(m_pDocument-&gt;IsKindOf(RUNTIME_CLASS(CKabelstPrfDoc)));
	return (CKabelstPrfDoc*)m_pDocument;
}
#endif //_DEBUG

// CKabelstPrfView Datenbankunterstützung
CRecordset* CKabelstPrfView::OnGetRecordset()
{
	return m_pSet;
}

 :arrow: Die untenstehende Funktion wird ausgeführt sobalt die meldung kommt das das Datengebilde fertig aufgebaut wurde
// CKabelstPrfView Meldungshandler
afx_msg LPARAM CKabelstPrfView::OnAusgabe(WPARAM wpar, LPARAM lpar)
//void CKabelstPrfView::OnAusgabe()
{ :warning: //2. Problem es Passiert nichts wenn die funktion durchlaufen wird!!!
	for(int i=0;i&lt;m_AusgabeTab.m_nNumberOfPages;i++)
	{

		m_AusgabeTab.m_DocBasisPage[i].m_SeiteA.m_fnListDaten(i);
		UpdateData(true);
		m_AusgabeTab.m_DocBasisPage[i].m_SeiteA.AusgabeListe.SetRedraw(true);	
	}

//	Invalidate();
	return lpar;
}

 :arrow: die initialisierung mußte ich hier reinsetzen.Sonst gab es noch mehr fehler. für Anregungen bin ich dankbar das anders zu machen!!!
void CKabelstPrfView::OnDraw(CDC* pDC)
{
//	if(!erledigt)
//	{
		erledigt=true;
		CRect ClientRect; 

		GetClientRect(&amp;ClientRect); 
		ClientRect.bottom = 500; 
		ClientRect.left = 10; 
		ClientRect.right = 700; 
		ClientRect.top= 1; 

 :warning: 	m_AusgabeTab.Create( WS_CHILD | WS_VISIBLE, ClientRect, this, 255 ); //Problem zeile des ersten Problems
		m_AusgabeTab.SetExtendedStyle( TCS_EX_FLATSEPARATORS|TCS_BUTTONS | TCS_FLATBUTTONS ); 
		m_AusgabeTab.InsertItem(0,_T(&quot;Stecker Tabelle&quot;)); 
		m_AusgabeTab.InsertItem(1,_T(&quot;Knoten Tabelle&quot;));
//		}
	CKabelstPrfDoc* pmyDoc=GetDocument();
	m_AusgabeTab.m_fnInit2(pmyDoc);

}
//Die TabCtrl.h////////////////////////////////////////////////////////////////
#pragma once
#include &quot;DocBasisPage.h&quot;
#include &quot;KabelstPrüfDoc.h&quot;

// CErgCtrl

class CErgCtrl : public CTabCtrl
{
	DECLARE_DYNAMIC(CErgCtrl)

public:
	CErgCtrl();
	virtual ~CErgCtrl();
    int m_nNumberOfPages;
	int m_tabCurrent;
	void m_fnInit2(CKabelstPrfDoc* pmyDoc);
	CDocBasisPage* m_DocBasisPage;
	int typ;

    void SetRectangle(void); 
protected:
	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
};

//TabCtrl.cpp/////////////////////////////////////////////////////////////////
CErgCtrl::CErgCtrl()
: m_DocBasisPage(NULL)
, typ(0)
{
	EnableActiveAccessibility();
}

CErgCtrl::~CErgCtrl()
{
}
 :arrow: //Initialiesierung des TabCtrl
void CErgCtrl::m_fnInit2(CKabelstPrfDoc* pmyDoc)
{

	m_nNumberOfPages=2;
	m_DocBasisPage=new CDocBasisPage[2];
    m_tabCurrent=0;

	for(int i=0;i&lt;m_nNumberOfPages;i++)
	{
		m_DocBasisPage[i].AddPage(&amp;m_DocBasisPage[i].m_SeiteA);
		m_DocBasisPage[i].m_SeiteA.Create(IDD_AUSGABE_1,this);
		m_DocBasisPage[i].m_SeiteA.Pageinit(pmyDoc,i);
		m_DocBasisPage[i].m_SeiteA.ShowWindow(SW_SHOW);
	}
	SetRectangle();
}

void CErgCtrl::SetRectangle(void) 
{ 
    CRect tabRect, itemRect; 
    int nX, nY, nXc, nYc; 

    GetClientRect(&amp;tabRect); 
    GetItemRect(0, &amp;itemRect); 

    nX=itemRect.left; 
    nY=itemRect.bottom+1; 
    nXc=tabRect.right-itemRect.left-1; 
    nYc=tabRect.bottom-nY-1; 

	for(int nCount=0; nCount &lt; m_nNumberOfPages; nCount++)
	{
		m_DocBasisPage[nCount].m_SeiteA.SetWindowPos(&amp;wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW); 
	}
}
BEGIN_MESSAGE_MAP(CErgCtrl, CTabCtrl)
	ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()

// CErgCtrl-Meldungshandler

void CErgCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
	CTabCtrl::OnLButtonDown(nFlags, point);
	if(m_tabCurrent != GetCurFocus())
	{
		m_DocBasisPage[m_tabCurrent].m_SeiteA.ShowWindow(SW_HIDE);
		m_tabCurrent=GetCurFocus();
		m_DocBasisPage[m_tabCurrent].m_SeiteA.ShowWindow(SW_SHOW);
		m_DocBasisPage[m_tabCurrent].m_SeiteA.GetFocus();
	}
}
//Die PropertyPage.h///////////////////////////////////////////////////////////
class CAusgabe : public CPropertyPage
{
	DECLARE_DYNAMIC(CAusgabe)

public:
	CAusgabe();
	virtual ~CAusgabe();

// Dialogfelddaten
	enum { IDD = IDD_AUSGABE_1 };

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung

	DECLARE_MESSAGE_MAP()
public:
	CmyListCtrl AusgabeListe;
         CKabelstPrfDoc* pDoc; :arrow:  //zeiger auf das Doc Objekt
	void Pageinit(CKabelstPrfDoc* pmyDoc, int PageTyp);
	void m_fnListDaten(int typ);
};
//Die PropertyPage.cpp/////////////////////////////////////////////////////////
CAusgabe::CAusgabe()
	: CPropertyPage(CAusgabe::IDD)
	, pDoc(NULL)
{
	EnableActiveAccessibility();
}

CAusgabe::~CAusgabe()
{
}

void CAusgabe::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_AUSGABE_LIST, AusgabeListe);
}

BEGIN_MESSAGE_MAP(CAusgabe, CPropertyPage)
END_MESSAGE_MAP()

// CAusgabe-Meldungshandler

void CAusgabe::Pageinit(CKabelstPrfDoc* pmyDoc, int PageTyp)  :idea: //PropertyPage initialisierung
{
	pDoc=pmyDoc;
	int KnGroesse=0;
	int SpaltenZahl=0;
	int nColInterval=0;
	int e=0;
	char msg[20]=&quot;&quot;;
	AusgabeListe.ModifyStyle(0, LVS_REPORT);
	CRect rect;
	AusgabeListe.GetClientRect(&amp;rect);
	switch(PageTyp)
	{
	case 0:
		nColInterval = rect.Width()/5;

		AusgabeListe.InsertColumn(0, _T(&quot;Stecker Nr:&quot;), LVCFMT_LEFT, nColInterval);
		AusgabeListe.InsertColumn(1, _T(&quot;Stecker Bez.:&quot;), LVCFMT_LEFT, nColInterval*3);
		AusgabeListe.InsertColumn(2, _T(&quot;Kammer Anzahl&quot;), LVCFMT_LEFT, rect.Width()-4*nColInterval);
		break;
	case 1:
		for(int i=0;i&lt;pDoc-&gt;m_pcks.m_ckmKnMenge.m_nTatsaechlicheKnotenmenge;i++)
		{
			if(pDoc-&gt;m_pcks.m_ckmKnMenge.m_pcknKnotenSpringer[i].m_nKnGroesse&gt;KnGroesse)
			{
				KnGroesse=pDoc-&gt;m_pcks.m_ckmKnMenge.m_pcknKnotenSpringer[i].m_nKnGroesse;
			}
		}
		SpaltenZahl=(2+(KnGroesse*2));
		nColInterval = (rect.Width()/SpaltenZahl);

		AusgabeListe.InsertColumn(0, _T(&quot;Knoten Nr:&quot;), LVCFMT_LEFT, nColInterval);
		AusgabeListe.InsertColumn(1, _T(&quot;Knotengroesse:&quot;), LVCFMT_LEFT, nColInterval);
		for(i=2;i&lt;SpaltenZahl;i++)
		{
			if(i%2==0)
			{
				wsprintf(msg,&quot;Anschl.%d Bez:&quot;,e);
				AusgabeListe.InsertColumn(i,msg, LVCFMT_LEFT,nColInterval);
			}
			else
			{
				wsprintf(msg,&quot;Anschl.%d Kammer Nr.:&quot;,e);
				AusgabeListe.InsertColumn(i, msg, LVCFMT_LEFT,nColInterval);
				e++;
			}
		}
		break;
	}
	m_fnListDaten(PageTyp);

}

void CAusgabe::m_fnListDaten(int typ) :idea: //Funktion zur Daten eingabe für die ListCtrl
{
	AusgabeListe.DeleteAllItems();
	char text[10];
	// Use the LV_ITEM structure to insert the items
	LVITEM lvi;
	CString strItem;
	switch(typ)
	{
	case 0:
		for (int i = 0; i &lt; pDoc-&gt;m_pcks.m_csmStMeng.m_nSteckerMenge; i++)
		{
			// Insert the first item
			wsprintf(text,&quot;%i&quot;,i);
			strItem=text;
			lvi.iItem = i;
			lvi.iSubItem = 0;
			lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
			AusgabeListe.InsertItem(&amp;lvi);

			// Set subitem 1
			strItem=pDoc-&gt;m_pcks.m_csmStMeng.m_pcstSteckEingang[i].m_szSteckerBezeichnung;
			lvi.iSubItem =1;
			lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
			AusgabeListe.SetItem(&amp;lvi);

			// Set subitem 2
			wsprintf(text,&quot;%d&quot;,pDoc-&gt;m_pcks.m_csmStMeng.m_pcstSteckEingang[i].m_nPinAnz);
			strItem=text;
			lvi.iSubItem =2;
			lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
			AusgabeListe.SetItem(&amp;lvi);

		}
		break;
	case 1:
		for (int i = 0; i &lt; pDoc-&gt;m_pcks.m_ckmKnMenge.m_nTatsaechlicheKnotenmenge; i++)
		{
			// Insert the first item
			wsprintf(text,&quot;%i&quot;,i);
			strItem=text;
			lvi.iItem = i;
			lvi.iSubItem = 0;
			lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
			AusgabeListe.InsertItem(&amp;lvi);

			// Set subitem 1
			wsprintf(text,&quot;%d&quot;,pDoc-&gt;m_pcks.m_ckmKnMenge.m_pcknKnotenSpringer[i].m_nKnGroesse);
			strItem=text;
			lvi.iSubItem =1;
			lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
			AusgabeListe.SetItem(&amp;lvi);
			int f=0;
			for(int e=2;e&lt;(2+(pDoc-&gt;m_pcks.m_ckmKnMenge.m_pcknKnotenSpringer[i].m_nKnGroesse*2));e++)
			{
				if(e%2==0)
				{
					// Set subitem 2
					strItem=pDoc-&gt;m_pcks.m_ckmKnMenge.m_pcknKnotenSpringer[i].m_pszKnSteck[f];
					lvi.iSubItem =e;
					lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
					AusgabeListe.SetItem(&amp;lvi);
				}
				else
				{
					wsprintf(text,&quot;%d&quot;,pDoc-&gt;m_pcks.m_ckmKnMenge.m_pcknKnotenSpringer[i].m_pnKnPin[f]);
					strItem=text;
					lvi.iSubItem =e;
					lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
					AusgabeListe.SetItem(&amp;lvi);
					f++;
				}

			}
			break;

		}
	}
}
///Ende
</code></pre>
<p>Bitte helft mir!!!<br />
und bitte bei Änderungsvorschlägen die Datei in welcher die Änderung statt finden soll mitangeben!</p>
<p>Mit freundlichen Grüssen</p>
<p>Twist</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/72723/probleme-mit-ctrltab-in-der-view</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Apr 2026 18:15:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/72723.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 01 May 2004 16:15:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit ctrltab in der view on Sat, 01 May 2004 16:15:13 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe 2 Probleme und eine SDI-Anwendung geschrieben.<br />
im doc Objekt wird beim ablauf des Programms ein gebilde aus datenobjekte durch Dialogabfragen erstellt.nachdem die abfragen alle durch sind soll das Programm die daten über ein Tabctrl in der view, auf den einzelnen Seiten mit hilfe von einem ListCtrl welches sich in dem PropertyPage objekt befindet darstellen.Also habe ich ein Tabcontrol in die form eingefügt und es wird in der überschriebenen Funktion Ondraw() initialisiert welches dann die seiten initialisiert und somit auch die jeweilige listCtrl.<br />
nun beginnt das erste Problem sobalt das Progammfenster in den hintergrund rutscht weil ich zum beispielden internetexplorer öffne kommt ne Assert fehlermeldung und das Programmstürzt ab.<br />
und zwar bei</p>
<pre><code>m_AusgabeTab.Create( WS_CHILD | WS_VISIBLE, ClientRect, this, 255 );
</code></pre>
<p>in der überschriebenen Ondraw()funktion!<br />
ich hab versucht mit einer if anweisung sie nur einmal durchlaufen zulassen aber dann ist die form der view danach leer!<br />
was mach ich da falsch???<br />
mein 2 Problem ist wenn das gebilde aufgebaut ist werden die Daten von der jeweiligen list nicht dargestellt,<br />
sondern sie Bleibt leer!</p>
<pre><code>//die View.h////////////////////////////////////////////////////////////

#pragma once
#include &quot;ErgCtrl.h&quot;
#include &quot;afxcmn.h&quot;
class CKabelstPrfSet;

class CKabelstPrfView : public CRecordView
{
protected: // Nur aus Serialisierung erstellen
	CKabelstPrfView();
	DECLARE_DYNCREATE(CKabelstPrfView)

public:
	enum{ IDD = IDD_KABELSTPRF_FORM };
	CKabelstPrfSet* m_pSet;

// Attribute
public:
	CKabelstPrfDoc* GetDocument() const;

// Operationen
public:

// Überschreibungen
	public:
	virtual CRecordset* OnGetRecordset();
virtual BOOL PreCreateWindow(CREATESTRUCT&amp; cs);
protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung
	virtual void OnInitialUpdate(); // Erster Aufruf nach Erstellung
	virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);
	virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);
	virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);

// Implementierung
public:
	virtual ~CKabelstPrfView();
#ifdef _DEBUG
	virtual void AssertValid() const;
	virtual void Dump(CDumpContext&amp; dc) const;
#endif

protected:

// Generierte Funktionen für die Meldungstabellen
protected:
	DECLARE_MESSAGE_MAP()
public:
 :arrow: 	CErgCtrl m_AusgabeTab; // Das tab dessen Seiten die Daten ausgeben sollen
protected:
//	void OnAusgabe();
 :arrow: 	afx_msg LPARAM OnAusgabe(WPARAM wpar, LPARAM lpar);// der Meldungshandler der diemeldung abfängt welche geschickt wird wenn die daten dargestellt werden sollen!
	virtual void OnDraw(CDC* pDC);
public:

	bool erledigt;
};

#ifndef _DEBUG  // Debugversion in KabelstPrüfView.cpp
inline CKabelstPrfDoc* CKabelstPrfView::GetDocument() const
   { return reinterpret_cast&lt;CKabelstPrfDoc*&gt;(m_pDocument); }
#endif

//Die View.cpp/////////////////////////////////////////////////////////////////
BEGIN_MESSAGE_MAP(CKabelstPrfView, CRecordView)
	// Standarddruckbefehle
	ON_COMMAND(ID_FILE_PRINT, CRecordView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CRecordView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CRecordView::OnFilePrintPreview)
 	ON_MESSAGE(WM_AUSGABE,OnAusgabe) 
END_MESSAGE_MAP()

// CKabelstPrfView Erstellung/Zerstörung

CKabelstPrfView::CKabelstPrfView()
	: CRecordView(CKabelstPrfView::IDD)
	, erledigt(false)
{
	m_pSet = NULL;
	// TODO: Hier Code zum Erstellen einfügen

}

CKabelstPrfView::~CKabelstPrfView()
{
}

void CKabelstPrfView::DoDataExchange(CDataExchange* pDX)
{
	CRecordView::DoDataExchange(pDX);
	// Sie können hier DDX_Field*-Funktionen einfügen, um die Steuerelemente mit den Datenbankfeldern zu verbinden:
	// DDX_FieldText(pDX, IDC_MYEDITBOX, m_pSet-&gt;m_szColumn1, m_pSet);
	// DDX_FieldCheck(pDX, IDC_MYCHECKBOX, m_pSet-&gt;m_bColumn2, m_pSet);
	// Weitere Informationen finden Sie in den MSDN- und ODBC-Beispielen.
}

BOOL CKabelstPrfView::PreCreateWindow(CREATESTRUCT&amp; cs)
{
	// TODO: Ändern Sie hier die Fensterklasse oder die Darstellung, indem Sie
	//  CREATESTRUCT cs modifizieren.

	return CRecordView::PreCreateWindow(cs);
}

void CKabelstPrfView::OnInitialUpdate()
{
	m_pSet = &amp;GetDocument()-&gt;m_KabelstPrfSet;
	CRecordView::OnInitialUpdate();
}

// CKabelstPrfView drucken

BOOL CKabelstPrfView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// Standardvorbereitung
	return DoPreparePrinting(pInfo);
}

void CKabelstPrfView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: Zusätzliche Initialisierung vor dem Drucken hier einfügen
}

void CKabelstPrfView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: Bereinigung nach dem Drucken einfügen
}

// CKabelstPrfView Diagnose

#ifdef _DEBUG
void CKabelstPrfView::AssertValid() const
{
	CRecordView::AssertValid();
}

void CKabelstPrfView::Dump(CDumpContext&amp; dc) const
{
	CRecordView::Dump(dc);
}

CKabelstPrfDoc* CKabelstPrfView::GetDocument() const // Nicht-Debugversion ist inline
{
	ASSERT(m_pDocument-&gt;IsKindOf(RUNTIME_CLASS(CKabelstPrfDoc)));
	return (CKabelstPrfDoc*)m_pDocument;
}
#endif //_DEBUG

// CKabelstPrfView Datenbankunterstützung
CRecordset* CKabelstPrfView::OnGetRecordset()
{
	return m_pSet;
}

 :arrow: Die untenstehende Funktion wird ausgeführt sobalt die meldung kommt das das Datengebilde fertig aufgebaut wurde
// CKabelstPrfView Meldungshandler
afx_msg LPARAM CKabelstPrfView::OnAusgabe(WPARAM wpar, LPARAM lpar)
//void CKabelstPrfView::OnAusgabe()
{ :warning: //2. Problem es Passiert nichts wenn die funktion durchlaufen wird!!!
	for(int i=0;i&lt;m_AusgabeTab.m_nNumberOfPages;i++)
	{

		m_AusgabeTab.m_DocBasisPage[i].m_SeiteA.m_fnListDaten(i);
		UpdateData(true);
		m_AusgabeTab.m_DocBasisPage[i].m_SeiteA.AusgabeListe.SetRedraw(true);	
	}

//	Invalidate();
	return lpar;
}

 :arrow: die initialisierung mußte ich hier reinsetzen.Sonst gab es noch mehr fehler. für Anregungen bin ich dankbar das anders zu machen!!!
void CKabelstPrfView::OnDraw(CDC* pDC)
{
//	if(!erledigt)
//	{
		erledigt=true;
		CRect ClientRect; 

		GetClientRect(&amp;ClientRect); 
		ClientRect.bottom = 500; 
		ClientRect.left = 10; 
		ClientRect.right = 700; 
		ClientRect.top= 1; 

 :warning: 	m_AusgabeTab.Create( WS_CHILD | WS_VISIBLE, ClientRect, this, 255 ); //Problem zeile des ersten Problems
		m_AusgabeTab.SetExtendedStyle( TCS_EX_FLATSEPARATORS|TCS_BUTTONS | TCS_FLATBUTTONS ); 
		m_AusgabeTab.InsertItem(0,_T(&quot;Stecker Tabelle&quot;)); 
		m_AusgabeTab.InsertItem(1,_T(&quot;Knoten Tabelle&quot;));
//		}
	CKabelstPrfDoc* pmyDoc=GetDocument();
	m_AusgabeTab.m_fnInit2(pmyDoc);

}
//Die TabCtrl.h////////////////////////////////////////////////////////////////
#pragma once
#include &quot;DocBasisPage.h&quot;
#include &quot;KabelstPrüfDoc.h&quot;

// CErgCtrl

class CErgCtrl : public CTabCtrl
{
	DECLARE_DYNAMIC(CErgCtrl)

public:
	CErgCtrl();
	virtual ~CErgCtrl();
    int m_nNumberOfPages;
	int m_tabCurrent;
	void m_fnInit2(CKabelstPrfDoc* pmyDoc);
	CDocBasisPage* m_DocBasisPage;
	int typ;

    void SetRectangle(void); 
protected:
	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
};

//TabCtrl.cpp/////////////////////////////////////////////////////////////////
CErgCtrl::CErgCtrl()
: m_DocBasisPage(NULL)
, typ(0)
{
	EnableActiveAccessibility();
}

CErgCtrl::~CErgCtrl()
{
}
 :arrow: //Initialiesierung des TabCtrl
void CErgCtrl::m_fnInit2(CKabelstPrfDoc* pmyDoc)
{

	m_nNumberOfPages=2;
	m_DocBasisPage=new CDocBasisPage[2];
    m_tabCurrent=0;

	for(int i=0;i&lt;m_nNumberOfPages;i++)
	{
		m_DocBasisPage[i].AddPage(&amp;m_DocBasisPage[i].m_SeiteA);
		m_DocBasisPage[i].m_SeiteA.Create(IDD_AUSGABE_1,this);
		m_DocBasisPage[i].m_SeiteA.Pageinit(pmyDoc,i);
		m_DocBasisPage[i].m_SeiteA.ShowWindow(SW_SHOW);
	}
	SetRectangle();
}

void CErgCtrl::SetRectangle(void) 
{ 
    CRect tabRect, itemRect; 
    int nX, nY, nXc, nYc; 

    GetClientRect(&amp;tabRect); 
    GetItemRect(0, &amp;itemRect); 

    nX=itemRect.left; 
    nY=itemRect.bottom+1; 
    nXc=tabRect.right-itemRect.left-1; 
    nYc=tabRect.bottom-nY-1; 

	for(int nCount=0; nCount &lt; m_nNumberOfPages; nCount++)
	{
		m_DocBasisPage[nCount].m_SeiteA.SetWindowPos(&amp;wndTop, nX, nY, nXc, nYc, SWP_SHOWWINDOW); 
	}
}
BEGIN_MESSAGE_MAP(CErgCtrl, CTabCtrl)
	ON_WM_LBUTTONDOWN()
END_MESSAGE_MAP()

// CErgCtrl-Meldungshandler

void CErgCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
	CTabCtrl::OnLButtonDown(nFlags, point);
	if(m_tabCurrent != GetCurFocus())
	{
		m_DocBasisPage[m_tabCurrent].m_SeiteA.ShowWindow(SW_HIDE);
		m_tabCurrent=GetCurFocus();
		m_DocBasisPage[m_tabCurrent].m_SeiteA.ShowWindow(SW_SHOW);
		m_DocBasisPage[m_tabCurrent].m_SeiteA.GetFocus();
	}
}
//Die PropertyPage.h///////////////////////////////////////////////////////////
class CAusgabe : public CPropertyPage
{
	DECLARE_DYNAMIC(CAusgabe)

public:
	CAusgabe();
	virtual ~CAusgabe();

// Dialogfelddaten
	enum { IDD = IDD_AUSGABE_1 };

protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV-Unterstützung

	DECLARE_MESSAGE_MAP()
public:
	CmyListCtrl AusgabeListe;
         CKabelstPrfDoc* pDoc; :arrow:  //zeiger auf das Doc Objekt
	void Pageinit(CKabelstPrfDoc* pmyDoc, int PageTyp);
	void m_fnListDaten(int typ);
};
//Die PropertyPage.cpp/////////////////////////////////////////////////////////
CAusgabe::CAusgabe()
	: CPropertyPage(CAusgabe::IDD)
	, pDoc(NULL)
{
	EnableActiveAccessibility();
}

CAusgabe::~CAusgabe()
{
}

void CAusgabe::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_AUSGABE_LIST, AusgabeListe);
}

BEGIN_MESSAGE_MAP(CAusgabe, CPropertyPage)
END_MESSAGE_MAP()

// CAusgabe-Meldungshandler

void CAusgabe::Pageinit(CKabelstPrfDoc* pmyDoc, int PageTyp)  :idea: //PropertyPage initialisierung
{
	pDoc=pmyDoc;
	int KnGroesse=0;
	int SpaltenZahl=0;
	int nColInterval=0;
	int e=0;
	char msg[20]=&quot;&quot;;
	AusgabeListe.ModifyStyle(0, LVS_REPORT);
	CRect rect;
	AusgabeListe.GetClientRect(&amp;rect);
	switch(PageTyp)
	{
	case 0:
		nColInterval = rect.Width()/5;

		AusgabeListe.InsertColumn(0, _T(&quot;Stecker Nr:&quot;), LVCFMT_LEFT, nColInterval);
		AusgabeListe.InsertColumn(1, _T(&quot;Stecker Bez.:&quot;), LVCFMT_LEFT, nColInterval*3);
		AusgabeListe.InsertColumn(2, _T(&quot;Kammer Anzahl&quot;), LVCFMT_LEFT, rect.Width()-4*nColInterval);
		break;
	case 1:
		for(int i=0;i&lt;pDoc-&gt;m_pcks.m_ckmKnMenge.m_nTatsaechlicheKnotenmenge;i++)
		{
			if(pDoc-&gt;m_pcks.m_ckmKnMenge.m_pcknKnotenSpringer[i].m_nKnGroesse&gt;KnGroesse)
			{
				KnGroesse=pDoc-&gt;m_pcks.m_ckmKnMenge.m_pcknKnotenSpringer[i].m_nKnGroesse;
			}
		}
		SpaltenZahl=(2+(KnGroesse*2));
		nColInterval = (rect.Width()/SpaltenZahl);

		AusgabeListe.InsertColumn(0, _T(&quot;Knoten Nr:&quot;), LVCFMT_LEFT, nColInterval);
		AusgabeListe.InsertColumn(1, _T(&quot;Knotengroesse:&quot;), LVCFMT_LEFT, nColInterval);
		for(i=2;i&lt;SpaltenZahl;i++)
		{
			if(i%2==0)
			{
				wsprintf(msg,&quot;Anschl.%d Bez:&quot;,e);
				AusgabeListe.InsertColumn(i,msg, LVCFMT_LEFT,nColInterval);
			}
			else
			{
				wsprintf(msg,&quot;Anschl.%d Kammer Nr.:&quot;,e);
				AusgabeListe.InsertColumn(i, msg, LVCFMT_LEFT,nColInterval);
				e++;
			}
		}
		break;
	}
	m_fnListDaten(PageTyp);

}

void CAusgabe::m_fnListDaten(int typ) :idea: //Funktion zur Daten eingabe für die ListCtrl
{
	AusgabeListe.DeleteAllItems();
	char text[10];
	// Use the LV_ITEM structure to insert the items
	LVITEM lvi;
	CString strItem;
	switch(typ)
	{
	case 0:
		for (int i = 0; i &lt; pDoc-&gt;m_pcks.m_csmStMeng.m_nSteckerMenge; i++)
		{
			// Insert the first item
			wsprintf(text,&quot;%i&quot;,i);
			strItem=text;
			lvi.iItem = i;
			lvi.iSubItem = 0;
			lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
			AusgabeListe.InsertItem(&amp;lvi);

			// Set subitem 1
			strItem=pDoc-&gt;m_pcks.m_csmStMeng.m_pcstSteckEingang[i].m_szSteckerBezeichnung;
			lvi.iSubItem =1;
			lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
			AusgabeListe.SetItem(&amp;lvi);

			// Set subitem 2
			wsprintf(text,&quot;%d&quot;,pDoc-&gt;m_pcks.m_csmStMeng.m_pcstSteckEingang[i].m_nPinAnz);
			strItem=text;
			lvi.iSubItem =2;
			lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
			AusgabeListe.SetItem(&amp;lvi);

		}
		break;
	case 1:
		for (int i = 0; i &lt; pDoc-&gt;m_pcks.m_ckmKnMenge.m_nTatsaechlicheKnotenmenge; i++)
		{
			// Insert the first item
			wsprintf(text,&quot;%i&quot;,i);
			strItem=text;
			lvi.iItem = i;
			lvi.iSubItem = 0;
			lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
			AusgabeListe.InsertItem(&amp;lvi);

			// Set subitem 1
			wsprintf(text,&quot;%d&quot;,pDoc-&gt;m_pcks.m_ckmKnMenge.m_pcknKnotenSpringer[i].m_nKnGroesse);
			strItem=text;
			lvi.iSubItem =1;
			lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
			AusgabeListe.SetItem(&amp;lvi);
			int f=0;
			for(int e=2;e&lt;(2+(pDoc-&gt;m_pcks.m_ckmKnMenge.m_pcknKnotenSpringer[i].m_nKnGroesse*2));e++)
			{
				if(e%2==0)
				{
					// Set subitem 2
					strItem=pDoc-&gt;m_pcks.m_ckmKnMenge.m_pcknKnotenSpringer[i].m_pszKnSteck[f];
					lvi.iSubItem =e;
					lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
					AusgabeListe.SetItem(&amp;lvi);
				}
				else
				{
					wsprintf(text,&quot;%d&quot;,pDoc-&gt;m_pcks.m_ckmKnMenge.m_pcknKnotenSpringer[i].m_pnKnPin[f]);
					strItem=text;
					lvi.iSubItem =e;
					lvi.pszText = (LPTSTR)(LPCTSTR)(strItem);
					AusgabeListe.SetItem(&amp;lvi);
					f++;
				}

			}
			break;

		}
	}
}
///Ende
</code></pre>
<p>Bitte helft mir!!!<br />
und bitte bei Änderungsvorschlägen die Datei in welcher die Änderung statt finden soll mitangeben!</p>
<p>Mit freundlichen Grüssen</p>
<p>Twist</p>
]]></description><link>https://www.c-plusplus.net/forum/post/512428</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/512428</guid><dc:creator><![CDATA[Twist]]></dc:creator><pubDate>Sat, 01 May 2004 16:15:13 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit ctrltab in der view on Sun, 02 May 2004 13:17:57 GMT]]></title><description><![CDATA[<p>hate keiner ne Ahnung was die Fehlerauslösen könnte?</p>
<p>bitte helft mir?</p>
<p>Mit freundlichen Grüssen!<br />
Twist</p>
]]></description><link>https://www.c-plusplus.net/forum/post/512872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/512872</guid><dc:creator><![CDATA[Twist]]></dc:creator><pubDate>Sun, 02 May 2004 13:17:57 GMT</pubDate></item></channel></rss>