Tworzenie aplikacji z interfejsem wstążki
Struktura wstążki systemu Windows składa się z dwóch odrębnych, ale zależnych platform programistycznych: języka znaczników opartego na języku Extensible Application Markup Language (XAML) w celu deklarowania kontrolek i ich układu wizualnego oraz zestawu interfejsów opartych na języku C++ Component Object Model (COM) w celu zdefiniowania funkcji poleceń i punktów zaczepienia aplikacji. Ten podział pracy w architekturze struktury wstążki wymaga, aby deweloper, który chce korzystać z bogatych możliwości interfejsu użytkownika oferowanych przez tę strukturę, musiał zaprojektować i opisać interfejs użytkownika w znacznikach, a następnie użyć interfejsów COM struktury wstążki, aby połączyć ją z aplikacją hostującą.
- Plan działania wstążki
- Napisz znacznik
- tworzenie aplikacji
- aktualizacje i uruchomienia w czasie działania
- Obsługa OLE
- Tematy pokrewne
Harmonogram działania wstążki
Wizualne cechy aplikacji typu Ribbon, takie jak wyświetlane elementy sterujące i miejsca ich umieszczania, są określane w znacznikach (zobacz Deklarowanie poleceń i elementów sterujących za pomocą znaczników Ribbon). Logika poleceń aplikacji, taka jak to, co się stanie po naciśnięciu przycisku, jest implementowana w kodzie.
Proces implementowania wstążki i dołączania jej do aplikacji systemu Windows wymaga czterech podstawowych zadań: pisania znaczników, kompilowania znaczników, pisania kodu i kompilowania i łączenia całej aplikacji.
Na poniższym diagramie przedstawiono przepływ pracy typowej implementacji wstążki.
W poniższych sekcjach opisano ten proces bardziej szczegółowo.
Napisz znacznik
Po zaprojektowaniu interfejsu Wstążki, pierwszym zadaniem dewelopera aplikacji jest opisanie tego interfejsu za pomocą znaczników Wstążki.
Ważny
Plik schematu frameworku wstążki, UICC.xsd, jest instalowany razem z zestawem Microsoft Windows Software Development Kit (SDK) dla Windows 7 i .NET Framework 4.0. Przy użyciu standardowej ścieżki instalacji plik znajduje się w folderze %ProgramFiles%\Microsoft SDKs\Windows\[numer wersji]\Bin, do którego można odwoływać się przez wiele edytorów XML w celu zapewnienia wskazówek i automatycznego uzupełniania.
Kontrolki wstążki, polecenia wstążki (elementy niezależne od kontrolek, które zapewniają podstawowe funkcje dla kontrolek wstążki), a wszystkie układy kontrolek i relacje wizualne są deklarowane w znacznikach. Struktura znaczników wstążki podkreśla rozróżnienie między kontrolkami wstążki a poleceniami w dwóch głównych hierarchiach węzłów: drzewie poleceń i zasobów oraz drzewie widoków.
Wszystkie kontenery i akcje uwidocznione przez wstążkę są deklarowane w drzewie Polecenia i zasoby. Każdy element Command jest skojarzony z zestawem zasobów zgodnie z wymaganiami projektu interfejsu użytkownika.
Po utworzeniu poleceń dla aplikacji należy zadeklarować kontrolki w drzewie widoków i powiązać każdą kontrolkę z poleceniem, aby uwidocznić funkcjonalność polecenia. Struktura wstążki określa rzeczywiste pozycjonowanie kontrolek na podstawie hierarchii sterowania zadeklarowanej tutaj.
Poniższy przykład kodu ilustruje sposób deklarowania kontrolki typu Przycisk z etykietą "Zakończ aplikację" i kojarzenia jej z poleceniem "Zakończ".
<Application xmlns="http://schemas.microsoft.com/windows/2009/Ribbon">
<Application.Commands>
<Command Name="cmdExit" LabelTitle="Exit application" />
</Application.Commands>
<Application.Views>
<Ribbon>
<Ribbon.Tabs>
<Tab>
<Group>
<Button CommandName="cmdExit" />
</Group>
</Tab>
</Ribbon.Tabs>
</Ribbon>
</Application.Views>
</Application>
Napiwek
Chociaż istnieje możliwość użycia dowolnego rozszerzenia nazwy pliku dla pliku znaczników wstążki, .xml jest zalecanym rozszerzeniem używanym w całej dokumentacji.
Skompiluj znaczniki
Po utworzeniu pliku znaczników wstążki należy go skompilować w formacie binarnym przez kompilator znaczników wstążki, kompilator poleceń interfejsu użytkownika (UICC), który jest dołączony do zestawu SDK (Software Development Kit) systemu Windows. Odwołanie do tego pliku binarnego jest przekazywane do metody IUIFramework::LoadUI podczas inicjowania struktury wstążki przez aplikację hosta.
UICC można uruchomić bezpośrednio z poziomu wiersza poleceń lub dodać jako „Niestandardowy krok kompilacji” w programie Visual Studio.
Na poniższej ilustracji przedstawiono kompilator znaczników UICC w oknie powłoki CMD zestawu SDK systemu Windows 7.
Na poniższym rysunku przedstawiono UICC dodany, jako krok kompilacji niestandardowej w programie Visual Studio.
UICC generuje trzy pliki: binarną wersję znaczników (.bml), nagłówek definicji identyfikatora (.h plik), który udostępnia elementy znaczników aplikacji hosta Wstążki, oraz skrypt definicji zasobów (.rc plik) do powiązania obrazów Wstążki i zasobów tekstowych z aplikacją hosta podczas kompilacji.
Aby uzyskać więcej informacji na temat kompilowania znaczników struktury wstążki, zobacz Kompilowanie znaczników wstążki.
Kompilowanie aplikacji
Gdy wstępny interfejs użytkownika aplikacji wstążki został zaprojektowany i zaimplementowany w znacznikach, należy napisać kod aplikacji, który inicjuje framework, używa znaczników i wiąże polecenia zadeklarowane w znacznikach z odpowiednimi obsługiwaczami poleceń w aplikacji.
Ważny
Ponieważ struktura wstążki jest oparta na modelu COM, zaleca się, aby projekty wstążki używały operatora __uuidof(), aby odwoływać się do identyfikatorów GUID dla interfejsów platform wstążki (IID). W takich przypadkach, gdy nie można użyć operatora __uuidof(), takiego jak użycie kompilatora innego niż Microsoft lub aplikacja hosta jest oparta na języku C, identyfikatory IID muszą być zdefiniowane przez aplikację, ponieważ nie są zawarte w uuid.lib.
Jeśli identyfikatory IID są zdefiniowane przez aplikację, należy użyć identyfikatorów GUID określonych w pliku UIRibbon.idl.
UIRibbon.idl jest dostarczany jako część Windows Software Development Kit (SDK) i można go znaleźć na standardowej ścieżce instalacji: %ProgramFiles%\Microsoft SDKs\Windows\v7.0\Include.
Inicjowanie wstążki
Na poniższym diagramie przedstawiono kroki wymagane do zaimplementowania prostej aplikacji Wstążki.
Poniższe kroki szczegółowo opisują sposób implementowania prostej aplikacji wstążki.
CoCreateInstance
Aplikacja wywołuje standardową funkcję COM CoCreateInstance z identyfikatorem klasy Ribbon framework, aby uzyskać wskaźnik do frameworku.
IUIFramework* pFramework = NULL; HRESULT hr = ::CoCreateInstance( CLSID_UIRibbonFramework, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pFramework)); if (FAILED(hr)) { return hr; }
Initialize(hwnd, IUIApplication*)
Aplikacja wywołuje IUIFramework::Initialize, przekazując dwa parametry: uchwyt do okna głównego, które będzie zawierać Wstążkę, oraz wskaźnik do implementacji IUIApplication, która umożliwia platformie wywoływanie zwrotne do aplikacji.
! [Ważne]
Struktura wstążki jest inicjowana jako jednowątkowy apartament (STA).hr = pFramework->Initialize(hWndHost, pApplication); if (FAILED(hr)) { return hr; }
LoadUI(wystąpienie, nazwaZasobu)
Aplikacja wywołuje IUIFramework::LoadUI, aby powiązać zasób znaczników. Pierwszym parametrem tej funkcji jest dojście do wystąpienia aplikacji wstążki. Drugi parametr to nazwa zasobu znaczników binarnego, który został wcześniej skompilowany. Przekazując znaczniki binarne do struktury wstążki, aplikacja sygnalizuje strukturę wstążki i sposób rozmieszczania kontrolek. Udostępnia również platformie manifest poleceń do ujawnienia (takich jak Wklej, Wytnij, Znajdź), które są używane przez platformę, gdy wykonuje wywołania zwrotne związane z poleceniami w czasie wykonywania.
hr = pFramework->LoadUI(GetModuleHandle(NULL), L"APPLICATION_RIBBON"); if (FAILED(hr)) { return hr; }
IUIApplication::OnCreateUICommand wywołania zwrotne
Po wykonaniu kroków od 1 do 3 struktura wstążki wie, które polecenia mają być widoczne na wstążce. Jednak struktura nadal potrzebuje dwóch rzeczy, zanim wstążka jest w pełni funkcjonalna: sposób, aby poinformować aplikację, kiedy polecenia są wykonywane, oraz sposób pobierania zasobów poleceń lub właściwości w czasie wykonywania. Jeśli na przykład pole kombi ma zostać wyświetlone w interfejsie użytkownika, platforma musi poprosić o elementy, za pomocą których należy wypełnić pole kombi.
Te dwie funkcje są obsługiwane za pośrednictwem interfejsu IUICommandHandler. W szczególności dla każdego polecenia zadeklarowanego w znaczniku binarnym (zobacz krok 3 powyżej), struktura wywołuje IUIApplication::OnCreateUICommand, aby poprosić aplikację o obiekt IUICommandHandler dla tego polecenia.
Notatka
Interfejs IUICommandHandler pozwala przypisać obsługę poleceń do jednego lub więcej poleceń.
Aplikacja jest wymagana co najmniej do zaimplementowania metody IUIApplication, które zwracają E_NOTIMPL, jak pokazano w poniższym przykładzie.
STDMETHOD(OnViewChanged)(UINT32 viewId,
UI_VIEWTYPE typeID,
IUnknown *view,
UI_VIEWVERB verb,
INT32 uReasonCode)
{
return E_NOTIMPL;
}
STDMETHOD(OnCreateUICommand)(UINT32 commandId,
UI_COMMANDTYPE typeID,
IUICommandHandler **commandHandler)
{
return E_NOTIMPL;
}
STDMETHOD(OnDestroyUICommand)(UINT32 commandId,
UI_COMMANDTYPE typeID,
IUICommandHandler *commandHandler)
{
return E_NOTIMPL;
}
Połącz znaczniki z aplikacją
W tym momencie pliki zasobów znaczników muszą być połączone z aplikacją hosta, dołączając odwołanie do pliku definicji zasobów znaczników (zawierającego odwołanie do pliku nagłówka znaczników) w pliku zasobu aplikacji. Na przykład aplikacja o nazwie RibbonApp z plikiem zasobów o nazwie ribbonUI.rc wymaga następującego wiersza w pliku RibbonApp.rc.
#include "ribbonUI.rc"
W zależności od używanego kompilatora i linkera, skrypt definicji zasobów może wymagać skompilowania przed skompilowaniem aplikacji Ribbon. Kompilator zasobów (RC) narzędzia wiersza polecenia dostarczanego z programem Microsoft Visual Studio i zestawem Windows SDK może służyć do tego zadania.
Kompilowanie aplikacji
Po skompilowaniu aplikacji wstążki można ją uruchomić i przetestować interfejs użytkownika. Jeśli interfejs użytkownika wymaga dostosowania i nie ma żadnych zmian w skojarzonych programach obsługi poleceń w podstawowym kodzie aplikacji, popraw plik źródłowy znaczników, ponownie skompiluj znaczniki przy użyciu UICC.exei połącz nowe pliki zasobów znaczników. Po ponownym uruchomieniu aplikacji zostanie wyświetlony zmodyfikowany interfejs użytkownika.
Wszystko to jest możliwe bez dotykania podstawowego kodu aplikacji — znaczne ulepszenie w porównaniu ze standardowym opracowywaniem i dystrybucją aplikacji.
Aktualizacje i wykonania w czasie działania
Struktura komunikacji w czasie wykonywania struktury wstążki jest oparta na modelu wypychania i ściągania lub dwukierunkowego obiektu wywołującego.
Ten model umożliwia platformie informowanie aplikacji o wykonaniu polecenia i umożliwia wykonywanie zapytań, aktualizowanie i unieważnianie wartości właściwości oraz zasobów wstążki zarówno dla platformy, jak i aplikacji. Ta funkcja jest udostępniana za pośrednictwem wielu interfejsów i metod.
Struktura pobiera zaktualizowane informacje o właściwościach z aplikacji typu Wstążka za pośrednictwem metody wywołania zwrotnego IUICommandHandler::UpdateProperty. Identyfikator polecenia (ID polecenia) i klucz właściwości, które identyfikują właściwość polecenia do zaktualizowania, są przekazywane do metody, która następnie zwraca lub wypycha wartość tego klucza właściwości do frameworku.
Struktura wywołuje IUICommandHandler::Execute po wykonaniu polecenia, identyfikując zarówno identyfikator polecenia, jak i typ wykonania, który wystąpił (UI_EXECUTIONVERB). W tym miejscu aplikacja określa logikę wykonywania polecenia.
Na poniższym diagramie przedstawiono komunikację w czasie wykonywania poleceń między strukturą a aplikacją.
Notatka
Zaimplementowanie funkcji IUICommandHandler::UpdateProperty i IUICommandHandler::Execute nie jest konieczne, aby początkowo wyświetlić wstążkę w aplikacji. Jednak te metody są niezbędne, aby upewnić się, że aplikacja działa poprawnie, gdy polecenia są wykonywane przez użytkownika.
Obsługa OLE
Aplikację ze wstążką można skonfigurować jako serwer OLE do obsługi zdalnej aktywacji OLE.
Obiekty utworzone w aplikacji serwera OLE zachowują swoje skojarzenie z aplikacją serwera po wstawieniu (wklejonym lub umieszczonym) w aplikacji klienckiej OLE (lub kontenerze). W przypadku wbudowanej aktywacji OLE dwukrotne kliknięcie obiektu w aplikacji klienckiej spowoduje otwarcie dedykowanego wystąpienia aplikacji serwera i załadowanie obiektu do edycji. Po zamknięciu aplikacji serwera wszystkie zmiany wprowadzone w obiekcie zostaną odzwierciedlone w aplikacji klienckiej.
Notatka
Framework wstążki nie obsługuje aktywacji OLE w miejscu. Obiekty utworzone na serwerze OLE opartym na wstążce nie mogą być edytowane z poziomu aplikacji klienckiej OLE. Do działania wymagana jest zewnętrzna dedykowana instancja aplikacji serwera.
Tematy pokrewne