CPropertyPage und CTypedPtrList
-
Hallo,
ich habe mir mit dem Klassenassistenten ein Programm in CFormView mit einigen Eigenschaftsseiten für verschiedene Lottosysteme erstellt. Nun will ich in den einzelnen Seiten mit CTypedPtrList < COblist, CLotto*> CLottoList blättern. Dazu habe ich im Menu die Buttons HOME, PREV, NEXT, END, INS und DEL erstellt und folgendermassen in der View initialisiert:
void CLottoMax1View::OnUpdate(CView* pSender, LPARAM lHint, CObject* pHint)
{
// TODO: Speziellen Code hier einfügen und/oder Basisklasse aufrufen
m_position = m_pList->GetHeadPosition();GetEntry(m_position);
}void CLottoMax1View::OnClear()
{
// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
ClearEntry();
}void CLottoMax1View::OnLottoHome()
{
// TODO: Code für Befehlsbehandlungsroutine hier einfügen
if(!m_pList->IsEmpty())
{
m_position = m_pList->GetHeadPosition();
GetEntry(m_position);
}
}void CLottoMax1View::OnLottoEnd()
{
// TODO: Code für Befehlsbehandlungsroutine hier einfügen
if(!m_pList->IsEmpty())
{
m_position = m_pList->GetTailPosition();
GetEntry(m_position);
}
}void CLottoMax1View::OnLottoPrev()
{
// TODO: Code für Befehlsbehandlungsroutine hier einfügen
POSITION pos;
if((pos = m_position) != NULL)
{
m_pList->GetPrev(pos);
if(pos)
{
GetEntry(pos);
m_position = pos;
}
}
}void CLottoMax1View::OnLottoNext()
{
// TODO: Code für Befehlsbehandlungsroutine hier einfügen
POSITION pos;
if((pos = m_position) != NULL)
{
m_pList->GetNext(pos);
if(pos)
{
GetEntry(pos);
m_position = pos;
}
}
}void CLottoMax1View::OnLottoIns()
{
// TODO: Code für Befehlsbehandlungsroutine hier einfügen
InsertEntry(m_position);
GetDocument()->SetModifiedFlag();
GetDocument()->UpdateAllViews(this);
}void CLottoMax1View::OnLottoDel()
{
// TODO: Code für Befehlsbehandlungsroutine hier einfügen
POSITION pos;
if((pos = m_position) != NULL)
{
m_pList->GetNext(pos);
if(pos == NULL)
{
pos = m_pList->GetHeadPosition();
if(pos == m_position)
{
pos = NULL;
}
}
GetEntry(pos);
CLotto* ps = m_pList->GetAt(m_position);
m_pList->RemoveAt(m_position);
delete ps;
m_position = pos;
GetDocument()->SetModifiedFlag();
GetDocument()->UpdateAllViews(this);
}
}void CLottoMax1View::OnUpdateLottoHome(CCmdUI* pCmdUI)
{
// TODO: Code für die Befehlsbehandlungsroutine zum Aktualisieren der Benutzeroberfläche hier einfügen
POSITION pos;
pos = m_pList->GetHeadPosition();
pCmdUI->Enable((m_position != NULL) && (pos != m_position));
}void CLottoMax1View::OnUpdateLottoEnd(CCmdUI* pCmdUI)
{
// TODO: Code für die Befehlsbehandlungsroutine zum Aktualisieren der Benutzeroberfläche hier einfügen
POSITION pos;
pos = m_pList->GetTailPosition();
pCmdUI->Enable((m_position != NULL) && (pos != m_position));
}void CLottoMax1View::OnUpdateLottoDel(CCmdUI* pCmdUI)
{
// TODO: Code für die Befehlsbehandlungsroutine zum Aktualisieren der Benutzeroberfläche hier einfügen
pCmdUI->Enable(m_position != NULL);
}Leider funktionieren diese Anweisungen nicht in den Eigenschaftsblättern. Auch die Serialisierung geht nicht.
Kann mir jemand helfen?
Danke und viele Grüsse
Franz
-
Hallo,
ist denn keiner da, der mir meine Frage beantworten kann oder will?
Grüsse
Franz
-
Aufgrund Deines anderen Postings gehe ich mal davon aus, das Du in dem CFormView weitere Controls hast. Dir muss klar sein wie das COmmand Routing funktioniert.
Ein Command Handler in einem Control, dass in dem View liegt wird nicht angesprochen werden, wenn Du im OnCmdMsg Handler des Views dies nicht auch vorsiehst.DIe Standard Routing Mechanismen sind in dieser TN012 (Technical Note) beschrieben. Es ist hier nicht vorgesehen Command in einem View weiter zu routen. Wenn Du das willst musst Du selbst dafür sorgen.
http://msdn2.microsoft.com/en-us/library/xt2c310k(vs.80).aspx
-
Danke Martin,
werde mal probieren, vielleicht klappt es.