Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скопировать в переменную типа LPBYTE из CString, CRichEditCtrl и метод StreamIn 
:(
    Опции темы
AndreySol
Дата 23.8.2011, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: 1
Всего: 1



в классе CRichEditCtrl есть метод StreamIn, в котором используется CALLBACK-функция. Необходимо считать этим методом данные из CString-переменной в RichEdit.
Примерно так:
Код

CString strTest;

static DWORD CALLBACK REStreamInCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CThisClass *pThisClass = (CThisClass*) dwCookie;

//// Здесь надо скопировать в pbBuff содержимое pThisClass -> strTest. КАК ЭТО сделать ? /////////


return 0;
}

void CThisClass::WriteToRE()
{
strTest = _T("Тестовая строка");

EDITSTREAM es = {0};
es.dwCookie = (DWORD) this;
es.pfnCallback = REStreamInCallback;
m_RichEdit.StreamIn(SF_TEXT, es);
}


Это сообщение отредактировал(а) AndreySol - 23.8.2011, 20:17
PM MAIL   Вверх
Earnest
Дата 24.8.2011, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(AndreySol @  23.8.2011,  21:16 Найти цитируемый пост)
//// Здесь надо скопировать в pbBuff содержимое pThisClass -> strTest. КАК ЭТО сделать ? 

Например, использовать функцию memcpy.


--------------------
...
PM   Вверх
AndreySol
Дата 24.8.2011, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: 1
Всего: 1



А пример кода можно ?
PM MAIL   Вверх
Earnest
Дата 24.8.2011, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



AndreySol, ты же вроде не вчера родился. В MSDN заглянуть лень, чтобы синтаксис посмотреть? Ладно,
memcpy (pDestination, pSource, NumberOfBytes).


--------------------
...
PM   Вверх
AndreySol
Дата 24.8.2011, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: 1
Всего: 1



Цитата

AndreySol, ты же вроде не вчера родился. В MSDN заглянуть лень, чтобы синтаксис посмотреть? Ладно, memcpy (pDestination, pSource, NumberOfBytes). 

Я не про синтаксис memcpy спрашивал, а про то как организовать считывание из строки в CALLBACK-функции. Или Вы будете утверждать, что в таком виде CALLBACK-функция прекрасно заработает ?
Код

static DWORD CALLBACK REStreamInCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CThisClass *pThisClass = (CThisClass*) dwCookie;

memcpy(...., ...., ....); 

return 0;
}

PM MAIL   Вверх
volatile
Дата 25.8.2011, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2107
Регистрация: 7.1.2011

Репутация: 4
Всего: 85



Код

strcpy ( pbBuff, pThisClass->strTest );

 smile 
PM MAIL   Вверх
Earnest
Дата 25.8.2011, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Цитата(AndreySol @  25.8.2011,  00:08 Найти цитируемый пост)
Или Вы будете утверждать, что в таком виде CALLBACK-функция прекрасно заработает ?

С многоточиями, конечно, нет. Даже не скомпилируется. Но после подстановки параметров, почему бы и нет? Или как у volatile, через strcpy.
 smile 

Только обрати внимание на доп. аргументы CALLBACK'а. Насколько помню, cb - размер буфера (нужно проверить, что он имеет достаточную длину), а в pcb возможно надо записать реальную длину. Уточни в MSDN.


--------------------
...
PM   Вверх
AndreySol
Дата 27.8.2011, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 772
Регистрация: 19.6.2004

Репутация: 1
Всего: 1



тут мне на RSDN подсказали такой-вот способ:
Код
static DWORD CALLBACK REStreamInCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
    CMemFile *pMemFile = (CMemFile*) dwCookie;

    *pcb = pMemFile->Read(pbBuff,cb);

    return 0;
}

strTest = _T("Тестовая строка");

void CThisClass::WriteToRE()
{

    CMemFile pFile;
    UINT uiBuffSize = 0;
    void* lpszTextIN = (void*)(LPCTSTR)strTest;
    BOOL bUnicode = FALSE;

#ifdef _UNICODE
    bUnicode = TRUE;
#else
    bUnicode = FALSE;
#endif

    UINT uiTextSize = bUnicode ? wcslen((LPCWSTR)lpszTextIN) : strlen((LPCSTR)lpszTextIN);
    uiBuffSize = bUnicode ? uiTextSize*sizeof(WCHAR) : uiTextSize;

    pFile.Attach((unsigned char*)lpszTextIN, uiBuffSize);

    EDITSTREAM es = {0};
    es.dwCookie = (DWORD) &pFile;
    es.pfnCallback = REStreamInCallback;
    m_RichEdit.StreamIn(SF_TEXT, es);

    pFile.Detach();
}

вроде работает. Похоже это наилучший способ ?
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0495 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.