Member
Статус: Не в сети Регистрация: 04.09.2004 Откуда: R#4
не компилится прога
плюется на вызов макросов GET_X_LPARAM и Y
E:>"E:DevelopMicrosoft Visual StudioVC98BinVCVARS32.BAT"
Setting environment for using Microsoft Visual C++ tools.
E:>"E:DevelopMicrosoft Visual StudioVC98BinCL.EXE"
F:GatorCPPmouse_messmouse1.cpp user32.lib gdi32.lib
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.
Добавлено спустя 15 минут, 45 секунд: поменял их на LOWORD(lParam) и HIWORD вроде работает но коечо другое не пашет
и все же чего ж с макросами не получаецца?
Advanced member
Статус: Не в сети Регистрация: 09.03.2004 Откуда: Кишинёв
Народ помогите. Пытаюсь скопировать в буфер обмена строчку с рускими буквами
Код:
void CNew_pingDlg::CopyTextToClipboard(CString test) { if (AfxGetMainWnd()->OpenClipboard())// если буфер обмена удалось открыть то { if (EmptyClipboard()) // Очистить буфер { HGLOBAL clipbuffer; char * buffer; // указатель на данные clipbuffer = GlobalAlloc(GMEM_DDESHARE, test.GetLength()+1);// выделить память buffer = (char*)GlobalLock(clipbuffer); // блокировать буфер strcpy(buffer, LPCSTR(test)); // копировать в него данные GlobalUnlock(clipbuffer); // разблокировать SetClipboardData(CF_TEXT,clipbuffer); // установить данные и тип if (!CloseClipboard()) AfxMessageBox("Error Close");// закрыть } else AfxMessageBox("Error Empty"); } else AfxMessageBox("Error Open"); }
Вставляется полная лажа. С англ. всё впорядке. Где грабли?
Advanced member
Статус: Не в сети Регистрация: 09.03.2004 Откуда: Кишинёв
Daemon Да дело наверное точно в этом уникоде: Если вставить в нотпад и попытатся сохранить (в ANSI по умолчанию), то блокнот матернётся и предложит сохранить в юникоде. При этом при последующих открытиях показывает всё равно лажу. Листер от тотал командера тоже видит лажу. А вот штирлиц (программа - распознователь кодировок) сразу открывает и говорит, что показал без преобразований. Наскока я понял нужно наоборот как-то избавится от этого юникода. Но как ...
Daemon Наверно проблемы с кодировкой (VS7.1).
Я из фара в буфер копирую (можно как Win так и Дос кодировку) и всё работает нормально. Наоборот тоже работает (проверил).
А получается всё равно фигня. Хотя заметил, что если вставить в "умные" редакторы (AkelPad, DosNavigator32), то они нормально воспринимают эту ботву, а всякие блокноты, ворды и прочая хрень тупят.
Advanced member
Статус: Не в сети Регистрация: 09.03.2004 Откуда: Кишинёв
Вот наконец в войне со злобным монстром "Программирование" один фланг прорвал . Немного терпения и яндекс родили такую функцию:
Код:
void CNew_pingDlg::CopyTextToClipboard(CString test) { if (AfxGetMainWnd()->OpenClipboard())// если буфер обмена удалось открыть то { if (EmptyClipboard()) // Очистить буфер { HGLOBAL clipbuffer; char * buffer; // указатель на данные int size = (test.GetLength())*sizeof(wchar_t) + 2; clipbuffer = GlobalAlloc(GMEM_DDESHARE, size);// выделить память buffer = (char*)GlobalLock(clipbuffer); // блокировать буфер
GlobalUnlock(clipbuffer); // разблокировать SetClipboardData(CF_UNICODETEXT,clipbuffer); // установить данные и тип if (!CloseClipboard()) AfxMessageBox("Error Close");// закрыть } else AfxMessageBox("Error Empty"); } else AfxMessageBox("Error Open"); }
Нужно было конвертить в юникод, а потом в буфер. Правда ещё не знаю как это себя поведёт в операционке незнакомой с юникодом.
Был ещё один вариант: переключать программно раскладку клавиатуры на русский, но это геморой, хотя работало.
Advanced member
Статус: Не в сети Регистрация: 09.03.2004 Откуда: Кишинёв
Вот тока что проверил на Вынь98 - не работает. Обнуляет буфер и ничего не копирует в него. По ходу надо определить версию винды и если меньше версии ххх (предположительно все NT уже дружат с юникодом), то просто использовать CF_TEXT.
Добавлено спустя 1 час, 36 минут, 27 секунд: Значит битва продолжается . Сделал определение версии и если это NT то копируем по второму способу (CF_UNICODETEXT), иначе по первому (CF_TEXT). И можно было почти радоватся, т.к. работало и под 98 и под XP, но ... блин, если вставлять в едитбоксы сделанные в этом же VC71(например в этой же программе или любой другой) то вставляются вопросы. При этом любые другие приложения нормально всё воспринимают. Нашёл в настройках проекта "Use Unicode Character Set" (по умолчанию "Use Multi-Byte Character Set"). Если прогрмма скомпилена под юникод то всё нормально вставляется, но моя прога не компилится (начинают конфликтовать CString и char* ). Но наверное придётся всё же переделывать, пока не скомпилится. Типа надо соответсвовать времени .
Member
Статус: Не в сети Регистрация: 15.04.2004 Откуда: Москва
нет конечно. TCHAR объявлен как unsigned short. А функции strxxx работают с char. Для работы с UNICODE строками используются wcsxxx
т.е. wcscpy(str,L"Хэлло ворлд");
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 13
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения