Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Gdy użytkownik kliknie prawym przyciskiem myszy element typu pliku, aby wyświetlić arkusz właściwości, powłoka systemowa wywołuje programy obsługi arkusza właściwości zarejestrowane dla typu pliku. Każda procedura obsługi może dodać jedną stronę niestandardową do domyślnego arkusza właściwości.
Co musisz wiedzieć
Technologie
- Shell
Warunki wstępne
- Znajomość menu skrótów
Instrukcje
Krok 1. Rejestrowanie programu obsługi arkusza właściwości dla typu pliku
Oprócz standardowej rejestracji modelu obiektów składników (COM), dodaj podklucz PropertySheetHandlers do podklucza shellex klucza ProgID aplikacji związanej z typem pliku. Utwórz podklucz PropertySheetHandlers z nazwą programu obsługi i ustaw wartość domyślną na postać tekstową identyfikatora klasy (CLSID) GUID programu obsługi arkusza właściwości.
Aby dodać więcej niż jedną stronę do arkusza właściwości, zarejestruj procedurę obsługi dla każdej strony. Maksymalna liczba stron, które może obsługiwać arkusz właściwości, wynosi 32. Aby zarejestrować wiele procedur obsługi, utwórz klucz w kluczu shellex dla każdej procedury, z wartością domyślną ustawioną na GUID CLSID procedury. Nie jest konieczne utworzenie odrębnego obiektu dla każdego programu obsługi, co oznacza, że wiele procedur obsługi może mieć tę samą wartość identyfikatora GUID. Strony będą wyświetlane w kolejności, w jakiej ich klucze są wymienione w obszarze shellex.
W poniższym przykładzie pokazano wpis rejestru, który umożliwia obsługę dwóch rozszerzeń arkusza właściwości dla przykładowego typu pliku .myp. W tym przykładzie dla każdej strony jest używany oddzielny obiekt, ale dla obu tych obiektów można również użyć pojedynczego obiektu.
HKEY_CLASSES_ROOT
.myp
(Default) = MyProgram.1
CLSID
{Page 1 Property Sheet Handler CLSID GUID}
InProcServer32
(Default) = C:\MyDir\MyPropSheet1.dll
ThreadingModel = Apartment
{Page 2 Property Sheet Handler CLSID GUID}
InProcServer32
(Default) = C:\MyDir\MyPropSheet2.dll
ThreadingModel = Apartment
MyProgram.1
(Default) = MyProgram Application
shellex
PropertySheetHandlers
MyPropSheet1
(Default) = {Page1 Property Sheet Handler CLSID GUID}
MyPropSheet2
(Default) = {Page2 Property Sheet Handler CLSID GUID}
Krok 2. Implementowanie procedury obsługi arkusza właściwości dla typu pliku
Oprócz ogólnej implementacji omówionej w How Property Sheet Handlers Work, program obsługi arkusza właściwości dla typu pliku musi również mieć odpowiednią implementację interfejsu IShellPropSheetExt. Tylko metoda IShellPropSheetExt::AddPages wymaga implementacji bez tokenu. Powłoka nie wywołuje IShellPropSheetExt::ReplacePage.
Metoda IShellPropSheetExt::AddPages umożliwia programowi obsługi arkusza właściwości dodawanie strony do arkusza właściwości. Metoda ma dwa parametry wejściowe. Pierwszy, lpfnAddPage, jest wskaźnikiem do AddPropSheetPageProc funkcji wywołania zwrotnego, która jest używana do dostarczenia Shellowi informacji potrzebnych do dodania strony do karty właściwości. Drugi, lParam, jest wartością zdefiniowaną przez powłokę, która nie jest przetwarzana przez program obsługi. Po wywołaniu funkcji wywołania zwrotnego jest po prostu przekazywane z powrotem do Shell.
Ogólna procedura implementowania AddPages jest następująca.
implementowanie metody AddPages
- Przypisz odpowiednie wartości do składowych struktury PROPSHEETPAGE. W szczególności
- Przypisz zmienną, która przechowuje licznik odwołań obsługi, do członka pcRefParent. Ta praktyka uniemożliwia odciążenie obiektu obsługi podczas wyświetlania arkusza właściwości.
- Można również zaimplementować funkcję PropSheetPageProc wywołania zwrotnego i przypisać jej wskaźnik do elementu członkowskiego pfnCallback. Ta funkcja jest wywoływana, gdy strona zostanie utworzona i kiedy ma zostać zniszczona.
- Utwórz dojście strony HPAGE, przekazując strukturę PROPSHEETPAGE do funkcji CreatePropertySheetPage .
- Wywołaj funkcję wskazywaną przez lpfnAddPage. Ustaw swój pierwszy parametr na uchwyt HPAGE, który został utworzony w poprzednim kroku. Ustaw jego drugi parametr na wartość lParam, która została przekazana do AddPages przez powłokę.
- Wszystkie komunikaty skojarzone ze stroną zostaną przekazane do procedury obsługującej okno dialogowe przypisanej do pfnDlgProc elementu członkowskiegoPROPSHEETPAGE struktury.
- Jeśli przypisano funkcję PropSheetPageProc wywołania zwrotnego do pfnCallback, zostanie ona wywołana, gdy strona ma zostać zniszczona. Program obsługi może następnie wykonać wszelkie wymagane operacje oczyszczania, takie jak zwolnienie wszelkich przechowywanych odwołań.
Poniższy przykład kodu ilustruje prostą implementację AddPages.
STDMETHODIMP CShellPropSheetExt::AddPages(LPFNADDPROPSHEETPAGE, lpfnAddPage, LPARAM lParam)
{
PROPSHEETPAGE psp;
HPROPSHEETPAGE hPage;
psp.dwSize = sizeof(psp);
psp.dwFlags = PSP_USEREFPARENT | PSP_USETITLE | PSP_USECALLBACK;
psp.hInstance = g_hInst;
psp.pszTemplate = MAKEINTRESOURCE(IDD_PAGEDLG);
psp.hIcon = 0;
psp.pszTitle = TEXT("Extension Page");
psp.pfnDlgProc = (DLGPROC)PageDlgProc;
psp.pcRefParent = &g_DllRefCount;
psp.pfnCallback = PageCallbackProc;
psp.lParam = (LPARAM)this;
hPage = CreatePropertySheetPage(&psp);
if(hPage)
{
if(lpfnAddPage(hPage, lParam))
{
this->AddRef();
return S_OK;
}
else
{
DestroyPropertySheetPage(hPage);
}
}
else
{
return E_OUTOFMEMORY;
}
return E_FAIL;
}
Zmienna g_hInst jest uchwytem instancji dla biblioteki DLL, a IDD_PAGEDLG to identyfikator zasobu szablonu okna dialogowego strony. Funkcja PageDlgProc to procedura okna dialogowego, która obsługuje komunikaty strony. Zmienna g_DllRefCount przechowuje liczbę odwołań do obiektu. Metoda AddPages wywołuje metodę AddRef, aby zwiększyć liczbę. Liczba odwołań jest jednak zwalniana przez funkcję wywołania zwrotnego, PageCallbackProc, gdy strona ma zostać usunięta.
Uwagi
Aby zapoznać się z ogólnym omówieniem sposobu rejestrowania handlerów rozszerzeń Shell, zobacz także Creating Shell Extension Handlers.
Tematy pokrewne