Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование на WinApi, C++Builder, Visual C++


Информационный Канал Subscribe.Ru


Выпуск № 46-2004 BCBDEV.RU

Здравствуйте уважаемые подписчики!

Перед вами очередной выпуск рассылки "Программирование на WinApi"
Переводы многих функций Win32API, которые часто используются в данной рассылке, вы можете получать, подписавшись на дружественную рассылку "WinAPI на русском".
Справочник по функциям Win32API вы можете посмотреть на сайте BcbDev.ru в разделе MSDN по-русски.

Как получить системную иконку, ассоциированную с файлом?
Примерно так (это для одного файла).
Если filepath пуст, мы предполагаем, что мы ищем иконку, связанную с расширением "TXT". К сожалению, SHGetFileInfo() терпит неудачу, если файл не существует, так что мы положимся на скрытую особенность оставшуюся с первых дней DOS. Имя файла, часть названия которого соответствует устройству DOS, фактически, указывает на это устройство. Так "NUL.txt" фактически ссылается на NULL устройство. В общем, так или иначе, это работает. Очевидно, расширение фактически игнорируется, и мы возвращаем заданный по умолчанию значок.
HICON GetAssociatedIcon (char * filepath) 
{ 
    WORD iconIndex = 0; 
    HICON hIcon = 0; 

    if (filepath == "") 
        filepath = "nul.txt";   
    try 
    { 
        char buf[MAX_PATH]; 
        strncpy(buf, filepath, sizeof(buf)); 
        hIcon = ::ExtractAssociatedIcon(hInst,buf, &iconIndex); 
    } 
    catch (...) 
    { 
        hIcon = 0; 
    } 
    return hIcon; 
} 
Небольшой пример использования:
...
    HICON   hIcon;
...
    switch (message) 
    {
...
        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
            hIcon = GetAssociatedIcon("C:\\AUTOEXEC.BAT"); 
            DrawIcon(hdc, 10, 10, hIcon); 
            EndPaint(hWnd, &ps);
            break;
...
    }
...

Удачи Вам в Ваших делах Куковинец Андрей aka Juggernaut

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное