Delen via


Streams gebruiken

U kunt streams gebruiken om gegevens over te dragen naar of uit een uitgebreid besturingselement voor bewerken. Een stroom wordt gedefinieerd door een EDITSTREAM structuur, waarmee een buffer en een door de toepassing gedefinieerde callback-functie worden opgegeven.

Gebruik het EM_STREAMIN bericht om gegevens in een rich edit control te lezen, dat wil zeggen, de gegevens in te streamen. Het besturingselement roept herhaaldelijk de callback-functie van de toepassing aan, waarmee telkens een deel van de gegevens in de buffer wordt overgedragen.

Als u de inhoud van een rich edit control wilt opslaan (dat wil zeggen, de gegevens te streamen), kunt u het EM_STREAMOUT bericht gebruiken. Het besturingselement schrijft herhaaldelijk naar de buffer en roept vervolgens de callback-functie van de toepassing aan. Voor elke aanroep slaat de callback-functie de inhoud van de buffer op.

Wat u moet weten

Technologieën

Voorwaarden

  • C/C++
  • Programmeren van Windows-gebruikersinterface

Aanwijzingen

Een Stream gebruiken

In het volgende codevoorbeeld ziet u hoe u een .rtf-bestand kunt lezen in een uitgebreid besturingselement voor bewerken. De bestandsgreep wordt doorgegeven aan de callback-functie via de dwCookie lid van de EDITSTREAM structuur.

DWORD CALLBACK EditStreamCallback(DWORD_PTR dwCookie, 
                                  LPBYTE lpBuff,
                                  LONG cb, 
                                  PLONG pcb)
{
    HANDLE hFile = (HANDLE)dwCookie;
    
    if (ReadFile(hFile, lpBuff, cb, (DWORD *)pcb, NULL)) 
    {
        return 0;
    }
    
    return -1;
}

BOOL FillRichEditFromFile(HWND hwnd, LPCTSTR pszFile)
{
    BOOL fSuccess = FALSE;
    
    HANDLE hFile = CreateFile(pszFile, GENERIC_READ, 
                              FILE_SHARE_READ, 0, OPEN_EXISTING,
                              FILE_FLAG_SEQUENTIAL_SCAN, NULL);
        
    if (hFile != INVALID_HANDLE_VALUE) 
    {
        EDITSTREAM es = { 0 };
        
        es.pfnCallback = EditStreamCallback;
        es.dwCookie    = (DWORD_PTR)hFile;
        
        if (SendMessage(hwnd, EM_STREAMIN, SF_RTF, (LPARAM)&es) && es.dwError == 0) 
        {
                fSuccess = TRUE;
        }
        
        CloseHandle(hFile);
    }
    
    return fSuccess;
    
}

Gebruik van Rich Edit-controles

demo van algemene besturingselementen van Windows (CppWindowsCommonControls)