Hallo,
ich sitze wahrscheinlich schon zu lange davor und verstehe nicht mehr den Zusammenhang. Ich habe eine dialogbasierende Anwendung CWiwoDlg als Main-Klasse. Nebenbei habe ich in einer Klasse CGraph für eine Zeichenroutine eines Cursors, welcher bei LBUTTONDOWN über den jeweilige CPOINT point.x in X-Richtung gesetzt wird. Beim Aufruf aus der Main-Klasse findet er an rotmarkierter Stelle nicht mehr das Handle vom Typ CWnd *m_pWnd und springt beim debuggen genau an dieser Stelle heraus. Weiß jemand woran das liegen könnte?
Codeausschnitt aus CWiwoDlg.cpp
Codeausschnitt aus CGraph.cpp
ich sitze wahrscheinlich schon zu lange davor und verstehe nicht mehr den Zusammenhang. Ich habe eine dialogbasierende Anwendung CWiwoDlg als Main-Klasse. Nebenbei habe ich in einer Klasse CGraph für eine Zeichenroutine eines Cursors, welcher bei LBUTTONDOWN über den jeweilige CPOINT point.x in X-Richtung gesetzt wird. Beim Aufruf aus der Main-Klasse findet er an rotmarkierter Stelle nicht mehr das Handle vom Typ CWnd *m_pWnd und springt beim debuggen genau an dieser Stelle heraus. Weiß jemand woran das liegen könnte?
Codeausschnitt aus CWiwoDlg.cpp
Code:
void CWiwoDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
CGraph pGraph;
CRect rect = pGraph.CalcDataArea();
BOOL bFlag = CheckRect(point, rect);
if(bFlag == TRUE)
{
int nCX, nCY;
nCX = point.x;
nCY = point.y;
CString sCX, sCY;
sCX.Format("%d", nCX);
sCY.Format("%d", nCY);
m_ctrlCX.SetWindowText(sCX);
m_ctrlCY.SetWindowText(sCY);
pGraph.DrawCursor(nCX);
}
else
TRACE("\nCX und CY liegen ausserhalb!\n");
CDialog::OnLButtonDown(nFlags, point);
}
BOOL CWiwoDlg::CheckRect(CPoint point, CRect rect)
{
if(point.x < rect.left) return FALSE;
if(point.x > rect.right) return FALSE;
if(point.y > rect.bottom) return FALSE;
if(point.y < rect.top) return FALSE;
return TRUE;
}
Codeausschnitt aus CGraph.cpp
Code:
void CGraph::DrawCursor(int nCX)
{
try
{
if(!m_pWnd)
return;
CPen *pStandardPen;
CPen MyPen;
CRect DataArea = CalcDataArea();
// DC zum Zeichnen anlegen
CDC *pDC = m_pWnd->GetDC();
MyPen.CreatePen(PS_SOLID, 1, RGB(255,255,255));
// MyPen als Standard Pen an pDC übergeben
pStandardPen = pDC->SelectObject(&MyPen);
// ### TODO Zeichenroutine für Cursor ###
pDC->MoveTo(/*m_iGraphWidth / 2*/nCX, DataArea.top);
pDC->LineTo(/*m_iGraphWidth / 2*/nCX, DataArea.bottom);
// CleanUp
m_pWnd->ReleaseDC(pDC);
}
catch(CResourceException &CEx)
{
char msg[128];
CEx.GetErrorMessage(msg, sizeof(msg));
MessageBox(NULL, msg, "Fehler", MB_ICONERROR);
}
}