Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с кодировкой  (Прочитано 4937 раз)
0 Пользователей и 1 Гость смотрят эту тему.
remedius
Гость
« : 24-07-2006 08:55 » 

Приложение MFC / unicode. В обработчике ::PreTranslateMessage(MSG* pMsg) пытаюсь получить содержимое буфера (при ctrl_c к примеру)
            if(AfxGetMainWnd()->OpenClipboard())
   {
      buffer = (LPTSTR)GetClipboardData(CF_UNICODETEXT);
      CloseClipboard();
                            ...........
             }
при попытке скопировать с какого-либо приложения текст (блокнот, либо ворд), все ок. А если с какого-либо контрола данного приложения (edit например), то всякие закорючки получаются. Пробовала также CF_TEXT и CF_OEMTEXT - не помогает.
Если кто знает, подскажите пожалуйста, буду очень благодарна.
« Последнее редактирование: 24-07-2006 09:00 от remedius » Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #1 : 26-07-2006 22:40 » 

Довольно свободное обращение с буфером... В самом общем случае так делать нельзя. Например следует сначала проверить тип даных в буфере IsClipboardFormatAvailable(CF_UNICODETEXT). Недавно была темка про проблемы с буфером обмена. Буфер срабатывал каждый второй раз, или что-то в этом роде, если интересны подробности - поищи. Если хочется готового решения:

Код:
CString GetClipboardData()
{
CString stReturn = _T("");
        if(::IsClipboardFormatAvailable(CF_UNICODETEXT))
{
::OpenClipboard(NULL);
HGLOBAL hGlobal;
if(hGlobal = ::GetClipboardData(CF_UNICODETEXT))
{
PTSTR pGlobal = (PTSTR)::GlobalLock(hGlobal);
PTSTR pText = (PTSTR)malloc(::GlobalSize(hGlobal));
memcpy(pText, pGlobal, ::GlobalSize(hGlobal));
stReturn = CString(pText);
::GlobalUnlock(hGlobal);
free(pText);
}
::CloseClipboard();
}
return stReturn;
}
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
remedius
Гость
« Ответ #2 : 17-08-2006 07:45 » 

Спасибо. Работает.
« Последнее редактирование: 06-12-2007 19:14 от Алексей1153++ » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines