DoDataExchange für eigenes Ctrl



  • Hallo

    ich habe mir ein Ctrl aus nem Cwnd gebaut.
    Es besitzt static, edit, und ne Checkbox/Button.

    Da ich viele dieser Ctrls hab wollte ich in meinem View mit DoDataExchange einfacher überprüfen was in dem EditFeld steht.

    Welche Funktionen muss ich dafür überschreiben?

    hatte schon GetWindowText probiert aber das ging nicht.

    Gruß Has3


  • Mod

    Du musst gar nichts überschreiben.
    Du baust Dir einfach selber eine entsprechende Funktion:

    Ich habe sowas mal gebaut um das ItemData einer ComboBox auszulesen.
    Die entsorechende DDX Zeile schreibst Du dann halt manuell in DoDataExchange:

    DDX-CBItemData(pDX,IDC_MYID, m_dwMyDataField);
    
    void AFXAPI DDX_CBItemData(CDataExchange* pDX, int nIDC, DWORD &dwData)
    {
        HWND hWndCtrl = pDX->PrepareCtrl(nIDC);
        if (pDX->m_bSaveAndValidate) 
        {
            // Get the current Topic
            int iIndex = (int)::SendMessage(hWndCtrl, CB_GETCURSEL, 0, 0L);
            if (iIndex!=CB_ERR)
                dwData = (DWORD)::SendMessage(hWndCtrl, CB_GETITEMDATA, iIndex, 0L);
            else
                dwData = 0;
        } 
        else 
        {
            // Select Topic
            int iIndex,
                iMax = iMax=(int)::SendMessage(hWndCtrl, CB_GETCOUNT, 0, 0L);
            for (iIndex=0; iIndex<iMax; ++iIndex) 
            {
                // Just search
                if (dwData==(DWORD)::SendMessage(hWndCtrl, CB_GETITEMDATA, iIndex, 0L))
                    break;
            }             
            // Found ?
            ::SendMessage(hWndCtrl, CB_SETCURSEL, iIndex<iMax ? iIndex : -1, 0L);            
        }
    }
    


  • ahso 💡
    Dachte das greift auf irgendwelche Funktionen des Ctrl zu um den Text zu holen.

    werd das ausprobieren. vielen Dank


  • Mod

    Kommt drauf an was Du machst. Ob Dunun eine Nachricht sendest oder eine Funktion des Control ausführst ist doch letzten Endes egal oder?


Anmelden zum Antworten