Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сохранение курсоров на диске...нэ понимаю:))) 
:(
    Опции темы
WM_SASHA
Дата 12.8.2008, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 12.4.2007
Где: Узбекистан г.Ташк ент

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



Привет всем!
всюду пишут что курсоры не отличаются от иконок. я не спорю, но не могу понять почему же не работает код, который исправно сохраняет на диске иконки. в msdn указывается что нужно поменять поле на двойку и всё....что то вот не работает...файлы с расширением .cur сохраняются на диске, но только они не распознаются как пиктограммы(как рисунок не открывается). пытался скомпоновать полученный "курсор" со своей тестовой программой. компилятор говорит о старом DIB формате. кстати сколько в shell32.dll курсоров? у меня выводится всего 5, иконов 76(по идендификаторам). 
подскажите пожалуйста.
Код

HANDLE hFile;
     HRSRC hRsrc;
     HGLOBAL hGlobal;
     ICONDIR iconDir;
     ICONDIRENTRY iconDirEntry;
     LPGRPICONDIR lpGrpIconDir;
     LPGRPICONDIRENTRY lpGrpIconDirEntry;
     LPICONIMAGE lpIconImage;
     int nId, iCountChar, iTemp;
     DWORD dwWrittenBytes, dwCountResource, dwTemp=0;
     wchar_t wcDirTemp[256];
     wchar_t wcFileName[50];

         //resourceId глобальная структура, в ней храню описатели и идендификаторы пиктограмм
     nId=resourceId[dwIndexResource].iResourceID;
         //hLib это описатель модуля shell32.dll, пробовал другие экзешники - таже фигня
     hRsrc = FindResource( hLib, MAKEINTRESOURCE( nId ), iResourceType );
     hGlobal = LoadResource( hLib, hRsrc );
     lpGrpIconDir = (LPGRPICONDIR) LockResource( hGlobal );
     lpGrpIconDirEntry=(LPGRPICONDIRENTRY)(lpGrpIconDir+1);//&lpGrpIconDir->idEntries;

//задание структуры ICONDIR
     iconDir.idReserved=0;
     iconDir.idType=2; //это то что написано в мсдн 
     iconDir.idCount=1;

     dwCountResource=lpGrpIconDir->idCount;
        
    iCountChar=wsprintf(wcDirTemp, 
        L"C:\\Documents and Settings\\******(уть ещё чего:)))\\Рабочий стол\\OutputFiles\\int_%d.cur", 
        resourceId[dwIndexResource].iResourceID);

    nId=lpGrpIconDirEntry->nID;
    hRsrc = FindResource( hLib, MAKEINTRESOURCE(nId), RT_CURSOR);//iResourceType-11 );
    hGlobal = LoadResource( hLib, hRsrc);
    lpIconImage =(LPICONIMAGE)LockResource(hGlobal);
    hFile=CreateFile(wcDirTemp, GENERIC_READ|GENERIC_WRITE, 0, NULL,
            CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
        if(INVALID_HANDLE_VALUE==hFile) return FALSE;         
//подготовка данных и задание структуры ICONDIRENTRY
    iconDirEntry.bHeight=lpGrpIconDirEntry->bHeight;
    iconDirEntry.bWidth=lpGrpIconDirEntry->bWidth;
    iconDirEntry.bColorCount=lpGrpIconDirEntry->bColorCount;
    iconDirEntry.bReserved=0;
    iconDirEntry.wPlanes=lpGrpIconDirEntry->wPlanes;
    iconDirEntry.wBitCount=lpGrpIconDirEntry->wBitCount;
    iconDirEntry.dwBytesInRes=lpGrpIconDirEntry->dwBytesInRes;
    iconDirEntry.dwImageOffset=sizeof(ICONDIR)+sizeof(ICONDIRENTRY);
//запись данных в файл
    WriteFile(hFile, &iconDir, sizeof(ICONDIR), &dwWrittenBytes, FALSE);
    WriteFile(hFile, &iconDirEntry, sizeof(ICONDIRENTRY), &dwWrittenBytes, FALSE);
    WriteFile(hFile, lpIconImage, iconDirEntry.dwBytesInRes, &dwWrittenBytes, FALSE);
    CloseHandle(hFile);

///////////////////////////////////////////////////////////////////////
//другой листинг, где собраны объявления структур
typedef struct
{
    WORD           idReserved;   // Reserved (must be 0)
    WORD           idType;       // Resource Type (1 for icons)
    WORD           idCount;      // How many images?
    //ICONDIRENTRY   idEntries[1]; // An entry for each image (idCount of 'em)
} ICONDIR, *LPICONDIR;

typedef struct
{
    BYTE        bWidth;          // Width, in pixels, of the image
    BYTE        bHeight;         // Height, in pixels, of the image
    BYTE        bColorCount;     // Number of colors in image (0 if >=8bpp)
    BYTE        bReserved;       // Reserved ( must be 0)
    WORD        wPlanes;         // Color Planes
    WORD        wBitCount;       // Bits per pixel
    DWORD       dwBytesInRes;    // How many bytes in this resource?
    DWORD       dwImageOffset;   // Where in the file is this image?
} ICONDIRENTRY, *LPICONDIRENTRY;

typedef struct
{
   BITMAPINFOHEADER   icHeader;   // DIB header
   RGBQUAD         icColors[1];   // Color table
   BYTE            icXOR[1];      // DIB bits for XOR mask
   BYTE            icAND[1];      // DIB bits for AND mask
} ICONIMAGE, *LPICONIMAGE;

#pragma pack( push )
#pragma pack( 2 )
typedef struct
{
   BYTE   bWidth;               // Width, in pixels, of the image
   BYTE   bHeight;              // Height, in pixels, of the image
   BYTE   bColorCount;          // Number of colors in image (0 if >=8bpp)
   BYTE   bReserved;            // Reserved
   WORD   wPlanes;              // Color Planes
   WORD   wBitCount;            // Bits per pixel
   DWORD   dwBytesInRes;         // how many bytes in this resource?
   WORD   nID;                  // the ID
} GRPICONDIRENTRY, *LPGRPICONDIRENTRY;
#pragma pack( pop )

#pragma pack( push )
#pragma pack( 2 )
typedef struct 
{
   WORD            idReserved;   // Reserved (must be 0)
   WORD            idType;       // Resource type (1 for icons)
   WORD            idCount;      // How many images?
   //GRPICONDIRENTRY   idEntries[1]; // The entries for each image
} GRPICONDIR, *LPGRPICONDIR;
#pragma pack( pop )

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


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 22.10.2007
Где: Error connect to MySQL Da...

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



Сколько курсоров, иконок, да и вообще ресурсов в shell32 можно посмотреть через Restorator.

Насчет сохранения (извлечения)... Где-то я видел исходник редактора ресурсов типа Resorator'a, но только не припомню где... Поищи в гугле, вроде как на забугорном сайте...
PM   Вверх
WM_SASHA
Дата 15.8.2008, 07:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 12.4.2007
Где: Узбекистан г.Ташк ент

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



Цитата(fridkaratel @ 12.8.2008,  01:04)
Сколько курсоров, иконок, да и вообще ресурсов в shell32 можно посмотреть через Restorator.

Насчет сохранения (извлечения)... Где-то я видел исходник редактора ресурсов типа Resorator'a, но только не припомню где... Поищи в гугле, вроде как на забугорном сайте...

 не нашёл. вопрос в силе :(
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




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


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

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