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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Выдаёт отрицательный индекс иконки 
:(
    Опции темы
N1ko
Дата 29.11.2009, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

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



Почему то выдаёт отрицательные значения индекса иконки в системном ImageList. Почему так происходит? Если допустим взять папку и поставить на неё ту же самую иконку, выдаёт корректный результат. Помогите плиз. 
   
Код

    public const uint SHGFI_ICONLOCATION = 0x000001000;     // get icon location

        [StructLayout(LayoutKind.Sequential)]
        private struct ShellFileInfoStructure
        {
            public IntPtr hIcon;
            public IntPtr iIcon;
            public uint dwAttributes;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
            public string szDisplayName;
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
            public string szTypeName;
        };

        [DllImport("shell32.dll")]
        private static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, out ShellFileInfoStructure psfi, uint cbSizeFileInfo, uint uFlags);

        public void GetIndex(string Way)
        {
            ShellFileInfoStructure rr = new ShellFileInfoStructure();
            SHGetFileInfo(Way, 0, out rr, (uint)Marshal.SizeOf(rr), SHGFI_ICONLOCATION);
            MessageBox.Show(rr.iIcon.ToString());
            MessageBox.Show(rr.szDisplayName);

        }



PM MAIL ICQ   Вверх
GremlinProg
Дата 29.11.2009, 23:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Цитата(N1ko @  30.11.2009,  01:14 Найти цитируемый пост)
public IntPtr iIcon

int?



--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
N1ko
Дата 30.11.2009, 04:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

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



Можно и инт В данном случае роли не играет
PM MAIL ICQ   Вверх
GremlinProg
Дата 30.11.2009, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2706
Регистрация: 9.8.2005
Где: Тюмень

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



Цитата(N1ko @  30.11.2009,  06:27 Найти цитируемый пост)
Можно и инт В данном случае роли не играет

чтобы узнать, какую роль он играет, нужно знать, на какую платформу компилируется пример,
т.к. поднятый старший бит в dwAttributes, без учета int даст как раз отрицательный индекс на 64-битной машине,
либо при ее эмуляции, с разрешением IntPtr в 64, а не в 32 бита

если не знаешь точно, просто поставь int


--------------------
"Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины."
PM WWW ICQ   Вверх
N1ko
Дата 14.12.2009, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 383
Регистрация: 30.12.2007
Где: Киев

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



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

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


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

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


 




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


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

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