GDI+ как работать с WINAPI

Тема в разделе "WASM.BEGINNERS", создана пользователем sivsoft, 5 май 2009.

  1. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    ну хоть кто-то помогите ПЛИЗ
     
  2. SL7549

    SL7549 New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2009
    Сообщения:
    17
    это называется кодировки, WCHAR - UTF16-LE, а CHAR - ANSI, iconv можно использовать для перекодировки, но если надо перекодировать определенный набор символов, то можно самому написать простенький перекодировщик
     
  3. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    SL7549
    т.е. из-за кодировки в одном случае - указатель указывает на первую букву, а во втором на весь текст?
    а почему? разъясните плиз. просто если бы были в одном случае крякозябры, в другом правильный текст - то понятно - а тут...
     
  4. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    SL7549
    и еще что за библиотека содержит iconv и как ей пользоваться?
     
  5. SL7549

    SL7549 New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2009
    Сообщения:
    17
    В UTF16 при использовании символов с кодами меньше 0x80, они записываются также, как и в ANSI, но так как в UTF16 каждый символ имеет длину 2+ байт, то этот самый второй байт заполняется нулем и поэтому все неюникод функции считают что это конец строки. А iconv, да и вообще многие вещи хорошо смотреть в поиске кода google, http://www.google.ru/codesearch?q=iconv Эта функция должна входить в стандартную поставку библиотеку C, не помню точно в каком файле объявлена, а если нет, то попробуй использовать libiconv.
     
  6. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    А вот эта функция подойдет?
    MultiByteToWideChar(1251,0,lpcString,dwLocalLength,lpReturnValue,(dwLocalLength+1)*sizeof(WCHAR));
     
  7. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    Уже разобрался можно:
    WCHAR fnm [1024];
    MultiByteToWideChar(1251, 0, ofn.lpstrFile, -1, fnm, 1024);
     
  8. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    о горе, еще не все :dntknw:
    необходимо загружать Bitmap из файла в одном событии, а работать с ним совсем в другом. Вроде логичное решение хранить глобальную переменную Bitmap, которая то одну то другую картинку содержит и их передает, хотя еще лучше использовать Bitmap * - получать адрес и его потом передавать нужной функции в другом обработчике события. Так вот просто Bitmap как глобальную переменную не получается создать компиллятор сразу ругается:
    Error 1 error C2512: 'Gdiplus::Bitmap' : no appropriate default constructor available c:\Users\Siv Soft\Documents\Visual Studio 2008\Projects\Test\Test\Test.cpp 65 Test
    если же написать, например так Bitmap *image то при получении адреса в событии никакой ругани нет, а при передаче адреса:
    Bitmap img = *image;
    ругань такая:
    Error 4 error C2248: 'Gdiplus::Bitmap::Bitmap' : cannot access private member declared in class 'Gdiplus::Bitmap' c:\Users\Siv Soft\Documents\Visual Studio 2008\Projects\Test\Test\Test.cpp 260 Test
    Что делать?
     
  9. g00r

    g00r New Member

    Публикаций:
    0
    Регистрация:
    24 янв 2009
    Сообщения:
    20
    Вероятнее всего выучить C++.
     
  10. sivsoft

    sivsoft New Member

    Публикаций:
    0
    Регистрация:
    26 дек 2008
    Сообщения:
    82
    g00r
    очень дельный совет и глупый...

    с FreeImage и другими библиотеками - так делать можно было - а здесь в чем проблема?
     
  11. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    sivsoft
    Совет, между прочим, правильный, хотя и неконкретный. При использовании C++ всё-таки рекомендуется знать, что происходит при объявлении переменной, присваивании и зачем конструкторы делают закрытыми.
    Команда "Bitmap img = *image;" означает, что программист хочет создать второй экземпляр Bitmap и начальным значением для этого второго экземпляра выбрал содержимое первого. GDI+ в таком виде это запрещает, чтобы программист не сделал этого случайно, по ошибке или по незнанию. Если цель - именно создать второй экземпляр, то в классе Bitmap есть метод Clone. Зачем разыменовывать указатель, из #28 непонятно, для передачи одного и того же изображения между функциями или файлами нужно использовать указатель (либо ссылку, что по существу то же самое в другом синтаксисе).