You are here

Erstellen der Zuweisungsroutinen

Die Funktionen SetValue(double), GetValue() und der Operator = stellen die Schnittstelle der Klasse zu dem umgebenden Programm dar. Mit ihnen kann der Wert des Controls gesetzt und abgefragt werden.

void CHertzEdit::SetValue(double dValue)
{
        m_dValue=dValue;
        m_strValue=DoubleToString(m_dValue).c_str();
}

double CHertzEdit::GetValue()
{
        return(m_dValue);
}

CHertzEdit& CHertzEdit::operator =(double dValue)
{
        SetValue(dValue);
        return(*this);
}

Die Funktionen GetValue(HWND), SetValue(HWND), SetValueToWindow(), SetValueToWindow(HWND), GetValueFromWindow() und GetValueFromWindow(HWND) dienen als Schnittstelle zu dem Control.
Die eigentliche Arbeit wird von den Funktionen SetValueToWindow(HWND) und GetValueFromWindow(HWND) übernommen. Die Funktionen SetValue(HWND) und GetValue(HWND) werden für den Datentransfer mittels DDX benutzt, die Funktionen SetValueToWindow() und GetValueFromWindow() für den Datentransfer, der durch WM_KILLFOCUS ausgelöst wird.

void CHertzEdit::SetValueToWindow(HWND hWnd)
{
        if (m_hWnd)
                ::SetWindowText(hWnd, m_strValue);
}

BOOL CHertzEdit::GetValueFromWindow(HWND hWnd)
{
        CString strValue;
        TCHAR* pChar;
        BOOL bReturn;
        int i;
        double d;

        i= ::GetWindowTextLength(hWnd);
        if (!i) return(FALSE);

        // hole den Inhalt des Controls
        pChar=new char[i+1];
        ::GetWindowText(hWnd, pChar, i+1);
        strValue=pChar;
        delete[] pChar;

        // Konvertieren in double
        d=CStringToDouble(strValue);

        // wenn gültig in Member-Variabler speichern
        if ((d < 0.0) && !m_bNegativAllowed)
        { // Inhalt ist ung?ltig
                if (m_dValue > 0.0)
                        m_dValue=-1.0; // Wert ungültig machen
                bReturn=FALSE; // sonst ungültigen Wert belassen
        }
        else
        {
                m_dValue = d;
                bReturn = TRUE;
        }

        // zurückkonvertieren (vor allem wenn invalid)
        m_strValue = DoubleToString(m_dValue).c_str();
        return(bReturn);
}

GetValue(HWND) und SetValue(HWND) werden von der Funktion DDX_HertzEdit benutzt, die innerhalb des Datentransfers mittels DDX durch DoDataExchange() aufgerufen wird.

BOOL CHertzEdit::GetValue(HWND hWndCtrl)
{
        return(GetValueFromWindow(hWndCtrl));
}

BOOL CHertzEdit::SetValue(HWND hWndCtrl)
{
        m_strValue = DoubleToString(m_dValue).c_str();
        SetValueToWindow(hWndCtrl);
        return(m_strValue.CompareNoCase("invalid") == 0);
}

Die Funktionen SetValueToWindow() und GetValueFromWindow() werden von OnKillFocus() aufgerufen (s.u.)

void CHertzEdit::SetValueToWindow()
{
        HWND hWnd = GetSafeHwnd();
        SetValueToWindow(hWnd);
}

BOOL CHertzEdit::GetValueFromWindow()
{
        HWND hWnd = GetSafeHwnd();
        return(GetValueFromWindow(hWnd));
}