· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› кириллицу в clipboard

Посл.отвђт Сообщенiе


Дата: Мар 14, 2004 18:45:51

Загоняю русские буквы в буфер обмена через SetClipboardData,CF_TEXT

Но при вставке этого текста из буфера в Блокнот получаються только зяблики .

Как сделать кириллицу доступной для Блокнота и др. программ ?


Дата: Мар 14, 2004 21:13:56

Ну это такой глюк имеет место только под NT.


Дата: Мар 15, 2004 00:43:38

А кириллица в юникоде?


Дата: Мар 15, 2004 06:45:20 · Поправил: q_q

bogrus
Дополнительно к CF_TEXT надо CF_LOCALE.
#include <windows.h>
#include <stdio.h>

int main(void)
{
  HGLOBAL  h = NULL;
  DWORD   *p = NULL;
  char     s[]  = "проверка";

  if (0 != OpenClipboard(NULL))
  {
    EmptyClipboard();

    if (NULL != (h = GlobalAlloc(GMEM_MOVEABLE + GMEM_DDESHARE, sizeof(DWORD))))
    {
      if (NULL != (p = (DWORD *) GlobalLock(h)))
      {
        *p = 0x0419;
        GlobalUnlock(h);
        if (NULL != SetClipboardData(CF_LOCALE, h))
        {
          DWORD l = lstrlen(s);
          if (NULL != (h = GlobalAlloc(GMEM_MOVEABLE + GMEM_DDESHARE, l + 1)))
          {
            if (NULL != (p = (DWORD *) GlobalLock(h)))
            {
              lstrcpy((PSTR)p, s);
              GlobalUnlock(h);
              if (NULL != SetClipboardData(CF_TEXT, h))
                printf("ok\n");
            }
          }
        }
      }
    }
    CloseClipboard();
  }

  return 0;
}
ps разумеется текст должен быть ansi.


Дата: Мар 15, 2004 14:16:26 · Поправил: bogrus

Asterix
Ok , будем знать :)

Quantum
В ANSI (CF_TEXT) , но UNICODE (CF_UNICODETEXT) тоже не помешает предусмотреть

q_q
Пасиба , работает


Дата: Мар 15, 2004 21:26:22

GMEM_MOVEABLE + GMEM_DDESHARE

так привыкать делать не надо !!!
Надо вот так:
GMEM_MOVEABLE | GMEM_DDESHARE


Дата: Мар 15, 2004 21:41:28

Peshuha
Надо вот так:
GMEM_MOVEABLE | GMEM_DDESHARE


А что , в масме есть разница между [+ и |] ?
Код компилятор выдаёт тот-же .

Или есть другие причины ?


Дата: Мар 15, 2004 21:44:59 · Поправил: Asterix

Хмм.., я в масме использую вместо "+" or


Дата: Мар 16, 2004 00:38:44

bogrus
А что , в масме есть разница между [+ и |] ?
Нет, но предыдущий код был на C++.


Дата: Мар 16, 2004 01:09:23

А вот и не на С++, а на С!


Дата: Мар 16, 2004 04:34:08 · Поправил: q_q

bogrus
Теоретически Peshuha прав.
Разница в том, что в результате плюса может возникнуть перенос.
Afaik обычно константы - битовые, поэтому практически плюс и или эквивалентны.


Дата: Мар 16, 2004 05:13:31

volodya
Ну, декларации локальных переменных посреди функции, вроде "DWORD l = lstrlen(s);" не соответствуют стандарту ANSI C :-)))


Дата: Мар 16, 2004 10:49:38 · Поправил: q_q

Quantum
декларации локальных переменных посреди функции ... не соответствуют стандарту ANSI C
Не плохо бы указать ссылку на редакцию.
Например, INTERNATIONAL STANDARD ISO/IEC 9899 Second edition 1999-12-01 Programming languages — C (1'411'606):
...
6.2.1 Scopes of identifiers
...
2. For each different entity that an identifier designates, the identifier is visible (i.e., can be used) only within a region of program text called its scope. Different entities designated by the same identifier either have different scopes, or are in different name spaces. There are four kinds of scopes: function, file, block, and function prototype. (A function prototype is a declaration of a function that declares the types of its parameters.) ...


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.065