Прояснюючи поняття бібліотек windows 7

Настав час звернутися до суті бібліотек Windows 7. Вони є складовою частиною оболонки системи і використовуються в Windows всюди - в Windows Explorer, Меню Start, стандартному діалоговому вікні роботи з файлами. У цьому матеріалі ми розглянемо різні варіанти, за допомогою яких програмісти можуть зв`язати роботу бібліотек Windows 7 зі своїми додатками.

Бібліотеки є, по своїй суті, воротами для призначених для користувача даних в Windows 7. Користувачі Windows 7 будуть так чи інакше застосовувати бібліотеки в своїй повсякденній роботі. Тому всі вони очікують, що програми, що працюють в Windows 7, будуть правильно взаємодіяти з бібліотеками і зможуть забезпечити той же рівень зручності та прозорості, що і Windows Explorer. Саме тому так важливо, щоб ми, програмісти, знали, як правильно працювати з бібліотеками і вбудовувати їх підтримку в свої додатки.

Перш, ніж я перейду до суті, хочу зазначити, що хоча більшість програм повинні за замовчуванням коректно працювати з бібліотеками Windows 7, існує можливість вбудувати підтримку бібліотек в програму, щоб забезпечити найкращі результати роботи для користувачів.

Вбудована підтримка бібліотек Windows 7 в додатках

Хтось може запитати, а що трапиться, якщо моя програма не підтримує бібліотеки? Уявімо собі, що частиною функціональності програми є збереження файлу на диску. Програма запитує у користувача, в якому місці слід зберегти файл. Користувач вибирає бібліотеку документів як свою улюблену папку для збереження, оскільки саме так він надходить завжди, коли хоче зберегти документ, з яким збирається працювати далі. Але якщо програма не розуміє, що обрана користувачем бібліотека документів - зовсім не звичайна папка, вона буде безуспішно намагатися зберегти дані саме в бібліотеці як в папці. В цьому і полягає проблема, оскільки, як нам уже відомо, бібліотеки не є елементами файлової системи, тому до них не можна звертатися, як до звичайних папок з файлами.

Правильно підготовлене до роботи з бібліотеками додаток повинен включати механізми, що дозволяють управляти ситуаціями, коли користувач через недогляд або вибирає бібліотеку як папку для збереження, або завантажує вміст бібліотеки. Більш того, багато програм дозволяють користувачам взаємодіяти безпосередньо з файлової системою - це їх невід`ємне властивість. Програма повинна забезпечити користувачеві ті ж самі умови збереження даних, які знайомі їм по стандартному інтерфейсу Windows 7, що пропонує організовувати контент саме використовуючи бібліотеки. Включаючи папку в бібліотеку, користувачі визначають, де саме будуть зберігатися важливі для них дані, і тому програми повинні зважати на намірами користувачів, забезпечуючи можливість взаємодії з бібліотеками.

Відео: 2.4.14. Бібліотеки та уподобань Windows 7

У розробників є три способи інтеграції бібліотек Windows 7 в свою програму. Вам слід уважно ознайомитися з ними і вибрати відповідний.

  1. Основний метод інтеграції полягає у використанні нового стандартного діалогового вікна для роботи з файлом (Common File Dialog, далі CFD), через яке здійснюється вибір файлу або папки для завантаження або збереження.
  2. Другий метод дозволяє програмам по-новому «засяяти» в Windows 7, дозволивши їм працювати з бібліотеками та їх вмістом.
  3. Останній і найбільш передовою спосіб - весь час підтримувати синхронізацію з вмістом бібліотеки і безпосередньо маніпулювати ними, використовуючи IShellLibrary API, що дозволяє повністю контролювати їх, аж до створення нових бібліотек.



Давайте почнемо з самого першого варіанту, який слід розглядати також як необхідний мінімум вимог до додатка, щоб його можна було вважати сумісним з бібліотеками Windows 7.

Використання стандартного діалогового вікна для роботи з файлом

Гарна новина полягає в тому, що завдяки САВ користувачі можуть переглядати бібліотеки, виконувати пошук по їх вмісту і навіть вибирати бібліотеку як місце зберігання своїх даних - НЕ папку в бібліотеці, а власне бібліотеку!

Але (завжди є якесь «але») ми настійно рекомендуємо користуватися новим інтерфейсом CFD, представленими ще в Windows Vista, а не застарілими або модифікованими його версіями. Дуже важливо розуміти, що API для використання застарілого CFD не змінювалися з часів Windows Vista і ХР для забезпечення сумісності. Стара версія CFD (як видно на малюнку нижче) не підтримує бібліотеки безпосередньо і не забезпечує переваг, пропонованих в Windows 7.




Прояснюючи поняття бібліотек Windows 7

Але навіть якщо бібліотеки видно в правій частині вікна навігації, є потреба у додатковому клацання кнопкою миші для збереження в одній з підпапок, а не в самій бібліотеці. Також CFD старого зразка не надає можливостей пошуку і сортування, доступних в бібліотеках. Нарешті, стара версія не підтримує виділення одночасно декількох об`єктів в різних папках, що надається бібліотеками в рамках базової функціональності.

Таким чином, важливо вибрати правильні API для виведення коректної версії CFD. При використанні .NET у програміста є інструментарій простору імен System.Windows.Forms.FileDialog або Microsoft.Win32.FileDialog. Останній використовує застарілий варіант CFD. Саме тому слід користуватися простором імен WinForms для виведення нового CFD. Нижче ви бачите фрагмент коду, який забезпечує вибір користувачем місця зберігання файлу, виводячи CFD, як це показано далі на малюнку.

System.Windows.Forms.SaveFileDialog _fd =
new System.Windows.Forms.SaveFileDialog ();
_fd.Title = "Please choose a location to save your file";
_fd.FileName = "[Get Folder ...]";
_fd.Filter = "Library | no.files";
if (_fd.ShowDialog () == System.Windows.Forms.DialogResult.OK)
{
string dir_path = System.IO.Path.GetDirectoryName (_fd.FileName);
if (Dir_path! = null dir_path.Length gt; 0)
{
// this returns the path to the default save location
lblResult.Content = dir_path;
}

Відео: Як встановити віджети в Windows 7

Прояснюючи поняття бібліотек Windows 7

Розробники некерованого коду, повинні користуватися новим сімейством «природних» API для IFileDialog (IFileDialog, IFileOpenDialog, IFileSaveDialog, IFileDialogCustomize, IFileDialogEvents, IFileDialogControlEvents), які прийшли на зміну застарілим API GetOpenFileName і GetSaveFileName з попередніх версій Windows.

Некеровані API оболонки засновані на COM, тому перш, ніж використовувати будь-якої СОМ-об`єкт, слід неодмінно форматувати його шляхом виклику CoCreateInstance. Наприклад, наступний фрагмент коду забезпечує вибір користувачем бібліотеки або папки всередині неї в якості місця зберігання файлу, виводячи відповідний CFD.

* Ppsi = NULL;
IFileSaveDialog * pfod;
hr = CoCreateInstance (
CLSID_FileSaveDialog,
NULL,
CLSCTX_INPROC,
IID_PPV_ARGS (pfod));

if (SUCCEEDED (hr))
{
hr = pfod-gt; SetOptions (FOS_PICKFOLDERS);
if (SUCCEEDED (hr))
{
hr = pfod-gt; Show (hWndParent);
if (SUCCEEDED (hr))
{
hr = pfod-gt; GetResult (ppsi);
}
}
pfod-gt; Release ();
}

Після ініціалізації змінної * pfod IFileSaveDialog опції діалогу встановлюються на вибір папки передачею прапора FOS_PICKFOLDERS в процедуру IFileOpenDialog.SetOptions (). Цей код повідомляє діалогу «Відкрити», що користувачеві потрібно надати вибір папок замість файлів і дозволити вибір бібліотеки. При виборі бібліотеки, CFD поверне основну папку для збереження за замовчуванням, асоційовані з обраної бібліотекою.

Ці два фрагмента коду дуже прості і не є чимось принципово новим. Тим не менш, важливо забезпечити стабільність і сталість реалізації підтримки бібліотек Windows 7 в додатках, що працюють в новій операційній системі.

У наступній статті ми продемонструємо роботу нового API бібліотек Windows 7, а також способи використання вмісту бібліотек за допомогою існуючих API оболонки Windows.


Поділися в соц. мережах:

По темі: