PDA

Visualizza la versione completa : [C++ MFC] GetDlgItem & DDX


Paulin
15-12-2008, 14:31
Ho un controllo CEdit che gestisco mediante la funzione CWnd::GetDlgItem in questo modo:


CWnd* pWnd = GetDlgItem( IDC_EDIT1 );

Più precisamente il codice è sviluppato sul gestore OnSize:


void CMyDialog::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

CWnd* pWnd = GetDlgItem( IDC_EDIT1 );
if (pWnd == NULL)
{
AfxMessageBox("Puntatore nullo");
}
else
{
pWnd->MoveWindow( 10, (cy - 30), 100, 20, TRUE);
}
}

Il codice lavora bene, ma vorrei aprofittare delle funzionalità DDX di MFC, associando una vatriabile al controllo:


CEdit m_edit1;

void CMyDialog:: DoDataExchange(CDataExchange* pDX)
{
CDialog:: DoDataExchange(pDX);
DDX_Control(pDX, IDC_EDIT1, m_edit1);
}

A questo punto dovrei utilizzare la variabile m_edit1 al posto del puntatore pWnd, ma in questo modo incontro problemi al controllo condizionale sulla validità della variabile:


void CMyDialog::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);

CEdit* pEdit1 = &m_edit1;
if (pEdit1 == NULL)
{
AfxMessageBox("Puntatore nullo");
}
else
{
pEdit1->MoveWindow( 10, (cy - 30), 100, 20, TRUE);
}
}

Infatti questo mi provoca una asserzione da Winocc.cpp sulla linea 308, il ché significa che pEdit1 ha passato il controllo condizionale risultando "non nullo", ma non avendo neppure un valore valido per chiamare la funzione MoveWindow .

Qualche suggerimento?

Intanto, un saluto a tutti.

Loading