Russian Qt Forum
Май 02, 2024, 22:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 2 [3]   Вниз
  Печать  
Автор Тема: Приколы  (Прочитано 45702 раз)
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4727



Просмотр профиля WWW
« Ответ #30 : Март 22, 2012, 18:32 »

обожаю вид кода при использовании WinAPI:
Код
C++ (Qt)
IApplicationDocumentLists *pADL;
HRESULT hr = CoCreateInstance(CLSID_ApplicationDocumentLists, NULL, CLSCTX_INPROC, IID_PPV_ARGS(&pADL));
if (SUCCEEDED(hr))
{
   if (SUCCEEDED(hr = pADL->SetAppID(appUserModelID())))
   {
       IObjectArray *pRecentItemsArray;
       if (SUCCEEDED(hr = pADL->GetList(ADLT_RECENT, /*maxRecentFiles*/0, IID_PPV_ARGS(&pRecentItemsArray))))
       {
           UINT n;
           if (SUCCEEDED(hr = pRecentItemsArray->GetCount(&n)))
           {
               qDebug("got %u recent items", n);
               for (UINT i = 0; i < n; ++i)
               {
                   IShellItem *pShellItem;
                   if (SUCCEEDED(hr = pRecentItemsArray->GetAt(i, IID_PPV_ARGS(&pShellItem))))
                   {
                       LPWSTR path = NULL;
                       if (SUCCEEDED(hr = pShellItem->GetDisplayName(SIGDN_FILESYSPATH, &path)))
                       {
                           if (!wcscmp(path, filePath.toStdWString().c_str()))
                           {
                               IApplicationDestinations *pAD;
                               HRESULT hr = CoCreateInstance(CLSID_ApplicationDestinations, NULL, CLSCTX_INPROC, IID_PPV_ARGS(&pAD));
                               if (SUCCEEDED(hr))
                               {
                                   if (SUCCEEDED(hr = pAD->SetAppID(appUserModelID())))
                                   {
                                       if (SUCCEEDED(hr = pAD->RemoveDestination(pShellItem)))
                                           qDebug("successfully removed");
                                       else
                                           qDebug("Error calling RemoveDestination(): %d", HRESULT_CODE(hr));
                                   }
                                   else
                                       qDebug("Error calling SetAppID(): %d", HRESULT_CODE(hr));
 
                                   pAD->Release();
                               }
                               else
                                   qDebug("Error calling CoCreateInstance(CLSID_ApplicationDestinations): %d", HRESULT_CODE(hr));
 
                               break;
                           }
                       }
                       else
                           qDebug("Error calling GetDisplayName(): %d", HRESULT_CODE(hr));
 
                       CoTaskMemFree(path);
                   }
                   else
                       qDebug("Error calling GetAt(): %d", HRESULT_CODE(hr));
               }
           }
           else
               qDebug("Error calling GetCount(): %d", HRESULT_CODE(hr));
       }
       else
           qDebug("Error calling GetList(): %d", HRESULT_CODE(hr));
   }
   else
       qDebug("Error calling SetAppID(): %d", HRESULT_CODE(hr));
 
   pADL->Release();
}
else
   qDebug("Error calling CoCreateInstance(CLSID_ApplicationDocumentLists): %d", HRESULT_CODE(hr));

кстати, когда искал нормальные примеры С/С++ кода для использования недавних документов в вин7, то так толком ничего и не смог найти - сплошные обрывки и дотнет код. зато наткнулся на Qt-библиотеку, реализующую все фичи вин7 таскбара - Q7Goodies, которая стоит начиная от 200 баксов. и после этого появилась идея написать нормальную открытую обёртку для Qt (или сначала просто над этими ужасами WinAPI вызовов для С++, а поверх неё уже для Qt). помню несколько фич уже реализовано в QtDockTile - прогрессбар, иконки и последние документы. есть ли смысл?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #31 : Апрель 27, 2012, 12:32 »

Цитировать
обожаю вид кода при использовании WinAPI:

мнээээ... я бы это же по-другому написал:

if ( ! SUCCEEDED(hr) )
    qDebug("Error calling CoCreateInstance(CLSID_ApplicationDocumentLists): %d", HRESULT_CODE(hr));
else
if ( ! SUCCEEDED(hr = pADL->SetAppID(appUserModelID())) )
{
    ...
}
else
... ну и т.д.

а если в случае ошибки просто надо свалить, то еще проще - if без else и return при каждом неуспехе

добавлять новые случаи гораздо удобнее, и выглядит стройнее. Я не шучу!  Смеющийся
« Последнее редактирование: Апрель 27, 2012, 12:34 от Гурман » Записан

2^7-1 == 127, задумайтесь...
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #32 : Июнь 29, 2013, 16:39 »

Записан

Юра.
zingilcho
Гость
« Ответ #33 : Август 24, 2013, 00:12 »



Записан
Страниц: 1 2 [3]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.077 секунд. Запросов: 22.